AndroidQ简介及版本适配

Android Q,也就是Andriod 10,api为29。

如果要改编App,主要是通过设置以下风格:

并且使用这个属性?android:attr/textColorPrimary

此外,谷歌还提供了一个Force Dark开关。

详情请见Q黑暗模式谷歌官方介绍。

Android 10无需用户确认即可控制按钮。

setConfirmationRequired(false)

当用户的生物特征不可用时,可以设置setDeviceCredentialAllowed()允许用户使用PIN、手势密码和数字密码通过认证。

(1)适配可以分为两种。

(2)在Google和各大应用市场适配的时间要求:

如果我们项目原来的api是25,要直接升级到api29,需要适配:Andoird O,Android P,Android Q,三个适配阶段都需要。

下面将简要介绍这些API的适配:

您需要在创建通知之前创建一个通道,并且需要在创建通知时传入channelId。

2.1什么是前台应用?(这里的前台应用是指服务限制)

2.2什么是后台服务限制?

2.3解决方案:

设置透明主题的活动,然后设置屏幕方向。

引发以下异常

想必是Google8.0手机的bug,后续版本已经修复。

3.2.1 webview数据目录变更

如果api设置为28,多个进程使用同一个目录webView。

抛出异常:

解决方案:为不同的流程设置不同的webview数据目录。

3.2.2 Apache HTTP客户端弃用

在Android 6.0中,谷歌取消了对Apache HTTP客户端的支持。从Android 9开始,默认情况下,内容库已经从bootclasspath中删除,并且对应用程序不可用。要继续使用Apache HTTP客户端,面向Android 9和更高版本的应用程序可以将以下内容添加到其AndroidManifest.xml中:

3.2.3非sdk接口控制

官方检查器veridex用于检测apk中何处使用了非SDK接口。

扫描结果类似下图(图片来自Android P版(VII)中的veridex工具扫描非SDK接口,veridex的用法也可以参考本文):

3.2.4前台服务

Android 9或更高版本使用前台服务的应用需要请求FOREGROUND_SERVICE权限,系统会自动将该权限授予请求权限的应用。如果Android 9或更高版本的应用程序试图创建前台服务,并且没有请求FOREGROUND_SERVICE,系统将抛出SecurityException。

3.3.1应用存储空间变更

默认情况下,如果应用以Android Q为目标平台,那么在访问外部存储设备中的文件时会进入过滤器视图。应用程序可以使用上下文。getExternalFileSdir()将专用于自己的文件存储在自己的目录中。具有过滤视图的应用程序始终对其创建的文件具有读/写访问权限,无论文件位于特定于该应用程序的目录中还是外部。应用程序可以访问这些文件,而无需声明任何存储权限。

只有满足以下两个条件,应用程序才能访问其他应用程序创建的文件:

谷歌q版应用兼容性整改指南

华为开发者联盟文档中心

谷歌Android-8.0-迁移