兼容的Android SDK
兼容的Android SDK
为了协助您将现有Android应用移植到Fire OS,亚马逊对一些使用最广泛的Android SDK进行了兼容性测试。对于列出的每个SDK,您都可以根据指示使用面向Fire OS的应用中包含的所有API,而无需更改代码。
有关可帮助您增进用户互动、管理应用和赚取更多收入的可用亚马逊SDK列表,请参阅SDK和示例。
与Fire OS兼容的Android SDK
| SDK名称 |
SDK版本 |
描述 |
| Adjust SDK |
4.33.2 |
Adjust SDK是一个移动应用营销平台,可以让开发者跟踪和分析用户获取、参与度和保留率指标。 |
| AdX SDK |
21.5.0 |
适用于广告管理系统的Google移动广告SDK是一个移动广告平台,您可以利用它从应用获得收入。 |
| Apache HttpCore SDK |
5.2.1 |
HttpCore是一组底层HTTP传输组件,可用于以很小的占用空间构建自定义客户端和服务器端HTTP服务。 |
| AppLovin Max |
11.8.2 |
MAX是AppLovin的应用内盈利解决方案。MAX是独立的中立拍卖平台,广告商可以平等地获得所有广告库存并同时出价,这样可以促进竞争和提升您的CPM。 |
| AppsFlyer SDK |
6.10.2 |
AppsFlyer提供应用安装和事件记录功能。您可以记录安装、会话和应用内事件。 |
| Bolts Applinks SDK |
1.4.0 |
Applinks SDK提供了一种跨操作系统机制,用于定义和发布深度链接方案。其他应用可以直接链接到针对其运行的设备进行了优化的体验。 |
| Bolts Task |
1.4.0 |
Bolts是一个底层库的集合,旨在简化移动应用开发。 |
| Bugsnag |
3.6.3 |
面向Java的Bugsnag异常报告程序可自动检测并报告Java代码中的错误和异常。 |
| ChartBoost |
9.2.0 |
Chartboost是一个应用内广告盈利平台。 |
| DT Exchange |
8.2.2 |
DT Exchange是一个程序化盈利解决方案,帮助发布者与代表品牌和用户收购买家的全球需求源建立联系。 |
| EventBus |
3.3.1 |
EventBus是一个面向Android和Java的开源库,采用发布者/订阅者模式进行松散耦合。EventBus只需几行代码即可实现与解耦类的集中通信,从而可以简化代码、消除依赖关系并加快应用开发。 |
| ExoPlayer SDK |
2.16.1 |
ExoPlayer是一款应用级媒体播放器。它提供了Android MediaPlayer API的替代方案,用于在本地和通过互联网播放音频和视频。 |
| Facebook App Links |
13.2.0 |
App Links是一种开放标准,用于应用中内容的深层链接。当用户将内容共享到Facebook或其他启用App Links的应用时,开发者可以创建可从该内容跳转回应用的链接。 |
| Facebook Core |
14.0.0 |
Facebook Core SDK是Facebook-android-sdk的一部分,包含对Facebook SDK其他部分的分析。 |
| Facebook Fresco |
2.5.0 |
Fresco是一个功能强大的系统,用于在Android应用中显示图像。它可以从网络、本地存储或本地资源加载图像,并在图像加载完毕之前显示占位符。 |
| Facebook Login SDK |
13.2.0 |
面向Android的Facebook SDK让用户能够使用Facebook登录您的应用。用户还可以向应用授予权限,允许应用代表他们在Facebook上检索信息或执行操作。 |
| Facebook Messenger Share Kit SDK |
13.2.0 |
分享到Messenger SDK让用户能够将您应用中的链接和照片共享到Messenger。 |
| Facebook Sharing SDK |
13.2.0 |
Facebook Sharing SDK允许您的应用代表用户在Facebook上共享信息。 |
| Facebook Yoga SDK |
1.19.0 |
Facebook Yoga SDK是一个用于设计用户界面的跨平台布局引擎。 |
| FasterXML Jackson |
2.11.1 |
Jackson,有时也称为“面向Java的JSON”,是一套面向Java(和JVM)的数据处理工具。它包含旗舰流媒体JSON解析器/生成器库、匹配的数据绑定库(与JSON相互转换的POJO)以及其他数据格式模块,用于处理以Avro、BSON、CBOR、CSV、Smile、(Java)属性、Protobuf、TOML、XML或YAML编码的数据。它还包含大量数据格式模块,用于支持一系列广泛使用的数据类型,例如Guava、Joda、PCollection等。 |
| Firebase Crash Reporting SDK |
2.9.2 |
Firebase Crashlytics是一款轻型实时崩溃报告程序,可帮助您跟踪、划分优先级并解决影响应用质量的稳定性问题。 |
| FMOD |
1.43 |
FMOD由Firelight Technologies开发,是用于视频游戏和应用的音效引擎及创作工具。它可在多种操作系统上播放和混合各种不同格式的声音。 |
| Fyber FairBid |
3.28.0 |
FairBid为移动应用发布者提供了统一的实时拍卖环境,名为Fyber Marketplace。 |
| Glide |
4.13.1 |
Glide是一个专注于平滑滚动的Android图像加载库。Glide提供了易于使用的API、高性能可扩展资源解码流水线以及自动资源池。Glide支持视频静止图像、图像和动态GIF的获取、解码和显示。Glide包含一个灵活的API,让开发者能够插入几乎任何网络堆栈。 |
| Google Guava |
31.1-android |
Guava是Google提供的一组核心Java库,包含集合类型(例如多映射和多集)、不可变集合、图形库,以及用于并发、I/O、哈希、缓存、基元、字符串等的实用程序。 |
| Gson SDK |
2.8.6 |
Gson是一个Java库,用于将Java对象转换为其JSON表示形式。它还可以将JSON字符串转换为等效Java对象。 |
| IAB Open Measurement SDK |
1.3.37 |
IAB Open Measurement SDK提供通用代码和库,以便第三方访问测量数据。 |
| Jackson |
1.9.12 |
Jackson可实现以下功能:读取(解析)和写入(生成)JSON内容、支持数据绑定(数据映射、序列化/去序列化)以实现JSON和Java对象之间的转换,以及支持与其他数据格式之间的相互转换和访问API以提高互操作性。 |
| Joda-Time |
2.10.14 |
Joda-Time提供了Java日期和时间类的高质量替代品。它是Java SE 8之前的实际标准Java日期和时间库。 |
| libphonenumber-android |
8.12.49 |
Google libphonenumber的Android端口,Google的常用Java、C++和JavaScript库,用于国际电话号码的解析、格式化和验证。Java版本针智能手机上的运行进行了优化,自4.0以来一直被Android框架使用。 |
| Moshi |
1.11.0 |
Moshi是一个JSON库,可实现JSON的序列化和去序列化。 |
| OkHttp SDK |
3.14.0 |
OkHttp是一个HTTP客户端。 |
| Pangle SDK |
5.0.0.5 |
Pangle是TikTok for Business的广告网络。它让各种规模的应用发布者都可以通过高效的应用内广告来增加用户数量并最大限度地提高收入。 |
| 协议缓冲区 |
3.0.0 |
协议缓冲区是Google具有语言中立性、操作系统中立性、可扩展性的机制,用于结构化数据的序列化。只需定义您想要的数据结构化方式,即可利用特别生成的源代码,轻松使用各种语言与各种数据流进行结构化数据的相互读写。 |
| ReactiveX |
3.0.0 |
ReactiveX Android模块为RxJava添加了最低限度的类,让Android应用中响应组件的编写变得轻松省力。更具体地说,它提供了一个调度程序,可在主线程或任意给定的循环器上进行调度。 |
| ReLinker SDK |
1.4.5 |
一款强大的适用于Android的原生库加载程序。使用ReLinker很简单,只需将标准System.loadLibrary(“mylibrary”);调用更换为ReLinker.loadLibrary(context, “mylibrary”); |
| RxAndroid |
3.0.2 |
适用于RxJava 3的Android专用绑定。该模块为RxJava添加了最低限度的类,让Android应用中响应组件的编写变得轻松省力。 |
| RxJava |
3.1.4 |
RxJava是一个在Java虚拟机上实现的响应式扩展库,用于使用可观察序列来编写异步程序和基于事件的程序。它扩展了观察者模式以支持数据/事件序列,并添加了允许以声明方式将序列组合在一起的运算符,同时消除了对低级线程、同步、线程安全和并发数据结构等问题的顾虑。 |
| 面向Android的Shimmer |
0.5.0 |
Shimmer是一个Android库,提供了为Android应用中的任意视图添加微光效果的简便方式。最初是为Facebook Home开发的,可用作加载指示器,不显突兀、实用性高。 |
| SLF4J |
2.0.0-alpha7 |
面向Java的Simple Logging Facade (SLF4J)用作各种日志记录框架的抽象,例如java.util.logging、logback和reload4j。SLF4J允许最终用户在部署时插入所需的日志记录框架。 |
| Square Retrofit |
2.9.0 |
面向Android和Java的类型安全HTTP客户端。 |
| Tapjoy SDK |
12.11.1 |
在世界上最热门的移动游戏和应用中,帮助广告商与他们的理想受众建立联系。 |
| Tink-android Google SDK |
1.7.0 |
Tink是一个开源密码库,由Google的密码学家和安全工程师编写而成。Tink安全而简单的API通过以用户为中心的设计、细致的实现和代码审查以及广泛的测试,减少常见的误区。 |
| Unity Engine SDK |
2021.3.18f1 |
Unity Engine SDK for Unity是一套开发工具、服务和现成资产,以允许开发者创建真实世界手游的功能扩展了Unity游戏开发环境。 |
| Volley |
1.2.1 |
Volley是一个HTTP库,让Android应用能够更加方便快捷地联网。 |
| Vungle Ad SDK |
6.12.1 |
Vungle让移动应用的开发者和提供方可以通过其产品盈利,并将产品呈现给合适的目标群体。 |
| ZXING SDK |
3.2.0 |
ZXing是一个开源多格式一维/二维条形码图像处理库,使用Java实现并具有其他语言的端口。 |
Last updated: 2024年12月16日
").insertBefore(this);
}
});
});
$(document).ready(function() {
if ($("#jumpoffset").length) {
var scrollhash = document.getElementById('jumpoffset');
scrollhash.scrollIntoView(true);
if (location.hash) {
location.href = location.hash;
} else {
var scrollbody = document.querySelector('.mainColumn');
scrollbody.scrollIntoView(true);
window.scroll(0, -500);
}
}
});
$(document).ready(function() {
if ($("#jump").length) {
var scrollold = document.getElementById('jump');
scrollold.scrollIntoView(true);
window.scroll(0, -100);
if (location.hash) {
location.href = location.hash;
}
}
});
//resize container on local builds
$(document).ready(function() {
if (window.location.href.indexOf("/127.0.0.1:4000/") > -1) {
document.querySelector('.container-fluid').style.position = 'fixed';
}
});
//add underline to headers
$(document).ready(function() {
if ($(".productTitle").is(':contains("Alexa Skills Kit")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Skills Kit")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($(".productTitle").is(':contains("Alexa Presentation Language (APL)")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Skills Kit")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($(".productTitle").is(':contains("Alexa Connect Kit")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Connect Kit")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($(".productTitle").is(':contains("A/B Testing")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Skills Kit")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($(".productTitle").is(':contains("Alexa Smart Properties")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Smart Properties")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($(".productTitle").is(':contains("Alexa Conversations Developer Guide")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Skills Kit")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($(".productTitle").is(':contains("Alexa Design Guide")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Design Guide")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Design Guide")')) {
$(this).css("padding", "0");
}
});
}
if ($(".productTitle").is(':contains("Alexa Gadgets Toolkit")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Gadgets Toolkit")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Gadgets Toolkit")')) {
$(this).css("padding", "0");
}
});
}
if ($(".productTitle").is(':contains("Alexa Voice Service")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Alexa Voice Service")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($("h1").is(':contains("Alexa Reference Content")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Reference")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($("h1").is(':contains("Alexa Videos")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Videos")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($("h1").is(':contains("Alexa Code Samples")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Code Samples")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
if ($("h1").is(':contains("Documentation Home")')) {
$(".dppnItem a").each(function() {
if ($(this).is(':contains("Home")')) {
$(this).css("border-bottom", "1.3px solid #FFFFFF");
}
});
}
});
$(document).ready(function () {
const myScrollspy = $("#myScrollspy");
if (myScrollspy.length) {
const containsList2orList3 = myScrollspy.find(".list2, .list3").length > 0;
if (containsList2orList3) {
myScrollspy.css("display", "block");
$(".fa.fa-info-circle").show();
} else {
myScrollspy.css("display", "none");
$(".fa.fa-info-circle").hide();
}
}
});
/**
* This function moves the 'page-not-translated' section from its original position
* to a new position after the 'atd-categories-header' and ensures it is displayed
* only in the new location. This is achieved by hiding the section initially,
* moving it, and then displaying it again once it is in the correct position.
*/
$(document).ready(function() {
const $pageNotTranslatedMessage = $('#page-not-translated');
const $desktopCategoriesHeader = $('.navigation-header.atd-categories-header');
const $mobileToggleHeader = $('.mobile-toggle');
if ($pageNotTranslatedMessage.length) {
if ($mobileToggleHeader.length) {
$pageNotTranslatedMessage.insertAfter($mobileToggleHeader);
} else if ($desktopCategoriesHeader.length) {
$pageNotTranslatedMessage.insertAfter($desktopCategoriesHeader);
}
$pageNotTranslatedMessage.show();
}
});
// Function to handle smooth scrolling to target elements when links are clicked
$(document).ready(function () {
$('.customspy a, .mainColumn a').on('click', function (event) {
const targetId = $(this).attr('href');
if (targetId && targetId.startsWith('#')) {
event.preventDefault();
const targetElement = document.querySelector(`[id="${targetId.replace('#', '')}"]`);
if (targetElement) {
const hash = targetId.substring(1);
window.history.pushState(null, '', `#${hash}`);
targetElement.scrollIntoView(true);
window.scroll(0, -500);
}
}
});
});
window.addEventListener('DOMContentLoaded', function () {
const targetId = window.location.hash;
if (targetId) {
const targetElement = document.querySelector(targetId);
if (targetElement) {
setTimeout(() => {
targetElement.scrollIntoView(true);
window.scrollBy(0, -500);
}, 10);
}
}
});
function activateContentBasedOnHash() {
const currentHash = window.location.hash.substring(1);
if (currentHash) {
const contentElement = document.getElementById(currentHash);
if (contentElement) {
activateTabAndContent(contentElement);
}
}
}
function activateTabAndContent(contentElement) {
const tabSection = contentElement.closest('.tab-pane');
if (tabSection) {
const parentTabLink = document.querySelector(`a[href='#${tabSection.id}']`);
if (parentTabLink) {
const parentNavTabs = parentTabLink.closest('.nav-tabs');
if (parentNavTabs) {
parentNavTabs.querySelectorAll('.nav-link').forEach(link => {
link.classList.remove('active', 'show');
});
parentTabLink.classList.add('active', 'show');
}
const parentTabContent = tabSection.closest('.tab-content');
if (parentTabContent) {
parentTabContent.querySelectorAll('.tab-pane').forEach(tab => {
tab.classList.remove('active', 'show');
});
tabSection.classList.add('active', 'show');
}
}
}
}
function scrollToHashWithOffset() {
const tabHash = window.location.hash;
const targetTabLink = document.querySelector(`.nav-tabs a[href="${tabHash}"]`);
const mainContentColumn = document.querySelector('.inline');
if (targetTabLink && mainContentColumn) {
const totalHeaderHeight = getTotalHeaderHeight() + 40;
targetTabLink.scrollIntoView({behavior: 'smooth', block: 'start'});
setTimeout(() => {
mainContentColumn.scrollBy(0, -totalHeaderHeight);
}, 20);
}
}
function getTotalHeaderHeight() {
return [...document.querySelectorAll('.atd-services-header, .atd-categories-header')]
.reduce((total, header) => total + (header ? header.offsetHeight : 0), 0);
}
function handleClick(event) {
event.preventDefault();
const link = event.currentTarget;
const hash = link.getAttribute('href').substring(1);
const contentElement = document.getElementById(hash);
if (contentElement) {
activateTabAndContent(contentElement);
scrollToHashWithOffset();
}
}
function handleBackToTopClick(event) {
event.preventDefault();
const mainContentColumn = document.querySelector('.inline');
if (mainContentColumn) {
mainContentColumn.scrollTo({top: 0, behavior: 'smooth'});
}
window.scrollTo({top: 0, behavior: 'smooth'});
}
document.addEventListener('DOMContentLoaded', () => {
activateContentBasedOnHash();
scrollToHashWithOffset();
const myScrollspy = document.getElementById('myScrollspy');
if (myScrollspy) {
myScrollspy.querySelectorAll('a[href^="#"]').forEach(link => {
link.addEventListener('click', handleClick);
});
}
document.querySelectorAll('.dpfBackToTopLink, .backToTop').forEach(link => {
link.addEventListener('click', handleBackToTopClick);
});
});
// Show tab link as selected when clicked
$(document).ready(function() {
$('.nav-tabs > li > a').on('click', function(e) {
e.preventDefault();
$(this).tab('show');
$(this).addClass('active show');
});
});
// Fix for when version dropdown is on the same page as nav tab dropdown
// closes other dropdown menu to avoid overlap/usability issues
$(document).ready(function() {
// Version selector dropdown
$('.versionsButton').click(function(e) {
// Close the nav tab dropdown if open
$('.nav-link.dropdown-toggle').siblings('.dropdown-menu').removeClass('show');
});
// Nav tab selector dropdown
$('.nav-link.dropdown-toggle').click(function(e) {
// Close the version dropdown if open
$('.versionsButton').siblings('.dropdown-menu').removeClass('show');
});
});
// Handle active state management for dropdown menu in nav-tabs
// Fixes edge case issues for when version selector dropdown and
// nav-tab dropdown appear on the same page
$(document).ready(function() {
// Function to deactivate all tab panes and reset dropdown items
function deactivateAllTabs() {
$('.position .nav-item.dropdown .dropdown-menu .dropdown-item').each(function() {
const targetId = $(this).attr('href');
$(targetId).removeClass('active show');
$(this).removeClass('active show');
});
}
// Store the original pushState function
const originalPushState = history.pushState;
// Create a custom event for pushState
const pushStateEvent = new Event('pushState');
// Override pushState
history.pushState = function() {
originalPushState.apply(this, arguments);
// Dispatch the custom event
window.dispatchEvent(pushStateEvent);
};
// Add pushState listener
window.addEventListener('pushState', function() {
const params = new URLSearchParams(window.location.search);
const vValue = params.get('v');
// Handle query parameter change from version selector
if (vValue) {
// Remove active classes from all tabs
deactivateAllTabs();
$('.position').each(function() {
var firstTabPane = $(this).find('.tab-pane').first();
if (firstTabPane.length > 0) {
var tabId = firstTabPane.attr('id');
var dropdownItem = $('.dropdown-menu .dropdown-item[href="#' + tabId + '"]');
// Make first tab in each version active
dropdownItem.addClass('active show');
firstTabPane.addClass('active show');
}
});
}
});
// Handle dropdown item clicks
$('.position .nav-item.dropdown .dropdown-menu .dropdown-item').click(function(e) {
e.preventDefault();
// Remove active classes from all tabs
deactivateAllTabs();
// Add active class to clicked item
$(this).addClass('active show');
// Show corresponding tab content
const targetId = $(this).attr('href');
$(targetId).addClass('active show');
});
// Handle initial load from URL hash
if (window.location.hash) {
const tabId = window.location.hash;
if ($(tabId).length) {
// Deactivate all tabs first
deactivateAllTabs();
// Activate the correct tab and content
$(`.position .nav-item.dropdown .dropdown-menu .dropdown-item[href="${tabId}"]`).addClass('active show');
$(tabId).addClass('active show');
}
}
});
// Fix issue when anchor linking into a tab with a dropdown menu
$(document).ready(function() {
// Handle initial load from URL hash
if (window.location.hash) {
const tabId = window.location.hash;
if ($(tabId).length) {
// Deactivate active links in dropdown
$('.nav-item.dropdown .dropdown-menu .dropdown-item').each(function() {
$(this).removeClass('active show');
});
}
}
});