目录

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. 1: 前言

    1. 概念

主要是Android客户端适配9.0时的注意事项及主要更改点,所列技术点并不全面,更详细的技术文档请参照谷歌官方文档。

  1. 读者

xx

  1. 参考文档

谷歌官方文档

https://developer.android.google.cn/about/versions/pie/

  1. 2: 技术方案

    1. 所有应用的行为变更

      1. 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

  1. 加密提供商变更

影响的提供商有Crypot、BC,以下写法会抛出NoSuchProviderException、NoSuchAlgorithmException异常。

SecureRandom.getInstance("SHA1PRNG", "Crypto")

Cipher.getInstance("AES/CBC/PKCS7PADDING", "BC") or

Cipher.getInstance("AES/CBC/PKCS7PADDING", Security.getProvider("BC"))

 

备注通过查看源码发现,系统会维护一份提供商的列表,根据传入的第二个参数查询出加密的算法提供商,如果找不到会抛出异常。

  1. 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 中提供。)

  1. 强制执行 FLAG_ACTIVITY_NEW_TASK

在 Android 9 中,不能从非 Activity 环境中启动 Activity,除非传递 Intent 标志 FLAG_ACTIVITY_NEW_TASK。 如果尝试在不传递此标志的情况下启动 Activity,则该 Activity 不会启动,系统会在日志中输出一则消息。

备注:在 Android 7.0(API 级别 24)之前,标志要求一直是期望的行为并被强制执行。 Android 7.0 中的一个错误会临时阻止实施标志要求。

  1. 电源管理优化

Android 9 引入了一项新的电池管理功能,即应用待机群组。 应用待机群组可以基于应用最近使用时间和使用频率,帮助系统排定应用请求资源的优先级。 根据使用模式,每个应用都会归类到 五个 优先级群组之一中。 系统将根据应用所属的群组限制每个应用可以访问的设备资源:

  1. 确保应用在各种模式下能够正常工作
  2. 可以让用户手动把应用加入白名单中,解除系统限制。

备注:具体电源管理分类、如何调试、如何加入白名单等参考

https://developer.android.google.cn/about/versions/pie/power

  1. 针对Api 8+ 行为变更

    1. 前台服务权限新增

针对 Android 9 或更高版本并使用前台服务的应用必须请求 FOREGROUND_SERVICE 权限。 这是普通权限,因此,系统会自动为请求权限的应用授予此权限。

如果针对 Android 9 或更高版本的应用尝试创建一个前台服务且未请求 FOREGROUND_SERVICE,则系统会引发 SecurityException。

  1. 默认采用Https进行数据访问

也就是运行在9.0 系统的应用没有做Https适配的话,所有Http无法访问,解决这个问题有两种方案可以参考(两种选择一个即可)

  1. 全局关闭检查
  2. 未特定域名关闭检查(需谨慎排查、包括三方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方案相关推荐

  1. ZUI易入门Android之Okhttp的相关概念

    什么是okhttp? okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakC ...

  2. ZUI易入门Android之Bitmap(一)

    大家都知道,android 应用在创建进程时候,会分配一个指定的内存大小,准确的说话是 google原生OS的默认值是16M,如果我们应用"毫不吝啬"将这些大图直接加载到内存中,很 ...

  3. ZUI易入门Android之开源框架的使用

    前言: 为了扩展大家的知识面,工作后对当前流行的一些开源框架有所了解,今天我们会给大家介绍一系列的第三方框架的使用方法.这些框架有的能简化我们的代码,比如那些繁冗的findviewbyid操作,有的把 ...

  4. ZUI易入门Android之JobScheduler

    在一篇关于网络优化的博文中发现了这个词.我们的项目中并没有使用到这个东西,但看了一下还是非常好用的,mark一下以后一定会用到吧. 贴官方文档,喜欢自学的可以过去看看 贴官方Demo,官方给出的例子也 ...

  5. ZUI易入门Android之Git的使用(一)本地仓库

    git的功能是很强大的,既可以做"本地仓库",也可以在"远程仓库"进行管理. git的基本使用如下 1.git init (初始化本地仓库) 2.git sta ...

  6. ZUI易入门Android之SQL 语句大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server ---  ...

  7. 【Android】屏幕适配总结终极方案

    屏幕适配的概念 碎片化既是 Android 的优势和弱点,也是开发者们头疼的问题,同时也为 Android 的全球影响力提供了基础.Android 设备的外形和尺寸各不相同,性能水平和屏幕尺寸也都大不 ...

  8. ZUI易入门前端 二、Javascript

    Html是描述页面内容的.CSS是让页面好看的,而JavaScript是让页面能够交互的.我们做网站的时候要实现"点击按钮之后图片切换"."鼠标放到图片上显示放大图&qu ...

  9. 轻松入门Android直播相关技术 从0搭建直播系统

    本文已在我的公众号hongyangAndroid原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/77937483 本文 ...

最新文章

  1. 回溯 皇后 算法笔记_算法笔记_04_回溯
  2. .htaccess FollowSymlinks影响rewrite功能
  3. 做系统ghost步骤图解_Ghost 博客搭建超全指南
  4. 1276A. As Simple as One and Two
  5. 关于设计秒杀系统的几个问题
  6. Win7修复“会话‘循环内核上下文记录器’已停止,原因是存在以下错误:0xC0000188”
  7. call和apply;this;闭包
  8. 英语语音中的调核例子_英语歌曲在英语教学中扮演的重要角色
  9. openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
  10. 今日恐慌与贪婪指数为91 贪婪程度与昨日持平
  11. 在VC6中使用ADO读取Oracle中的BLOB字段
  12. python对比php开发web_django学习系列——python和php对比
  13. 基于javaweb+mysql数据库实现的宠物领养|流浪猫狗网站项目源代码
  14. 谷歌学术、github、Sci-Hub镜像网址总结
  15. 几种平均数的物理意义应用场景
  16. Java: null是什么??
  17. C++扫雷小游戏(附赠源代码)
  18. ios 操作通讯录联系人
  19. PMP工作绩效数据、信息和报告三者的区别
  20. JS:二叉树(2)——递归操作节点、构造二叉树

热门文章

  1. 微信小程序——简单饮食推荐(二)
  2. 如何防御UDP攻击?
  3. 北峰9300BTX|港口码头集成化集群通信解决方案
  4. oracle常用函数使用大全 Oracle除法
  5. 程序员笔记逆波兰表达式计算
  6. HTTP、TCP、UDP以及请求无法响应可能的原因
  7. linux0.11-文件系统
  8. oracle判断数据是否存在吗_oracle数据库判断表是否存在,存在删除,并创建新表...
  9. Linux下察看swap分区大小及增加分区大小
  10. 九宫重排 蓝桥杯c++ 题解 字符串hash+bfs