ZUI易入门Android之客户端适配9.0方案
目录
Section 1: 前言 1-4
1 概念 1-4
2 读者 1-4
3 参考文档 1-4
Section 2: 技术方案 2-5
1 所有应用的行为变更 2-5
1.1 非SDK开放接口 2-5
1.2 加密提供商变更 2-6
1.3 后台应用访问受限 2-6
1.4 权限变更 2-6
1.5 Apache HTTP API 使用变更 2-8
1.6 强制执行 FLAG_ACTIVITY_NEW_TASK 2-8
1.7 电源管理优化 2-8
2 针对Api 28+ 的行为变更 2-9
2.1 前台服务权限新增 2-9
2.2 构建序列号弃用 2-9
2.3 多进程Webview 2-9
2.4 默认采用Https进行数据访问 2-10
- 1: 前言
主要是Android客户端适配9.0时的注意事项及主要更改点,所列技术点并不全面,更详细的技术文档请参照谷歌官方文档。
xx
- 参考文档
谷歌官方文档
https://developer.android.google.cn/about/versions/pie/
- 2: 技术方案
- 所有应用的行为变更
- 非SDK开放接口
- 所有应用的行为变更
在Android9.0环境中,对于非 SDK API 里面的部分名单来说,就算在不修改 targetSdkVersion 的前提下,不管是直接、反射还是通过 JNI 调用都会造成调用失败、抛NoSuchFieldException或 NoSuchMethodException 等严重后果,该行为影响范围波及所有调用此接口的应用。
非 SDK API 名单总共分为三类:light grey list (浅灰名单)、dark grey list (深灰名单)、dark list(黑名单)。
查看这些名单的网址:https://android.googlesource.com/platform/frameworks/base/+/master/config/
扫描项目中的非SDK名单调用列表:
https://android.googlesource.com/platform/prebuilts/runtime/+/master/appcompat
备注:扫描插件的使用详见上面链接中的README.txt
- 加密提供商变更
影响的提供商有Crypot、BC,以下写法会抛出NoSuchProviderException、NoSuchAlgorithmException异常。
SecureRandom.getInstance("SHA1PRNG", "Crypto")
Cipher.getInstance("AES/CBC/PKCS7PADDING", "BC") or
Cipher.getInstance("AES/CBC/PKCS7PADDING", Security.getProvider("BC"))
备注:通过查看源码发现,系统会维护一份提供商的列表,根据传入的第二个参数查询出加密的算法提供商,如果找不到会抛出异常。
- Apache HTTP API 使用变更
要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml 添加以下内容:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
备注:拥有最低 SDK 版本 23 或更低版本的应用需要 android:required="false" 属性,因为在 API 级别低于 24 的设备上,org.apache.http.legacy 库不可用。 (在这些设备上,Apache HTTP 类在 bootclasspath 中提供。)
- 强制执行 FLAG_ACTIVITY_NEW_TASK
在 Android 9 中,不能从非 Activity 环境中启动 Activity,除非传递 Intent 标志 FLAG_ACTIVITY_NEW_TASK。 如果尝试在不传递此标志的情况下启动 Activity,则该 Activity 不会启动,系统会在日志中输出一则消息。
备注:在 Android 7.0(API 级别 24)之前,标志要求一直是期望的行为并被强制执行。 Android 7.0 中的一个错误会临时阻止实施标志要求。
- 电源管理优化
Android 9 引入了一项新的电池管理功能,即应用待机群组。 应用待机群组可以基于应用最近使用时间和使用频率,帮助系统排定应用请求资源的优先级。 根据使用模式,每个应用都会归类到 五个 优先级群组之一中。 系统将根据应用所属的群组限制每个应用可以访问的设备资源:
- 确保应用在各种模式下能够正常工作
- 可以让用户手动把应用加入白名单中,解除系统限制。
备注:具体电源管理分类、如何调试、如何加入白名单等参考
https://developer.android.google.cn/about/versions/pie/power
- 针对Api 8+ 的行为变更
- 前台服务权限新增
针对 Android 9 或更高版本并使用前台服务的应用必须请求 FOREGROUND_SERVICE 权限。 这是普通权限,因此,系统会自动为请求权限的应用授予此权限。
如果针对 Android 9 或更高版本的应用尝试创建一个前台服务且未请求 FOREGROUND_SERVICE,则系统会引发 SecurityException。
- 默认采用Https进行数据访问
也就是运行在9.0 系统的应用没有做Https适配的话,所有Http无法访问,解决这个问题有两种方案可以参考(两种选择一个即可)
- 全局关闭检查
- 未特定域名关闭检查(需谨慎排查、包括三方SDK)
第一步Application节点配置xml文件
<application android:networkSecurityConfig="@xml/network_security_config">
<!-- ... -->
</application>
第二步(xml 文件network_security_config配置)
全局配置
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="user"/>//信任用户自己安装的证书
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
局部配置
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">secure.example.com</domain> // 域名
</domain-config>
</network-security-config>
备注:xml配置语法较多 具体查看官方文档 https://developer.android.google.cn/training/articles/security-config
ZUI易入门Android之客户端适配9.0方案相关推荐
- ZUI易入门Android之Okhttp的相关概念
什么是okhttp? okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakC ...
- ZUI易入门Android之Bitmap(一)
大家都知道,android 应用在创建进程时候,会分配一个指定的内存大小,准确的说话是 google原生OS的默认值是16M,如果我们应用"毫不吝啬"将这些大图直接加载到内存中,很 ...
- ZUI易入门Android之开源框架的使用
前言: 为了扩展大家的知识面,工作后对当前流行的一些开源框架有所了解,今天我们会给大家介绍一系列的第三方框架的使用方法.这些框架有的能简化我们的代码,比如那些繁冗的findviewbyid操作,有的把 ...
- ZUI易入门Android之JobScheduler
在一篇关于网络优化的博文中发现了这个词.我们的项目中并没有使用到这个东西,但看了一下还是非常好用的,mark一下以后一定会用到吧. 贴官方文档,喜欢自学的可以过去看看 贴官方Demo,官方给出的例子也 ...
- ZUI易入门Android之Git的使用(一)本地仓库
git的功能是很强大的,既可以做"本地仓库",也可以在"远程仓库"进行管理. git的基本使用如下 1.git init (初始化本地仓库) 2.git sta ...
- ZUI易入门Android之SQL 语句大全
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- 【Android】屏幕适配总结终极方案
屏幕适配的概念 碎片化既是 Android 的优势和弱点,也是开发者们头疼的问题,同时也为 Android 的全球影响力提供了基础.Android 设备的外形和尺寸各不相同,性能水平和屏幕尺寸也都大不 ...
- ZUI易入门前端 二、Javascript
Html是描述页面内容的.CSS是让页面好看的,而JavaScript是让页面能够交互的.我们做网站的时候要实现"点击按钮之后图片切换"."鼠标放到图片上显示放大图&qu ...
- 轻松入门Android直播相关技术 从0搭建直播系统
本文已在我的公众号hongyangAndroid原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/77937483 本文 ...
最新文章
- 回溯 皇后 算法笔记_算法笔记_04_回溯
- .htaccess FollowSymlinks影响rewrite功能
- 做系统ghost步骤图解_Ghost 博客搭建超全指南
- 1276A. As Simple as One and Two
- 关于设计秒杀系统的几个问题
- Win7修复“会话‘循环内核上下文记录器’已停止,原因是存在以下错误:0xC0000188”
- call和apply;this;闭包
- 英语语音中的调核例子_英语歌曲在英语教学中扮演的重要角色
- openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
- 今日恐慌与贪婪指数为91 贪婪程度与昨日持平
- 在VC6中使用ADO读取Oracle中的BLOB字段
- python对比php开发web_django学习系列——python和php对比
- 基于javaweb+mysql数据库实现的宠物领养|流浪猫狗网站项目源代码
- 谷歌学术、github、Sci-Hub镜像网址总结
- 几种平均数的物理意义应用场景
- Java: null是什么??
- C++扫雷小游戏(附赠源代码)
- ios 操作通讯录联系人
- PMP工作绩效数据、信息和报告三者的区别
- JS:二叉树(2)——递归操作节点、构造二叉树