Android target升级到28

1、前台服务

  1. 针对 Android 9 或更高版本并使用前台服务的应用必须请求 FOREGROUND_SERVICE 权限。否则系统会引发 SecurityException

  2. Android8.0 启动前台服务后需要发送一条通知,通知需要需要渠道号

2、Build.SERIAL弃用

在Android 9中,为保护用户的隐私Build.SERIAL始终设置"UNKNOWN"。

如果您的应用需要访问设备的硬件序列号,则应该请求 READ_PHONE_STATE 权限,然后调用 getSerial()

3、默认情况下启用网络传输层安全协议 (TLS)

背景:

从Android 6.0开始引入了对Https的推荐支持,与以往不同,Android P的系统上面默认所有Http的请求都被阻止了。

适配方案:

  • 【建议】解决的办法简单来说可以通过在AnroidManifest.xml中的application显式设置

  • 更为根本的解决办法是修改应用程序中Http的请求为Https

4、Apache HTTP 客户端弃用

背景:Apache HTTP client从bootclasspath中移除

适配方案:

  • 【建议】如果要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml 添加以下内容:

  • 使用 HttpURLConnection 类替代apache-http

5、非SDK接口管控

背景:

在Android P版本中,谷歌加入了非SDK接口使用限制,无论是通过调用、反射还是JNI等方式,开发者都无法对非SDK接口进行访问,此接口的滥用将会带来严重的系统兼容性问题。

适配方案:

1、【建议】找到可替代的SDK接口进行适配

2、向Google提交名单降级申请

6、内联方法不允许跨dex限制

(1)背景:管控的地方增加了TargetSdkVersion判断,只有TargetSdkVersion>=28的应用才可能触发管控而abort崩溃;

(2)关键日志:This must be due to duplicate classes or playing wrongly with class loaders;(启动之后未发现该日志)

(3)兼容性影响:对使用了热修复和插件框架的应用有影响;

(4)测试和验证是否有影响: 

(a)启动应用,构造热修复场景,在app侧触发热修复。

adb shell cmd package compile -m speed -f my-package 应用包名  (inline编译)

(b)重启应用,看看会不会出现闪退问题。

(c)通过关键日志分析确认是不是这个问题:This must be due to duplicate classes or playing wrongly with class loaders。

(5)如果确认应用有这个问题,修复建议:

(a)尽量避免使用不同的classloader来加载相关的(有互相调用可能)类。

(b)如果一定要这样做的话,需要避免内联(比如在不期望被inline的函数里面加个try catch,这样compiler就不会将这个函数inline)。

7、64位要求

(1)新开发的应用,2019-8-1以后上架谷歌Play要求应用的native代码需要提供64位的版本;

(2)更新的应用,2019-11-1以后上架谷歌play要求应用的native代码需要提供64位的版本。

8、Canvas clipPath 方法检查变更 可能会crash

10、Notification Channel问题

Android 8.0开始Notification 需要指定一个channel,当target大于26时,这个channel需要进行系统注册,否则会crash

你可能感兴趣的:(Android,适配)