开发人员控制台

开发运行Fire OS 6的Amazon Fire TV设备(Amazon Fire TV)


开发运行Fire OS 6的Amazon Fire TV设备(Amazon Fire TV)

运行Fire OS 6的Amazon Fire TV设备基于Android Nougat。遵从指南,确保您的应用与Fire OS 6兼容。

运行Fire OS 6的设备与运行Fire OS 5的设备的对比

大多数2018 Fire TV设备(Fire TV Stick 4K、Fire TV Edition Insignia和Toshiba、Fire TV Cube等)运行Fire OS 6。但之前的Fire TV设备(Fire TV Stick(第1代和第2代)、Fire TV(第1代和第2代)和Fire TV Edition)仍然采用Fire OS 5(该版本基于Lollipop或Android 5.1 22级,和一些向后移植的Marshmallow)。之前的Fire TV设备无法升级到Fire OS 6。

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

Android Nougat的行为变化和新功能

Android Nougat在Lollipop和Marshmallow的基础上做了一些修改。您在Fire OS 6设备上的应用须考虑这些修改。您可以在Android 7.0更改Android 6.0更改中查看这些修改信息。主要修改包括在运行时检查权限和链接到专用库。

运行时检查权限

同样,应用所需的正常和危险权限须在应用清单声明(通过uses-featureuses-permission元素)。但是,对于API级别23及以上的设备,须根据Android指南在运行时检查权限——参见使用系统权限(特别是在运行时请求权限)。

在运行时检查权限是Marshmallow(API级别23)中引入的一项功能,以简化安装和更新过程,让用户更好地管理应用。请注意,由于存在运行时权限,用户可在出现提示时撤销单个权限。您必须处理用户撤销权限的情景。

此外,如果您有一个面向多种设备(Fire平板电脑和Amazon Fire TV设备)的单个二进制文件,请不要在清单中为这些设备上不存在的功能请求权限(如在Fire TV应用上请求陀螺仪权限)。更多详细信息,请参阅处理不受支持的硬件功能

链接到专用库

Android Nougat不允许应用动态链接到非NDK或专用库。应用的APK中必须包含所有必需的库,或者使用公共NDK API。更多详细信息,请参阅直接从APK打开共享库专用API(对API级别>= 24强制执行)

Fire OS 6与Nougat的相同功能

Fire OS 6支持Android Nougat中的所有功能。Fire OS 6支持的Nougat电视特定功能包括:

  • 画中画(PiP): 允许用户在导航到应用中的其他区域时将视频固定到屏幕的一角。请注意,PIP窗口不能在应用外部使用,也不能与原Fire OS用户界面元素叠加。
  • 内容录制: 允许用户录制电视上的内容(类似于DVR)。
  • 时移API: 允许用户暂停、倒回或快进直播内容。

关于这些功能编码的详细信息和说明,请参阅Android文档。

虽然Fire OS 6与Nougat具有相同的功能,但您无法在Amazon Fire设备上使用谷歌服务。相反,针对所需的服务(例如:应用内购买),必须使用应用和游戏服务开发工具包。更多详细信息,请参阅Amazon Fire TV开发与Android TV开发

让您的应用适用于Fire OS 5和Fire OS 6设备

为了最大限度地与Fire OS 5和Fire OS 6功能兼容,您需要相应地定向设备。您可以用AFTN作为Build.Model来标识Fire TV第3代设备。但更有效的方式是确定开发工具包的级别。您可以检查代码中Build.VERSION.SDK_INT是否大于等于25(Nougat的API级别),以定向Fire OS 6设备。更多详细信息,请参阅识别Fire TV设备。另请参阅支持不同平台版本

在新的Amazon Fire TV设备上测试应用的兼容性

目前,无法测试您的应用是否与Fire OS 6设备兼容,除非您有一个真正的设备可以连接。应用测试服务仅提供极少的兼容性测试,无法告知您的应用是否与Fire OS 6设备兼容。但是,如果您通过标准应用提交流程提交应用,应用商店团队将指出应用失败的具体原因。到目前为止,与当前Amazon Fire TV设备兼容的应用也与新设备兼容。

从应用清单中删除uses-amzn-sdk

对于Fire OS 5和Fire OS 6设备,您应该从应用清单中删除<uses-amzn-sdk>标签。此标签与旧的Fire OS开发工具包附加程序相关。检查您是否在AndroidManifest.xml文件中声明了<uses-amzn-sdk>。如已声明,请删除此标签(以及代码中的所有依赖项)。该<uses-amzn-sdk>标签不再用于Amazon Fire TV上的应用。

虽然即使在清单中保留此标签,您的应用仍能在Fire OS 6设备上工作,但删除标签可以避免以后出现任何不兼容情况。开发Fire设备应用时,无需旧Fire OS开发工具包附加程序的任何组件。不过,请使用标准Android API亚马逊应用和游戏服务开发工具包

用旧版Unity开发的游戏应用

如果您有一个游戏应用是使用较旧版本的Unity开发的(例如Unity 4.5或4.6,其中UnityPlayerNativeActivity为默认活动),则在第一次加载到内存中时,您的游戏可能会出现1-2秒的白屏。这是由应用加载到内存(并等待所有工作完成)时Android N的冷启动导致的。此问题并非Fire OS 6特有,会在所有Nougat设备上发生。

要修复此问题,请升级到最新版本的Unity。如果无法升级,您可以尝试将UnityPlayerNativeActivity更改为UnityPlayerActivity(从Unity 5.0b12开始提供)来更新您的Android清单文件。有关更多信息,请参阅Unity文档中的Android清单

节省资源和内存的媒体播放最佳实践

Amazon Fire TV(第3代)上的某些应用因无法正确处理媒体播放而无法正常运行。(这与Fire OS 6无关,但对于亚马逊和谷歌应用,这是应遵循的最佳实践。) 由于Amazon Fire TV中的媒体播放资源基于硬件且受内存限制,因此您的应用必须运行良好,并在使用完媒体资源时释放媒体资源。

具体而言,播放视频的应用应暂停播放,并且必须立即释放所有媒体资源,例如onPause()方法中的解码器。详细信息,请参阅释放媒体播放器MediaPlayer.release()

如果您的应用通过Android WebView(带有<video> HTML标签)播放视频,则当应用暂停或停止时,系统当前不会释放硬件媒体资源。要解决此问题,请在执行onPause()onStop()方法时通过终止进程来显式释放这些资源:

public void onStop() {
   super.onStop();
   android.os.Process.killProcess(android.os.Process.myPid());
}

更多详细信息,请参阅以下内容:

minSdkVersion和targetSdkVersion的设置

通常,应将minSdkVersion设置为22或更低版本(将其设置为应用所需的最低API级别)。这样,您的应用即可用于所有Amazon Fire TV设备(运行Fire OS 5和6)。将targetSdkVersion设置为测试应用时所用的最高API级别。

了解minSdkVersion如何影响支持的设备

在应用清单(或build.gradle文件)中,minSdkVersion属性设置了应用正常运行所需的最低开发工具包级别。(不支持该API级别的设备不应允许安装这一应用。)

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

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

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

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

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

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

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

在将targetSdkVersion设置为25前,须在Fire OS 6设备上测试您的应用。

不推荐使用maxSdkVersion属性,但如需让应用在Fire OS 5设备上可用,则可将maxSdkVersion设置为22。如果您想让您的应用在Fire OS 6设备上可用,可将minSdkVersion设置为25。

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

自定义媒体播放器的AV同步问题

AV同步是指视频不完全与音频同步(声音与口形不匹配)。如果您使用的是ExoPlayer或标准的Android媒体播放器,则不会遇到这一AV同步问题。但是,如果您在应用中使用自定义媒体播放器,音频和视频(AV)可能会稍有不同步。(此问题与Fire OS 6没有特别的关系,而是在为Fire OS设备开发应用时的一般最佳实践。) 关于如何消除AV同步问题的详细信息,请参阅[音频和视频同步][fire-tv/audio-video-synchronization]。

支持

若应用在Fire OS 6上存在问题,请在Amazon Fire TV和Fire TV Stick论坛中报告此问题。