Fire平板电脑上的Fire OS 8
Fire OS 8引入了Android 10 (API 29)和Android 11 (API 30)的更新。在为Fire OS 8构建应用时,应该对这方面的重要变更予以考虑,下面介绍了其中一些变更。
- Android 10更新
- Android 11更新
- Fire OS 8与Android 11同等
- 让应用以Fire OS 8设备为目标
- 在Fire OS 8设备上测试应用的兼容性
- minSdkVersion和targetSdkVersion的设置
- minSdkVersion对支持的设备有何影响
- 支持
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")
在应用内引用设置面板
Android 10中引入了设置面板,这是一种API,允许应用在其上下文中向用户显示设置。
Fire OS 8添加了设置面板API,允许直接在应用的上下文中显示关键系统设置,让用户无需离开应用就能访问多项系统设置,包括音量、互联网连接选项和WiFi控件等。
设置面板
可采用以下常量:
ACTION_INTERNET_CONNECTIVITY
显示与互联网连接相关的设置,例如飞行模式和WiFi。ACTION_WIFI
显示Wi-Fi设置的控件。这对于需要Wi-Fi连接来执行大规模上传或下载的应用非常有用。ACTION_VOLUME
显示所有音量流的设置。
共享方面的改进
Fire OS 8在共享方面有几项改进:
- Fire OS 8引入了对共享快捷方式API的支持,此类API允许应用提前发布直接共享目标。如果应用使用直接共享API来定义目标,则需要迁移到共享快捷方式API,因为API 30已弃用
ChooserTargetService
类。使用AndroidX库中提供的ShortcutManagerCompat
类将共享快捷方式API加入进来,并实施ChooserTargetServiceCompat
以确保向后兼容。 - 仅可将动态快捷方式发布为直接共享目标。请参阅发布直接共享目标。
用于访问位置的前台服务类型
如果应用以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 10增加了一个系统范围的深色主题。您可以为应用构建自定义深色主题,也可选择加入全新Force Dark功能,让系统根据现有主题动态创建深色版本。
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
有关更多详细信息,请参阅Android 10功能和API。
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或更高,并且会访问前台服务中的相机或麦克风,请分别声明camera
或microphone
前台服务类型,作为<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的部分功能,如基于文件的加密(FBE)。
另请记住,虽然Fire OS 8与Android 11对等,但在Amazon 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的兼容性。应用程序测试服务仅提供极少的兼容性测试,不会通知应用是否与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 7设备基于API级别28 (Android 9)。将minSdkVersion
设置为22,即表示应用要求设备至少具有API级别22才能正常运行。
将minSdkVersion
设置为22时,还可在具有更高API级别(例如28)的设备中安装您的应用,因为Android级别向后兼容。API级别28通常包含级别1到级别28的所有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将不在您的应用中应用此行为。
不推荐使用maxSdkVersion
属性,但如需让应用仅在Fire OS 6设备上可用,则可将maxSdkVersion
设置为25。如需让应用仅在Fire OS 7设备上可用,可将minSdkVersion
设置为28。
有关更多信息,请参阅以下内容:
支持
若应用在Fire OS 8上存在问题,请利用Fire平板电脑论坛来报告。