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

2018 年 9 月 9 日 谷歌开发者

应用不兼容的常见原因

使用了系统的 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 接口的限制名单

  • 白名单 

    • Android SDK 本身

    • 没有任何限制

  • 黑名单

    • 只能被 Android 系统及系统应用使用

    • 无论 targetSdkVersion 都禁止使用

    • 对应用开发者来说,相当于没有这些接口

  • 深灰名单

    • 没有发现应用在使用,但我们觉得有潜在的可能性

    • 当 targetSdkVersion < P 时允许使用

    • 当 targetSdkVersion >= P 时禁止使用 (相当于黑名单)

  • 浅灰名单

    • 已有应用在使用的非 SDK 接口,仍然可以继续使用

    • 将来会考虑提供相应的 SDK 接口

    • 当 targetSdkVersion >= P 时系统提示警告


凹口屏幕 Display Cutout

  • 不要硬编码状态栏的高度,请使用 WindowInsetsCompat 获取状态列的高度。

  • 注意屏幕大小与显示范围的差异,请使用 View.getLocationInWindow(),而不是 View.getLocationOnScreen()。处理 MotionEvent 时,使用 getX() / getY() ,而不是 getRawX() / getRawY() 。 

  • 凹口可以置中或靠边,只会在屏幕短边出现,两条短边皆可有缺口。


屏幕旋转锁定

在 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 应用市场要求其上的应用必须:

  • 从 2018 年 8 月起,新发布的应用必须将 targetSdkVersion 设置为 26 或更高

  • 从 2018 年 11 月起,现有应用的升级必须将 targetSdkVersion 设置为 26 或更高

  • 2019 年之后,新发布或升级应用必须将 targetSdkVersion 设置为一年内发布的 Android 版本



 点击屏末 |  | "我们愿意更好地倾听您的声音 "



推荐阅读

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

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

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

登录查看更多
0

相关内容

Apache 是一个开放源代码的网页服务器,可以在大多数电脑操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。 同时 Apache 也是一个专门为支持开源软件项目而办的一个非盈利性组织。
最新《自动微分手册》77页pdf
专知会员服务
100+阅读 · 2020年6月6日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
TheFatRat 一款简易后门工具
黑白之道
35+阅读 · 2019年10月23日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
7 款实用到哭的App,只说一遍
高效率工具搜罗
84+阅读 · 2019年4月30日
已删除
创业邦杂志
5+阅读 · 2019年3月27日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
可能是 Android 上最好用的写作 App
少数派
10+阅读 · 2018年12月21日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
Arxiv
92+阅读 · 2020年2月28日
Arxiv
35+阅读 · 2019年11月7日
A Comprehensive Survey on Graph Neural Networks
Arxiv
13+阅读 · 2019年3月10日
Arxiv
6+阅读 · 2018年10月3日
A Survey on Deep Transfer Learning
Arxiv
11+阅读 · 2018年8月6日
VIP会员
相关VIP内容
相关资讯
TheFatRat 一款简易后门工具
黑白之道
35+阅读 · 2019年10月23日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
7 款实用到哭的App,只说一遍
高效率工具搜罗
84+阅读 · 2019年4月30日
已删除
创业邦杂志
5+阅读 · 2019年3月27日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
可能是 Android 上最好用的写作 App
少数派
10+阅读 · 2018年12月21日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
Top
微信扫码咨询专知VIP会员