应用不兼容的常见原因

使用了系统的 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 9 Pie 兼容性常见问题及注意事项相关推荐

  1. 更强续航,尽在 Android 9 Pie

    作者:  Madan Ankapura, Android 产品经理 本文为 Android 电量管理系列连载的第一篇,希望开发者能从阅读过程中收获设备续航方面的战略洞见及实践指南. 电池性能和续航时间 ...

  2. Android 9 Pie

    Android 9 Pie Android 9 利用人工智能技术,让手机可以为您提供更多帮助.现在,手机变得更智能.更快,并且还可以随着您的使用进行调整. 查看新功能 确保您的应用兼容 测试您的应用与 ...

  3. android 9 pie公司,谷歌Android 9 Pie,真正的安卓派

    IT之家8月7日消息 今天谷歌正式宣布了Android 9 Pie正式版系统,此前的Android P终于定名为Android Pie,该更新首先面向谷歌Pixel设备和Essential Phone ...

  4. 小米8 SE和小米9 SE 开源 Android 9 Pie 内核代码

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   近日,小米在 GitHub 开源了小米8 SE和小米9 SE的内核源码(https://github.com/MiCode/Xiaomi_K ...

  5. android 兼容性定义,谷歌释出 Android 7.0 兼容性定义文件,史上最严

    原标题:谷歌释出 Android 7.0 兼容性定义文件,史上最严 每次跟随 Android 系统的更新,谷歌每年也会更新 Android 兼容性定义文档来确保 OEM 厂商的设备能够正常预装谷歌全家 ...

  6. android 9 pie公司,Android 9.0正式推送 定名Android Pie

    [IT168 手机讯]北京时间8月7日早间,谷歌率先面向Pixel系列手机推送了Android P正式版(Essential也第一时间升级),代号"Pie",这也是Android的 ...

  7. android targetapi版本低,Android应用开发之Android @TargetAPI版本兼容性解析

    本文将带你了解Android应用开发Android @TargetAPI版本兼容性解析,希望本文对大家学Android有所帮助. Android   @TargetAPI版本兼容性解析,Android ...

  8. android应用开发实验报告_聚焦 Android 11: Android 11 应用兼容性

    作者 / Android 产品经理 Diana Wong在往期 #11WeeksOfAndroid 系列文章中我们介绍了联系人和身份.隐私和安全,本期将聚焦 Android 11 兼容性.我们将为大家 ...

  9. android 应用升级sdk版本号,Bugly Android 应用升级 SDK 常见问题

    Bugly Android 应用升级 SDK 常见问题 最新问题解答更新在github 1. 添加abiFilter之后Android Studio出现已下提示 "NDK integrati ...

  10. 邀请函 · Android 9 Pie 技术分享会直播

    Android 9 已经正式发布近三个月了,我们非常重视您在开发过程中的反馈和意见.10 月 23 日 Google 团队将会在上海举办技术分享会,与您分享 Android 9 的重要更新,希望能为您 ...

最新文章

  1. 我有点不喜欢分布式中的TCC模式了
  2. pandas判断日期是否是闰年(is_leap_year)实战: 数据列转化为日期(时间)格式、判断pandas的日期数据列是否是闰年
  3. LeetCode 77. Combinations--回溯法,-Python,Java解法
  4. 一句white-space:nowrap解决IE6,IE7下浮动元素不自动换行
  5. 几个书本上不常见到的C语言函数
  6. 使用 ASMCMD 工具管理ASM目录及文件
  7. 去广告,原来可以如此简单——ADSafe 3.5.4.520 精简版
  8. MySQL二进制日志文件的用法_数据恢复
  9. opencv图像切割1-KMeans方法
  10. 3.15 曝光:40 亿 AI 骚扰电话和 11 家合谋者
  11. Tomcat运行时报内存溢出
  12. java webtable_java winform开发:JTable详解
  13. android 输入支付密码错误,Android 支付宝支付密码输入界面
  14. 原生ajax响应json数据
  15. 国内比较有名的maven镜像
  16. 私网ip和公网ip_详解
  17. 拆书笔记24|笨笨的圣人
  18. windows下载安装配置Geany
  19. 计算机会计实务好学吗,会计电算化难吗
  20. 【渗透测试】密码暴力破解工具——九头蛇(hydra)使用详解及实战

热门文章

  1. java实现文件上传下载功能_java文件上传下载功能实现代码
  2. 使用sudo apt-get出现无法解析域名的问题:“cn.archive.ubuntu.com”
  3. 重装系统后如何配置网络
  4. 【代码笔记】Web-JavaScript-JavaScript 运算符
  5. 给datagrid模板页里面的控件动态赋值
  6. ajax 跨域 提交cookie,Ajax跨域请求COOKIE无法带上的完美解决办法
  7. Linux编译后运行,OpenCV2.3.0编译后运行的问题
  8. Spring的9种设计模式(二)
  9. 字节码指令之算术指令
  10. JDK6中synchronized优化之锁升级