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

2024-04-23 23:32

本文主要是介绍【转】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 接口的限制名单

类别介绍
白名单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 兼容性常见问题及注意事项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/930187

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)