• blacklist(黑名单):无论 targetSdkVersion 为多少,只要应用运行在 Android 9.0 平台上,访问此名单中的接口都会受限

3.2 如何测试应用是否使用非 SDK 接口

可以通过以下方式进行测试(详情请至[官方文档](()):

  • 使用 Android 9.0 或更高版本的设备调试应用
  • 使用 StrictMode API 进行测试
  • 使用 veridex 工具对应用进行扫描

建议使用第三种方式,该工具的扫描结果会列出应用对于三个限制名单中的接口的调用细节。

4. 前台服务权限

在 Android 9.0 中,应用在使用前台服务之前必须先申请 FOREGROUND_SERVICE 权限,否则就会抛出 SecurityException 异常。

此外,由于 FOREGROUND_SERVICE 权限只是普通权限,因此开发者只需在 AndroidManifest.xml 中注册此权限即可,系统会自动对此权限进行授权:

5. 强制执行 FLAG_ACTIVITY_NEW_TASK 要求

在 Android 7.0(API 级别 24)之前,若开发者需要通过非 Activity context 启动 Activity,就必须设置 Intent 标志 FLAG_ACTIVITY_NEW_TASK,否则会启动失败并抛出以下异常

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

但这个要求在更新 Android 7.0 以后由于系统问题被临时取消了,开发者即使不设置标志也可以正常启动 Activity。而在 Android 9.0 中官方修复了这个问题,这个要求重新开始强制执行,因此开发者在适配 Android 9.0 时需要注意这个问题。

6. 不允许共享 WebView 数据目录

Android 9.0 中为了改善应用稳定性和数据完整性,应用无法再让多个进程共用同一 WebView 数据目录。此类数据 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 目录一般存储 Cookie、HTTP 缓存以及其他与网络浏览有关的持久性和临时性存储。

如果开发者需要在多进程中使用 WebView,则必须先调用 WebView.setDataDirectorySuffix() 方法为每个进程设置用于存储 WebView 数据的目录。若多进程 WebView 之间需要共享数据,开发者需自己通过 IPC 的方式实现。

此外,若开发者只想在一个进程中使用 WebView,并且希望严格执行这个规则,可以通过在其他进程中调用 WebView.disableWebView() 方法,这样其他进程创建 WebView 实例就会抛出异常。

7. 其他 API 方面的修改

7.1 Region.Op 相关

Android 9.0 中如果在使用绘图裁剪功能时设置了除 Region.Op.INTERSECTRegion.Op.DIFFERENCE 以外的类型,就会抛出以下异常:

java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed

具体原因是官方废弃了那几个具有 Region.Op 参数的裁剪方法,如 clipRect(@NonNull RectF rect, @NonNull Region.Op op)

/**

  • Modify the current clip with the specified rectangle.
  • @param rect The rect to intersect with the current clip
  • @param op How the clip is modified
  • @return true if the resulting clip is non-empty
  • @deprecated Region.Op values other than {@link Region.Op#INTERSECT} and
  • {@link Region.Op#DIFFERENCE} have the ability to expand the clip. The canvas clipping APIs
  • are intended to only expand the clip as a result of a restore operation. This enables a view
  • parent to clip a canvas to clearly define the maximal drawing area of its children. The
  • recommended alternative calls are {@link #clipRect(RectF)} and {@link #clipOutRect(RectF)};
  • As of API Level API level {@value Build.VERSION_CODES#P} only {@link Region.Op#INTERSECT} and
  • {@link Region.Op#DIFFERENCE} are valid Region.Op parameters.
    */
    @Deprecated
    public boolean clipRect(@NonNull RectF rect, @NonNull Region.Op op) {
    checkValidClipOp(op);
    return nClipRect(mNativeCanvasWrapper, rect.left, rect.top, rect.right, rect.bottom,
    op.nativeInt);
    }

private static void checkValidClipOp(@NonNull Region.Op op) {
if (sCompatiblityVersion >= Build.VERSION_CODES.P
&& op != Region.Op.INTERSECT && op != Region.Op.DIFFERENCE) {
throw new IllegalArgumentException(
“Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed”);
}
}
对于这个问题,可以通过以下方法进行适配:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
canvas.clipPath(path);
} else {
canvas.clipPath(path, Region.Op.XOR);// REPLACE、UNION 等类型
}

7.2 Build.SERIAL 被弃用

Android 版本适配:9相关推荐

  1. 红米android 版本,#MIUI#关于红米手机4高配版 Android版本适配的说明【miui9吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 大家好 最近部分米粉关心的红米手机4高配版适配 Android 7.0,这个建议我们很早注意到了,并且内部做了充分的沟通和协调.最新的结论是红米手机4高配 ...

  2. 红米手机 android 版本,#MIUI#关于红米手机4高配版 Android版本适配的说明【miui9吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 大家好 最近部分米粉关心的红米手机4高配版适配 Android 7.0,这个建议我们很早注意到了,并且内部做了充分的沟通和协调.最新的结论是红米手机4高配 ...

  3. Android 版本适配:9.0 Pie(API 级别 28)

    一.前言 本文主要是从官方文档中筛选出一些常见的适配项,若有任何纰漏或需要补充的,欢迎大家在评论区指出. 二.版本适配 1. 限制 HTTP 网络请求 Android 9.0 中限制了 HTTP(明文 ...

  4. 红米5a android 版本,#MIUI#关于红米手机4高配版 Android版本适配的说明【miui9吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 大家好 最近部分米粉关心的红米手机4高配版适配 Android 7.0,这个建议我们很早注意到了,并且内部做了充分的沟通和协调.最新的结论是红米手机4高配 ...

  5. 红米4A Android 版本,#MIUI#关于红米手机4高配版 Android版本适配的说明【miui9吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 大家好 最近部分米粉关心的红米手机4高配版适配 Android 7.0,这个建议我们很早注意到了,并且内部做了充分的沟通和协调.最新的结论是红米手机4高配 ...

  6. android红米机型适配,#MIUI#关于红米手机4高配版 Android版本适配的说明【miui9吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 大家好 最近部分米粉关心的红米手机4高配版适配 Android 7.0,这个建议我们很早注意到了,并且内部做了充分的沟通和协调.最新的结论是红米手机4高配 ...

  7. 红米如何查看手机android版本号,#MIUI#关于红米手机4高配版 Android版本适配的说明【miui9吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 大家好 最近部分米粉关心的红米手机4高配版适配 Android 7.0,这个建议我们很早注意到了,并且内部做了充分的沟通和协调.最新的结论是红米手机4高配 ...

  8. Android百科全书目录(第六期)(Android版本适配问题)

    10年后的王者峡谷,当时我正在带线,忽然一个超级兵居然说话了,"想当年,我也是一个神话,只是被削成了超级兵.你能别杀我么?" 临走前,我问了那个超级兵的名字,只见他有气无力的说出四 ...

  9. android大小悬浮窗,悬浮窗不同android版本适配

    实现添加悬浮窗的核心源码代码WindowManagerService#addWindow方法中有以下几个关键: 1.权限检查 mPolicy.checkAddPermission(attrs, app ...

最新文章

  1. ORACLE数据库系统结构
  2. 华为stfal00是什么手机_opporeno5pro和华为p40pro有什么区别 哪款手机更好
  3. 键盘按下某键 停止运行java_实现按下一个键执行操作/松开一个键停止操作
  4. UI:UITableView 编辑、cell重用机制
  5. spring-mvc教程_使用MVC模式制作游戏-教程和简介
  6. tomcat 5 comcat 6 区别
  7. virtualmin修改php.ini,virtualmin安装和配置使用
  8. 容灾技术中的数据一致性保障
  9. css大会站点顶部的一个特效
  10. shp数据导入PostGIS,使用geoserver发布wms服务
  11. 如何用犀牛自带的电池快速制作tekla自定义截面
  12. Reed-Solomon Codes——RS纠错码
  13. 计算机找不到ie浏览器,IE浏览器不见了怎么办?找回IE浏览器的方法
  14. 计算机上什么键有存储,电脑保存的快捷键是什么_电脑知识
  15. 信号发生器和任意波形发生器的区别
  16. PTA作业记录1(计算存款利息)
  17. codeforces 1139c Edgy Trees 【并查集 】
  18. 看电影适合什么蓝牙耳机?四款主动降噪高品质蓝牙耳机测评
  19. 部署静态页面到腾讯云服务器
  20. mysql fulltext match_使用Mysql全文搜索Full-Text(fulltext和match...against)_MySQL

热门文章

  1. Google Chrome 更新失败(错误:3)检查更新时出错
  2. 会php学java入门要多久_php自学需要多久
  3. 转载-css 属性clip-path之多边形polygon小窥
  4. 用Q-learning算法实现自动走迷宫机器人
  5. java类与接口思维导图_详解java接口基础知识附思维导图
  6. office2020与2016版的不同_Office2016与Office2019,这两个版本有些什么区别
  7. 好好说话之Fastbin Attack(1):Fastbin Double Free
  8. 计算机显示器外壳怎么防水,电脑显示器怎么拆开外壳
  9. Pdf 插入图片 | 指定位置插入图片 不改变原格式 直接操作 pdf
  10. 远程计算机强迫关闭一个连接,远程主机强迫关闭了一个现有的连接,该怎么办...