Android适配Q版本Beta2

背景

谷歌API LEVEL要求,应用2019上架谷歌Play商店需要应用升级自己的targetSdkVersion到28。具体参考

本次主要改动点:

1、TargetSdkVersion>=28。

2、适配Android Q系统

升级TargetSdkVersion到28

1、Apache HTTP 客户端弃用

取消了对 Apache HTTP 客户端的支持。

要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml 添加以下内容:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

2、强制执行 FLAG_ACTIVITY_NEW_TASK 要求

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

适配Android Q系统

1、应用存储空间限制

Android Q 在外部存储设备中为每个应用提供了一个“隔离存储沙盒”(例如 /sdcard)。任何其他应用都无法直接访问您应用的沙盒文件。由于文件是您应用的私有文件,因此您不再需要任何权限即可在外部存储设备中访问和保存自己的文件。

谷歌官方推荐应用在沙盒内存储文件的地址为Context.getExternalFilesDir()下的文件夹。比如要存储一张图片,则应放在Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)中。

以下将按访问的目标文件的地址介绍如何适配:

  • 访问自己文件:Q中用更精细的媒体特定权限替换并取消了 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE权限,并且无需特定权限,应用即可访问自己沙盒中的文件。

  • 访问系统媒体文件:Q中引入了一个新定义媒体文件的共享集合,如果要访问沙盒外的媒体共享文件,比如照片,音乐,视频等,需要申请新的媒体权限:READ_MEDIA_IMAGES,READ_MEDIA_VIDEO,READ_MEDIA_AUDIO,申请方法同原来的存储权限。可使用 MediaStore API(Android 2.3(API 级别 9)引入),或者存储访问框架 (SAF)方式读取(Android 4.4(API 级别 19)引入了存储访问框架 (SAF))

  • 1.因为对于TargetSdkVersion<Q的应用,谷歌提供了兼容方案,所以不适配也不 会有权限问题。 2.TargetSdkVersion>=Q的应用,需要适配增加新的存储权限申请,否则会报权 限问题:
  • 访问系统下载文件:对于系统下载文件夹的访问,暂时没做限制,但是,要访问其中其他应用的文件,必须允许用户使用系统的文件选择器应用来选择文件。

关于存储权限的(如何启用)影响范围

  • 在Android Q Beat1中,谷歌暂未开放存储权限的改动。我们需要使用adb命令

    adb shell sm set-isolated-storage on
  • 当满足以下每个条件时,将开启兼容模式,即不开启Q设备中的存储权限改动:

    1、应用targetSDK<=P。 2、应用安装在从 Android P 升级到 Android Q 的设备上。

    但是当应用重新安装(更新)时,不会重新开启兼容模式,存储权限改动将生效。 所以按官方文档所说,无论targetSDK是否为Q,必须对应用进行存储权限改动的适配。

经过测试,对SD卡其他目录的读写操作,在操作的时候,会统一被转换到沙箱内,因此目前不受影响。
即SD卡上只会存在两个目录:
/Android/data/com.ccc.news/
/Android/sanbox/com.ccc.news/

获取App目录
Context.getDataDir()
Context.getFilesDir()
Context.getCacheDir()获取App SD目录
Context.getExternalFilesDir()
Context.getExternalCacheDirr()获取SD卡目录(设备<Q),沙箱目录(设备>=Q)
Environment.getExternalStorageDirectory()

建议使用 Context.getDataDir() 或者 Context.getExternalFilesDir() 
不再使用 Environment类 获取外部路径

但在获取设备上其他文件时,无法通过路径操作文件,需要修改获取方式(MediaStore API,或存储访问框架 (SAF)方式)
端内已确定需要修复的功能:
1、评论功能,评论添加图片
2、个人中心,反馈上传图片
3、首页快速登录功能,判断微博是否启动过(预装版已关闭该功能,主版本需要修改)

2、禁止应用读取设备标识符信息

禁止获取device id和serial

从 Android Q 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE 权限(需要系统签名才能申请)才能访问设备的不可重置标识符(device id和serial)。

  • 对于 TargetSdkVersion < Q且没有申请READ_PHONE_STATE权限的应用和TargetSdkVersion >= Q的全部应用,获取device id会抛异常SecurityException。
  • 对于 TargetSdkVersion < Q 且申请了READ_PHONE_STATE权限的应用,通过getDeviceId接口读取的值为Null。
  • 获取serial 的值为unknown

P设备上:
没有READ_PHONE_STATE权限,getDeviceId 抛出SecurityException,可以拿到serial
有READ_PHONE_STATE权限,可以拿到DeviceId,serial

Mac地址随机化(针对wifi探针)

6.0以后的android系统getMacAddress();这个api已经失效。目前端内均使用该方式获取mac地址,均为02:00:00:00:00:00

TargetSdkVersion < Q。
在Q系统的手机上,获取不到deviceId,serial获取到的值为unknow。
在<Q系统的手机上,可以拿到serial,需要READ_PHONE_STATE权限,才能拿到DeviceId。

3、后台地理位置权限

Android Q 引入了新的位置权限 ACCESS_BACKGROUND_LOCATION。会影响应用在后台运行时对位置信息的访问权。如果应用需要在后台时也获得用户位置,就需要动态申请该权限。

  • targetSDK <= P 应用如果请求了ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION权限,Q设备会自动帮你申请ACCESS_BACKGROUND_LOCATION权限。

targetSDK >= Q才会生效,暂时不需要修改

4、非SDK管控(Hidden API)

统计新增P版本的10w+个接口被加入了目前Q版本的黑名单;

参考:https://blog.csdn.net/ccc20134/article/details/90055247

适配指导

使用非SDK 接口,目前只会打印相关日志,不会引起功能问题

5、禁止应用后台弹页面

目前版本只是弹toast提示开发者需要整改的页面,未开启禁止功能,需要开发者自查和整 改,后面的版本会真的禁止

适配指导

6、启用和禁用Wi-Fi的限制

在Android Q上运行的应用无法启用或停用Wi-Fi。

7、安装应用接口废弃

申请android.permission.REQUEST_INSTALL_PACKAGES权限,通过FileProvider使用content:// URI安装

8、录音变更(并发录音、三方录音source管控)

录音焦点抢占改动。抢占规则:只是限制不敏感音源无法抢占敏感音源,其他情况都可以随意抢占

9、禁止悬浮窗

在 Android Q(Go 版本)设备上运行的应用不具有 SYSTEM_ALERT_WINDOW 权限。

如果 Go 设备上的应用发送具有 ACTION_MANAGE_OVERLAY_PERMISSION 操作的 Intent,则系统会自动拒绝此请求,并将用户转到设置屏幕,上面会显示不允许授予此权限,原因是它会降低设备的速度。如果 Go 设备上的应用调用 Settings.canDrawOverlays(),则此方法始终返回 false。

10、折叠屏

1.屏幕比例适配

推荐适配方式:应用支持自适应能力适配

在 manifest 文件的 或 节点中设置 android:resizeableActivity 的值为true,可声明应用支持自适应显 示,Activity 将能以分屏和 freeform 模式启动。

其他方式:设置应用支持的最大比例和最小比例适配

最大宽高比申明: maxaspecratio:2.4(2.4表明在主副屏下满屏显示)

最小宽高比申明: minaspectratio:1.0 (1.0表示在展开态全屏显示)

2.切换显示比例应用不重启适配

在 manifest 文件的 节点中的 android:configChanges 属性增加 screenSize|smallestScreenSize|screenLayout字符串,当屏幕 比例变化时,系统会回调 Activity 的 onConfigurationChanged() 方法,而避免 Activity 重新启动。

通过接口newConfig.screenHeightDp和 newConfig.screenWidthDp获取屏幕尺寸信息调整页面布局

参考资料:

https://developer.android.google.cn/about/versions/pie/android-9.0-changes-28

https://developer.android.google.cn/preview/behavior-changes-all

https://juejin.im/post/5c98958f6fb9a070f77d1838

https://juejin.im/post/5cad5b7ce51d456e5a0728b0

Android 适配Q版本Beta2相关推荐

  1. Android Q版本应用兼容性适配指导

    目录 Android Q版本应用兼容性适配指导... 1 1.      背景说明... 4 2.      存储空间限制... 4 2.1背景     4 2.2兼容性影响... 5 2.3 适配指 ...

  2. android版本适配 q,AndroidQ适配

    1.必需支持64位 armeabi-v7a--->arm64-v8a x86--->x86_64 2.TargetSDKVersion要求 targetSdkVersion>=28 ...

  3. 一文看懂:Android Q版本在安全方面进行了哪些系统性改进

    5月8日凌晨,2019年谷歌I/O开发者大会召开.谷歌下一代Android系统Android Q正式亮相,版本号是10.0.其实早在3月14日,谷歌就放出了Android Q的首个测试版. 那么,此次 ...

  4. android Q版本外部存储问题以及获取空间大小问题

    Q版本: 1.在manifest 文件中添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_ST ...

  5. android获取wifi mac地址吗,Android获取当前WiFi的MAC地址-适配所有版本

    ** Android获取当前WiFi的MAC地址 ** package com.dogness.platform.utils; import android.content.Context; impo ...

  6. 小米android11适配计划,小米、vivo、一加等宣布Android 11 beta版本适配计划

    谷歌已经在昨天面向Pixel系列机型用户推出了Android 11 beta版本更新,用户注册beta测试计划即可率先升级到新版本的测试版本.除了谷歌亲儿子系列产品之外,部分国内手机厂商的产品也是能够 ...

  7. Android 拍照以及相册中选择(适配高版本)————上传多张照片之压缩处理、在线预览可伸缩放大(二)

    ______ Introduction ______ 前言 上一篇文章刚给大家总结完,关于上传头像的功能.此文章所述 主要是关于上传头像的具体流程以及如何对照片做裁剪处理,回调给控件显示:当然重中之重 ...

  8. 小米4 第三方re奇兔_小米、vivo、一加等宣布Android 11 beta版本适配计划

    谷歌已经在昨天面向Pixel系列机型用户推出了Android 11 beta版本更新,用户注册beta测试计划即可率先升级到新版本的测试版本.除了谷歌亲儿子系列产品之外,部分国内手机厂商的产品也是能够 ...

  9. android 10以上版本5G信号TAC、PCI等数据获取

    android 10以上版本5G信号TAC.PCI.RSRP.RSRQ.SINR等数据获取 前言 一.TAC.PCI数据获取 二.RSRP.RSRQ.SINR数据获取 前言 之前有个APP用到了获取T ...

最新文章

  1. 浅谈O2O行业的猎人与农夫【更新完毕】
  2. 失败用例重跑机制-python装饰器
  3. python中upper函数有什么用_几个有用的python字符串函数(format,join,split,startwith,endwith,lower,upper)...
  4. 爱荷华大学计算机科学专业,爱荷华大学计算机科学专业好不好?专业设置详情一览...
  5. 4 插件模块_设计师必备的ps插件推荐
  6. 交钱赎“人”!B站500万粉UP主被黑客勒索,腾讯都表示无解
  7. 苹果紧急修复已遭利用的0day
  8. 税收征管信息系统_聚焦湖北税收征管信息系统正式切换上线啦! 首日办理业务逾26万件...
  9. 实验3-10 高速公路超速处罚 (15 分)
  10. 【协议】3、HTTP 协议入门
  11. The binding handle is invalid 绑定句柄无效
  12. JSON字符串,JSON对象,JSON数组,实体类转换
  13. json在线解析工具
  14. 含参变量正常积分_含参变量的积分
  15. Java实现MD5加密工具类
  16. QT Libvlc音视频环境配置及编译错误解决
  17. w7设置双显示器_win7系统设置双显示器多屏幕模式的操作方法
  18. 腾讯校园招聘笔试——逛街能看到楼的数量
  19. 神马都是浮云!神马浮云是什么意思?-出自小月月
  20. 【搜索】单词方阵 luogu-1101

热门文章

  1. vmware 15.5.1 ubuntu 16.04 罗技无线鼠标 滚轮不能用
  2. mysql dml语句 先读取在更新_事务的4个特性——ACID(原子性、一致性、隔离性和持久性)、更新丢失问题...
  3. 【​观察】美国公有云“排位赛”结束 中国市场正“步其后尘”?
  4. 4418 选元素(递推)
  5. Apache ab压力测试说明
  6. Java系列技术之JDBC操作数据库-钟洪发-专题视频课程
  7. 博客的写作魅力——如何写出非专业人士和科学家能读懂的博客?
  8. 【游戏行业解决方案】
  9. 学科语文调剂信息汇总
  10. 移动开发——音乐小程序服务器搭建