开发者控制台

针对运行Fire OS 8的亚马逊Fire TV设备进行开发

针对运行Fire OS 8的亚马逊Fire TV设备进行开发

Fire OS 8引入了Android 10 (API 29) 和Android 11 (API 30) 的更新。在为Fire OS 8构建应用时,应该对这方面的重要变更予以考虑,下面介绍了其中一些变更。

运行Fire OS 8和之前Fire OS版本的设备

Fire OS 8包含了Android 10 (API 29)和Android 11 (API 30)的更新。部分较早版本的Fire TV设备仍然搭载较早版本的Fire OS。

有关Fire TV设备和版本的详细列表,请参阅Fire OS版本

Android 10更新

以下是Android 10开发者应该了解的重要功能列表。有关更多详细信息,请参阅Android 10功能和API

默认启用了TLS 1.3支持

Fire OS 8增加了对TLS 1.3的支持,默认情况下,它对所有TLS连接都启用。我们建议更新应用以支持TLS 1.3。如果需要使用较旧的TLS协议,可以通过以下调用来获得禁用了TLS 1.3的SSLContext

SSLContext.getInstance("TLSv1.2")

用于访问位置的前台服务类型

如果应用以Fire OS 8(API级别29)或更高版本为目标,并且会访问前台服务中的位置信息,请将location前台服务类型声明为<service>组件的属性。

<manifest>
    ...    <service ... *android:foregroundServiceType="location"* /></manifest>
前台服务类型 应声明此类型的服务的示例用例
dataSync 从网络下载文件
location 继续用户发起的操作
mediaPlayback 播放音频书籍、播客或音乐
mediaProjection 在短时间内录制设备显示画面的视频

您应当将foregroundServiceType添加至库清单。

在后台访问设备位置

以API 29或更高版本为目标的应用在后台无法访问位置信息。要在应用位于后台时接收位置信息,必须在应用清单中声明ACCESS_BACKGROUND_LOCATION权限。

<manifest ... >  

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

</manifest>

对于从后台启动活动的限制

从Android 10开始,系统对于从后台启动活动加以限制。这种行为改变有助于最大限度减少对用户的干扰,并让用户对其屏幕上显示的内容保持更大控制权。只要应用将用户交互作为启动活动的直接原因,就很可能不会受到这些限制的影响。

高效率图像文件(HEIF)格式

Fire OS 8平板电脑现已提供对HEIF图像格式的原生支持。如果您的应用使用静态图像,请考虑添加对HEIF格式的支持。与JPEG文件格式相比,它可以提供更好的图像质量和更小的文件大小。

Android 11更新

现在需要APK签名方案v2

以Fire OS 8 (API 30)为目标的应用当前仅使用APK签名方案v1进行签名,现在还必须使用APK签名方案v2对APK进行签名。在仅使用APK签名方案v1签名的Fire OS 8设备上,用户将无法安装或更新应用。为确保支持在较旧Fire OS版本上运行的设备,应该先使用v1,然后使用v2或更高版本对APK进行签名。

可以通过apksigner检查您在APK上使用的签名版本。

apksigner verify -v <apkname.apk>

单次授权

从Fire OS 8(以API 30为目标)开始,每当应用请求与位置、麦克风或相机相关的权限时,面向用户的权限对话框都包含一个称为“单次授权”的选项。如果用户在对话框中选择此选项,则会对应用授予临时权限。请遵循运行时检查和请求权限的最佳实践,以确保您拥有必要的权限。

程序包可见性

默认情况下,以Fire OS 8(API级别30)为目标的应用会看到过滤后的已安装应用列表。要想访问更广泛的已安装应用列表,应用可以指定其需要查询和直接与之交互的应用的信息。这可以通过在Android清单中添加一个<queries>元素来实现。

<manifest package="com.yourapp.name"><queries>

// 如果知道需要与之交互的应用程序包名称

    <package android:name="com.anotherapp.firstapp" />
    <package android:name="com.someapp.secondapp" />


// 如果要查询具有特定意图的所有应用

    <intent>
      <action android:name="android.intent.action.SEND" />
      <data android:mimeType="image/jpeg" />
    </intent>

  </queries></manifest>

用于访问相机和麦克风的前台服务

如果应用的目标API级别为30或更高,并且会访问前台服务中的相机或麦克风,请分别声明cameramicrophone前台服务类型,作为<service>组件的属性。

<manifest>
    ...
    <service ...
        android:foregroundServiceType="camera|microphone" />
</manifest>

压缩资源文件

如果包含压缩resources.arsc文件,或者如果此文件未在4字节边界上对齐,则无法安装以Android 11(API级别30)或更高版本为目标的应用。请检查压缩对齐日志,确保在出现错误时未压缩resources.arsc文件。

Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]

动态意图过滤器

现在,要接收意图,应用必须声明可以通过应用清单中的意图过滤器接收哪些数据类型。这些称为MIME组,是Android 11中引入的清单元素。要使用MIME组,请在应用清单中包含一个具有android:mimeGroup属性的数据元素。

阻止来自后台的自定义toast

现已阻止包含从后台发送的自定义视图的toast。但是,在使用Toast.makeText()而非已弃用的setView()时,仍然允许文本toast。

Fire OS 8与Android 11对等

Fire OS 8实现的所有功能都与Android 11的功能对等,这并不意味着Android 11的所有功能在Fire OS 8中都可用。部分Fire OS 8设备尚不支持Android 11的部分功能。

另请记住,虽然Fire OS 8与Android 11对等,但在亚马逊Fire设备上无法使用Google服务。必须使用相应的应用和游戏服务开发工具包,才能实现所需的服务(如应用内购买)。

让应用以Fire OS 8设备为目标

用户可能会在Fire OS 5、Fire OS 6、Fire OS 7或Fire OS 8设备上运行应用。为了最大限度提高应用与设备上Fire OS版本的兼容性,建议根据SDK级别确定目标设备。

在代码中,可检查Build.VERSION.SDK_INT是否大于等于30(Android 11 API级别),以便将Fire OS 8设备作为目标。

另请参阅Android文档中的支持不同平台版本

在Fire OS 8设备上测试应用的兼容性

可通过连接到实际设备,测试应用与Fire OS 8的兼容性。

minSdkVersion和targetSdkVersion的设置

minSdkVersion设置为适用Fire OS版本所需的最低API级别。

Fire OS版本 minSdkVersion
Fire OS 5 22
Fire OS 7 28
Fire OS 8 30

targetSdkVersion设置为支持的最高API级别。

请参阅设备筛选和兼容性,以了解有关最低API级别要求的更多信息。

minSdkVersion对支持的设备有何影响

在应用清单(或build.gradle文件)中,minSdkVersion属性设置了应用正常运行所需的最低SDK级别。(不支持该API级别的设备将不允许在该设备上安装应用 — 这是应用商店设备筛选和兼容性的工作方式。)

Fire OS 5设备基于API级别22 (Lollipop 5.1)。Fire OS 8设备基于API级别30 (Android 11)。将minSdkVersion设置为22,即表示应用要求设备至少具有API级别22才能正常运行。

minSdkVersion设置为22时,还可在具有更高API级别(例如30)的设备中安装您的应用,因为Android级别向后兼容。API级别30通常包含级别1到级别30的所有API(每个版本均在上一个版本的基础上添加)。

但假设您想利用Android 11中的API(API级别30)。若将minSdkVersion设置为22,则可以在没有API级别30的Fire OS 5设备中安装您的应用。因此,必须以防御性方式进行编程,检查设备级别,若设备不支持该API级别,则回退到替代方案。代码可能如下所示:

if (Build.VERSION.SDK_INT >= 30) {
 Log.v(TAG, "是,这台设备具备API级别30或更高版本");
} else {
 Log.v(TAG, "不是,这台设备不具备API级别30或更高版本");
}

此代码检查设备的API级别是否大于或等于30,如果是,则运行代码。如果不是,则回退到else逻辑。

默认情况下,若未指定targetSdkVersion,将使用与minSdkVersion相同的值。targetSdkVersion允许您设置应用测试所依据的最新API级别。基于该值,Android将确保此级别设备的性能正常。

例如,若将targetSdkVersion设置为25或更高版本(Nougat的版本),Android将应用Nougat中包含的运行时权限检查功能。但如果targetSdkVersion低于25(在Nougat中推出运行时权限检查之前),则Android不会在您的应用中应用此行为。

尽管不建议采取这一做法,但如果需要防止较早版本的应用出现在Fire OS 8设备上,可以将maxSdkVersion设置为Fire OS 7 (28)。

有关更多信息,请参阅以下内容:

唤醒锁更改

如果客户未在4小时内与聚焦且唤醒的应用进行互动,他们将收到“Are you still watching?”(您是否还在查看?)的提示,如果不予以确认,他们将被转到主页。有关更多信息,请参阅唤醒锁要求

可以在“设置”中关闭此功能。如果该应用是标牌应用,请联系亚马逊申请豁免。

支持

如果应用在Fire OS 8上存在问题,请在亚马逊Fire TV和Fire TV Stick论坛中报告该问题。


Last updated: 2023年11月7日