针对运行Fire OS 16的亚马逊Fire TV设备进行开发
Fire OS 16基于API级别36。以下各部分说明了在为Fire OS 16构建应用时应考虑的一些重要变化。以下部分中朝向标准Android组件的迁移有助于降低兼容性问题的风险,并简化应用的维护。
- 运行Fire OS 16和之前Fire OS版本的设备
- Android更新
- 更新您的亚马逊SDK
- 让应用以Fire OS 16设备为目标
- 测试您的应用
- minSdkVersion和targetSdkVersion的设置
- minSdkVersion对支持的设备有何影响以及向后兼容性
- 支持
- 相关主题
运行Fire OS 16和之前Fire OS版本的设备
Fire OS 16引入了Android 15 (API 35) 和Android 16 (API 36) 的更新。部分较早版本的Fire TV设备仍然搭载较早版本的Fire OS。
有关Fire TV设备和版本的详细列表,请参阅Fire OS版本。
Android更新
以下是重要功能和行为变化列表,供您在升级到Android 16时有所了解:
ART内部API限制
Android 16限制对内部Android运行时 (ART) 和Dalvik类(sun.misc.Unsafe、dalvik.system.*、libcore.io.*)的访问。它还限制对隐藏框架API的反射。
解决方案
如果您的应用使用这些内部API,请执行以下操作:
- 将
sun.misc.Unsafe替换为java.lang.invoke.VarHandle或AtomicReferenceFieldUpdater。 - 将
dalvik.system.*替换为ClassLoaderAPI。 - 检查您的依赖项。许多第三方广告SDK和分析库都使用这些内部API。更新到第三方SDK的最新版本。
边缘到边缘显示强制执行
Android 15 (API 35) 为以SDK 35+为目标的应用强制执行边缘到边缘渲染。
在Android 16 (API 36) 上,允许应用选择退出的windowOptOutEdgeToEdgeEnforcement主题属性被完全忽略。以前使用此变通方法的应用的布局会损坏。
解决方案
如果您的应用使用windowOptOutEdgeToEdgeEnforcement,请执行以下操作:
- 使用
WindowInsetsCompatAPI来正确处理嵌入内容。 - 移除所有
windowOptOutEdgeToEdgeEnforcement,因为它不再适用于API 36。 - 测试应用的布局,确保没有内容被遮蔽。
有关详细信息,请参阅边缘到边缘选择退出。
TLS 1.0/1.1移除
从Android 15 (API 35) 开始,不允许使用TLS 1.0和TLS 1.1协议版本。
解决方案
如果您的应用使用TLS 1.0/1.1,请执行以下操作:
- 确保您的后端服务器支持TLS 1.2或更高版本。
- 从
SSLContext或OkHttp客户端设置中移除任何显式TLS 1.0/1.1配置。 - 如果您的
network_security_config.xml指定了最低TLS版本,请对其进行更新。
16KB页面大小支持
Android 16引入了对16KB内存页面大小的支持。如果您的应用包含原生 (NDK) 库,则必须使用16KB页面对齐来编译这些库。
解决方案
如果您的应用包含原生库,请执行以下操作:
- 使用
-Wl,-z,max-page-size=16384重建原生库。 - 使用
objdump -p libYourLib.so | grep LOAD验证对齐情况。
原生库对齐不当的应用可能会崩溃或无法在运行16KB页面大小内核的设备上加载。
在Android 16上,具有4KB对齐原生库且缺少android:pageSizeCompat清单声明的应用在每次启动时都会触发面向用户的兼容性警告对话框,并在兼容性降级模式下运行。要抑制警告并避免使用兼容模式,请使用16KB对齐重新构建您的原生库,或者将以下内容添加到清单中:
<application
android:pageSizeCompat="true"
... >
需要本地网络权限
Android 16要求使用本地网络发现(mDNS、SSDP、NsdManager、多播)的应用必须拥有NEARBY_WIFI_DEVICES权限。
解决方案
使用以下权限:
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" />
没有此权限,设备发现和投射功能(Chromecast、智能音箱、多房间音频)将停止运行。
Dolby/DTS音频直通失效
从Android 15 (API 35) 开始,当达到资源限制时,系统可能会使用直通或卸载音频编码(Dolby AC3、E-AC3、DTS、TrueHD)使AudioTrack实例失效。
解决方案
如果您的应用使用上述音频编码,请执行以下操作:
- 注册
AudioTrack.OnRoutingChangedListener以检测音频输出何时失效。 - 通过重新创建
AudioTrack或回退到解码后的音频输出来妥善处理失效问题。 - 彻底测试HDMI直通场景(Dolby/DTS环绕声)。
BOOT_COMPLETED行为变化
从Android 15 (API 35) 开始,处于“已停止”状态的应用将不再接收BOOT_COMPLETED广播。应用在全新安装(从未启动)或用户强制停止时进入停止状态。
此外,Android 15还会阻止带有BOOT_COMPLETED接收器的应用在启动期间启动受限的前台服务类型(媒体播放、数据同步、相机)。
解决方案
检查您的BOOT_COMPLETED接收器,并移除所有启动受限前台服务类型的接收器。改为使用WorkManager。
有关详细信息,请参阅程序包停止状态变化。
必须提供前台服务类型
从Android 14 (API 34) 开始,所有前台服务都必须在清单中声明foregroundServiceType。在Fire OS 16上,在没有服务类型的情况下声明FOREGROUND_SERVICE权限的应用会因MissingForegroundServiceTypeException而崩溃。
解决方案
使用以下服务类型:
<service
android:name=".PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="false" />
有效类型包括:mediaPlayback、dataSync、location、camera、microphone、phoneCall、connectedDevice、mediaProjection、health、remoteMessaging、systemExempted、shortService和specialUse。
预测性返回手势强制执行
从Android 16开始,所有应用都将强制使用预测性返回手势。已弃用的onBackPressed() 方法和 KeyEvent.KEYCODE_BACK 拦截不再控制返回导航行为。
解决方案
-
在
AndroidManifest.xml<应用程序>标签中设置android:enableOnBackInvokedCallback="true"。<!-- AndroidManifest.xml --> <application android:enableOnBackInvokedCallback="true" ... > -
将所有
onBackPressed()覆盖项替换为OnBackInvokedCallback或JetpackOnBackPressedCallbackAPI。getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, () -> { // 处理返回导航 } );onBackInvokedDispatcher.registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT ) { // 处理返回导航 }
onBackPressed() 的应用在Fire OS 16设备上可能会出现返回按钮导航中断的情况(包括Fire TV遥控器返回按钮)。targetSdkVersion限制
从Android 14 (API 34) 开始,用户不能安装targetSdkVersion低于23的应用。满足此最低目标API级别的要求旨在提高用户的安全性和隐私性。在Fire OS 16上:
targetSdkVersion早于24的应用可能会全部被禁止安装。targetSdkVersion介于24到27之间的应用会向用户显示一次性兼容性警告。
如需了解更多详细信息,请参阅确保与Android 16的兼容性。
确切的警报限制
从Android 14 (API 34) 开始,不再预先授予SCHEDULE_EXACT_ALARM。在安排确切的警报之前,应用必须在运行时检查canScheduleExactAlarms()。
解决方案
使用以下代码示例作为起点:
AlarmManager alarmManager = getSystemService(AlarmManager.class);
if (alarmManager.canScheduleExactAlarms()) {
// 安排精确警报
} else {
// 回退到不精确的警报或请求权限
}
val alarmManager = getSystemService(AlarmManager::class.java)
if (alarmManager.canScheduleExactAlarms()) {
// 安排精确警报
} else {
// 回退到不精确的警报或请求权限
}
RenderScript移除
从Android 15 (API 35) 开始,RenderScript运行时已被移除。捆绑了RenderScript库(librenderscript-toolkit.so、libRSSupport.so、librsjni.so)的应用在Fire OS 16上崩溃。
解决方案
使用Vulkan计算或RenderScript Intrinsics Replacement Toolkit迁移图像处理代码。有关详细信息,请参阅从RenderScript迁移。
JobScheduler配额强制执行
Android 16为JobScheduler引入了更严格的运行时配额。运行时间过长或过于频繁的作业可能会受到限制或停止。代码反编译分析显示,91%的Fire TV应用(119个应用中有108个)使用JobScheduler并且受这些配额的约束。这是一种行为变化。应用不会崩溃,但随着时间的推移,后台任务的可靠性可能会降低。
有关更多详细信息,请参阅JobScheduler配额优化。
已停用无障碍功能公告
Android 16不再支持announceForAccessibility() 和TYPE_ANNOUNCEMENT无障碍功能事件。
解决方案
如果您的应用使用这些已停用的API,请执行以下操作:
- 将
announceForAccessibility()替换为setAccessibilityPaneTitle()或android:accessibilityLiveRegion(适用于直播区域) - 使用窗格标题将
TYPE_ANNOUNCEMENT事件替换为TYPE_WINDOW_STATE_CHANGED。
必须获得媒体投影许可
从Android 15 (API 35) 开始,使用MediaProjection API的应用必须在每个会话中获得用户同意。先前授予的权限在会话之间不再有效。
解决方案
如果您的应用使用MediaProjection API,请执行以下操作:
- 每次启动屏幕截图或录制时都要申请
MediaProjection权限。 - 妥善处理用户拒绝同意的情况。
更新您的亚马逊SDK
如果您的应用集成了任何亚马逊SDK,请确保您使用的是与Fire OS 16兼容的最新版本。
| SDK | 下载 |
|---|---|
| 亚马逊应用商店SDK(IAP、DRM、简单登录) | 亚马逊应用商店SDK |
| 亚马逊设备消息传递 (ADM) SDK | 亚马逊设备消息 (ADM) SDK |
| A3L SDK(身份验证、位置、消息传递) | A3L SDK |
| Fire TV集成SDK(内容个性化) | Fire TV集成SDK |
| Login with Amazon SDK | 其他SDK和资源 |
有关SDK的完整列表,请参阅亚马逊SDK和示例。
让应用以Fire OS 16设备为目标
用户可能会在Fire OS 5、Fire OS 6、Fire OS 7、Fire OS 8、Fire OS 14或Fire OS 16设备上运行应用。为了最大限度提高应用与设备上Fire OS版本的兼容性,亚马逊建议根据SDK级别确定目标设备。
在代码中,可检查Build.VERSION.SDK_INT是否大于等于36(Android 16 API级别),以Fire OS 16设备为目标。
有关更多详细信息,请参阅支持不同平台版本。
测试您的应用
为了在Fire OS 16设备上测试您的应用,可以使用亚马逊应用商店质量中心的实时设备交互。借助实时设备交互,您可以在亚马逊应用商店设备群中远程访问虚拟Fire OS 16设备,并在该设备上运行测试。要了解有关与虚拟设备群交互的更多信息,请参阅实时设备交互 - 虚拟设备。
此外,如果想分发应用以进行封闭式Beta测试,可以使用动态应用测试 (LAT),并相应地将Fire OS 16设备作为目标。要开始使用LAT,请参阅动态应用测试入门。
minSdkVersion和targetSdkVersion的设置
将targetSdkVersion设置成您确定为目标的最高API级别。对于Fire OS 16设备,亚马逊要求将targetSdkVersion设置为36。为了保证您的应用在Fire OS 16设备上的兼容性,必须将运行Fire OS 5、Fire OS 6、Fire OS 7、Fire OS 8和Fire OS 14的旧Fire TV设备上的应用升级到targetSdkVersion 36。
通过将minSdkVersion设置为所需的API级别,您仍然可以支持较旧的设备。
下表显示了基于Fire OS版本的API级别。
| Fire OS版本 | API级别 |
|---|---|
| Fire OS 16 | 36 |
| Fire OS 14 | 34 |
| Fire OS 8 | 30 |
| Fire OS 7 | 28 |
| Fire OS 6 | 25 |
| Fire OS 5 | 22 |
有关更多详细信息,请参阅设备筛选和兼容性。
minSdkVersion对支持的设备有何影响以及向后兼容性
在应用清单(或build.gradle文件)中,minSdkVersion设置了应用正常运行所需的最低SDK级别。不支持该API级别的设备将不允许用户在该设备上安装应用 — 这是亚马逊应用商店设备筛选和兼容性的工作方式。
Fire OS 5设备基于API级别22 (Lollipop 5.1)。Fire OS 16设备基于API级别36 (Android 16)。如果将minSdkVersion设置为22,即表示您确定应用要求设备至少具有API级别22才能正常运行。
将minSdkVersion设置为22时,还可在具有更高API级别(例如34)的设备中安装您的应用,因为Android级别向后兼容。API级别34通常包括级别1到34的所有API。每个版本都会在之前的级别上增加一个API级别。
但假设您想利用Android 16中的API(API级别36)。若将minSdkVersion设置为22,则可以在没有API级别34的Fire OS 5设备中安装您的应用。因此,必须以防御性方式进行编程,检查设备API级别,若设备不支持该API级别,则回退到替代方案。您的代码可能会如下面的代码示例所示。
if (Build.VERSION.SDK_INT >= 36) {
// Fire OS 16/Android 16特定代码
} else {
// 较旧设备的回退
}
在上一示例中,此代码检查设备的API级别是否大于或等于36,如果是,则运行代码。如果不是,则代码将在else逻辑上回退。
默认情况下,若未指定targetSdkVersion,Android将使用与minSdkVersion相同的值。具体而言,targetSdkVersion允许您设置应用测试所依据的最新API级别。基于该值,Android将确保此级别设备的性能正常。
尽管不建议采取这一做法,但如果必须防止较早版本的应用出现在Fire OS 16设备上,可将maxSdkVersion设置为Fire OS 14 (34)。
有关更多详细信息,请参阅以下资源:
支持
如果应用在Fire OS 16上存在问题,请在亚马逊Fire TV和Fire TV Stick论坛中报告该问题。
相关主题
Last updated: 2026年6月30日

