Android 9 Pie 兼容性常见问题及注意事项

Posted 马竹君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 9 Pie 兼容性常见问题及注意事项相关的知识,希望对你有一定的参考价值。

技术分享图片

应用不兼容的常见原因

使用了系统的 ClassLoader 加载 org.apache.http.* 的库

android M 就已经开始移除对 Apache HTTP client 的支持。而 Android P 的系统 ClassLoader 已经不支持加载 org.apache.http.*包 (抛出 NoClassDefFoundError),应用必须用自定义的 ClassLoader 来加载,同时确保 org.apache.http.* 的路径包含在应用 classpath 上。

 

应用不应该再使用 org.apache.http.legacy 库,如果实在必须,可以将它打包进自己的 APK,同时改名以防止与运行时的版本冲突。

 

没有使用兼容 Android 9 的加固服务

部分加固服务可能尚未兼容 Android 9。开发者应该使用兼容 Android 9 的加固服务。

 

直接调用 dex2oat

从一开始,dex2oat 就被设计为系统内部使用的编译部署工具,Android 从来都未支持过开发者直接调用 dex2oat 的场景。

 

如果您需要从内存中加载 dex 文件,而不愿在存储中留下痕迹,请使用 Android O 中新增的加载器 InMemoryDexClassLoader。

 

相关的 dex / so 文件亦不应直接操作或篡改,干扰或篡改系统内部加载 dex 的逻辑很可能会导致兼容性问题。

 

使用了非 SDK 接口

非 SDK 接口在每次版本更新中都有可能被改动,开发者应只使用 SDK 接口。

 

使用了不兼容的第三方的库

如果您使用的第三方库尚不支持 Android P 版本,请报告给其提供商,帮助推动它解决兼容性问题。

 

 

非 SDK 接口的限制名单

 

凹口屏幕 Display Cutout

 

屏幕旋转锁定

在 Android P 上,不论是自动旋转或旋转锁定 (rotation lock),应用界面皆可以为纵向或横向,这取决于最上层可见 Activity 的 screenOrientation 设置。请不要再假设设备在旋转锁定时必定为纵向。

 

 

Inline 函数调用检查

在 Android P 中,如果调用某个 inline 方法的类与 inline 方法所在的类由不同的 ClassLoader 加载, 就会主动发起 abort (inline 不允许跨 dex 文件),导致应用 crash。请尽量避免用不同的 ClassLoader 来加载相关的 (有互相调用可能) 类,因为被调用类的方法可能已经被 inline 了。

 

 

空闲应用无法访问麦克风、摄像头和传感器

为了更好地保证隐私,Android P 限制所有处于空闲状态的应用对麦克风、摄像头和所有 SensorManager 传感器的访问。当一个应用的 UID 空闲时,麦克风将会报告系统 “无音频信号”,传感器将会停止报告事件。应用使用的摄像头也会断开连接,如果应用尝试使用它们,则会生成错误。在大多数情况下,这些限制不会为现有应用带来新的问题,但我们仍然建议您从应用中移除此类传感器请求。

 

 

前台服务权限

应用 target 到 P 版本后,在使用前台服务时必须申请 FOREGROUND_SERVICE 权限。这是一个一般性权限,应用只需在 manifest 中声明,系统会自动授予而无需询问用户。但若无此权限即运行前台服务,系统会抛出 SecurityException。

 

 

后台服务限制

自 Oreo 起,Target SDK >=26 的应用若没有在前台显示,它的后台服务将受到系统限制。需长期运行的服务应迁移至前台服务,并让使用者注意到服务正在运行;经典电影或改用排程作业,例如 WorkManager 或 JobScheduler。

 

 

Google Play targetSdkVersion 政策

为了推动应用获得 Android 新版本提供的安全和性能提升,Google Play 应用市场要求其上的应用必须:

 

 

?点击屏末?|?阅读原文?|?"我们愿意更好地倾听您的声音 "

 

技术分享图片

 

推荐阅读

·?Android 安全更新的发展与沿革

·?Android Jetpack: Room | 中文教学视频

·?Google Play Console 新增获客分析功能,帮您深入洞察用户行为

 


文章来源:https://blog.csdn.net/jILRvRTrc/article/details/82598481

以上是关于Android 9 Pie 兼容性常见问题及注意事项的主要内容,如果未能解决你的问题,请参考以下文章

Android(9)Pie中如何允许所有网络连接类型HTTP和HTTPS?

如何在 Android 9.0(PIE) 中获取 WIFI SSID?

移动: Android 9 “Pie”发布

为啥 Android Studio 不会在 Android Pie (9.0) 上运行应用程序?

FusedLocationProviderClient 在 Android Pie 9.0 中返回错误的纬度经度

Android 9 (Pie),Context.startForegroundService() 没有调用 Service.startForeground():ServiceRecord