在 Android 9.0 版本中,谷歌加入了非 SDK 接口使用限制,无论是通过调用、反射还是JNI等方式,开发者都无法对非 SDK 接口进行访问,此接口的滥用将会带来严重的系统兼容性问题。 在开发过程中,开发者如果调用了非 SDK 接口,会导致应用出现crash,无法启动;或在运行过程中出现崩溃、闪退等现象;也可能导致应用功能不可用等严重兼容性问题,其影响范围波及所有调用此接口的应用。

目的:通过减少对非SDK 接口的调用,提升应用的稳定性。

区分 SDK 接口和非 SDK 接口

SDK 接口是指在 Android 框架软件包索引API中记录的接口。

非 SDK 接口是 API 抽象化的实现细节,它们是不属于官方 Android SDK 的 Java 字段和函数;其会随时更改,不另行通知,如:private修饰的方法.

用于限制非 SDK 接口的不同名单

测试非 SDK 接口

通过 Android 9 对您的应用进行测试。系统将打印日志,如果您的应用访问某些“列入灰名单的”非 SDK 接口,系统还可能显示 toast。 如果您的应用调用“列入黑名单的”非 SDK 接口,系统将引发错误。

注意 toast,它会提醒您注意被建议禁用的接口。 此外,确保检查应用的日志消息,其中包含关于应用所访问的非 SDK 接口的更多详细信息,包括以 Android 运行时所使用的格式列出的声明类、名称和类型。 日志消息还说明了访问方法:直接、通过反射或者通过 JNI。 最后,日志消息显示调用的非 SDK 接口属于灰名单还是黑名单。

方法1:动态运行,通过日志分析扫描

通过自动化或人工测试,遍历应用每一个界面和所有功能,抓取日志分析调用的所有非 SDK 接口。

关键日志

*Accessinghidden field Landroid/os/Message;->flags:I (light greylist, JNI)
*Accessing hidden method
*Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;(dark greylist, reflection)
*Accessing hidden method
*Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;(blacklist, reflection)

方法2:静态扫描,通过谷歌提供的 Veridex 扫描工具扫描

  • 工具路径:art/tools/veridex/

  • 工具编译:make appcompat

  • 工具执行:appcompat.sh –dex-file=test.apk

  • 工具执行(带参数,扫描的结果更全面,但可能存在误报的情况):  appcompat.sh –dex-file=test.apk –imprecise

  • 备注:已经加固的应用,需要使用加固前的 APK进行扫描

  • 工具下载:Veridex下载1

  • 具体使用请参阅: veridex工具扫描非 SDK 接口

非SDK接口整改

浅灰名单中的非SDK接口若不整改,仍可以正常使用。开发者需要重点关注的是深灰名单和黑名单中的非 SDK 接口,找到可替代的 SDK 接口进行适配。如果调用的接口在深灰名单或者黑名单中,且无法找到可替代的SDK接口,可向谷歌提供必需使用此接口的详细原因,申请重新评估该接口。链接

Android9.0对非 SDK 接口的限制相关推荐

  1. android sdk 9.0下载地址,Android9.0对非 SDK 接口的限制

    Android9.0对非 SDK 接口的限制 发布时间:2018-10-19 12:00, 浏览次数:919 , 标签: Android SDK 在 Android 9.0 版本中,谷歌加入了非 SD ...

  2. Android9.0 如何精准区分SDK接口和非 SDK接口

    刚刚有同学问我,不太了解 "非SDK接口" 是什么意思?android9.0有什么限制 ?apache的http也有限制 ? 而且现在的大部分系统都升级上来了,黑名单.灰名单和白名 ...

  3. 适配 Android P之非SDK接口限制的排查方法

    code小生,一个专注 Android 领域的技术平台 公众号回复 Android 加入我的安卓技术群 作者:天才木木链接:https://www.jianshu.com/p/efe6690b36b6 ...

  4. Android 10 中有关限制非 SDK 接口的更新

    Android 10 中有关限制非 SDK 接口的更新 目录 浅灰和深灰列表的命名发生变化 非 SDK 接口的代码注释 在 Android 10 中授予对非 SDK 接口的访问权限 Android 1 ...

  5. Android 9 的非 SDK 接口限制 | 中文教学视频

    我们一直致力于为 Android 用户和开发者提供稳定的体验.秉持这种理念,我们逐步限制应用使用非公开接口,因为这种做法往往导致用户遭遇系统崩溃及开发者需要紧急发布修复的风险.在 Android 8. ...

  6. 一种绕过Android P对非SDK接口限制的简单方法

    众所周知,Android P 引入了针对非 SDK 接口(俗称为隐藏API)的使用限制.这是继 Android N上针对 NDK 中私有库的链接限制之后的又一次重大调整.从今以后,不论是native层 ...

  7. Android P (4)一种绕过Android P上非SDK接口限制的简单方法

    一种绕过Android P上非SDK接口限制的简单方法 众所周知,Android P 引入了 针对非 SDK 接口(俗称为隐藏API)的使用限制.这是继 Android N上 针对 NDK 中私有库的 ...

  8. Google针对非 SDK 接口的限制

    Google针对非 SDK 接口的限制 前言 最近在项目中遇到一个问题,非系统签名应用预装到android sdk为28的系统vender或者system分区下,调用隐藏api时,程序崩溃. 报错信息 ...

  9. Android P 访问非SDK 接口

    Android P 如何访问非SDK 接口 为什么要访问非SDK 接口? 为了让应用能获得更多的系统属性.资源,扩展功能等. 在Android P 之前,我们可以使用反射来访问系统内部分 hide/p ...

最新文章

  1. javascript函数嵌套时arguments的问题
  2. 磁盘调度算法寻道问题
  3. 三十二楼层选几层最好_楼房哪些楼层不能选, 买房楼层选不好开始大忌
  4. linux服务 运维案例,linux运维实战练习案例-2015年12月20日-12月31日
  5. 1040. 有几个PAT(25
  6. 动态规划应用--最长递增子序列 LeetCode 300
  7. 升级Windows10后,远程登录失败,问题:您的凭据不工作(RDP do not work )
  8. openssh的服务端配置文件
  9. DevExpress GridControl Gridview RepositoryItemCheckEdit复选框及获取选择行数据
  10. Siri为什么越来越蠢?
  11. 爱立信卫翰思:已囊括拉美一半以上…
  12. chrome不能安装adblock插件
  13. 不想更新计算机怎么办,联想笔记本电脑不想更新系统更新怎么办啊
  14. AtCoder Grand Contest 007 题解
  15. U盘格式化后 容量变小如何解决
  16. OSChina 周五乱弹 —— 是时候动手了
  17. 工信部首次发声:培育一批进军元宇宙等新兴领域的创新型中小企业
  18. 初探CardBoard:(1)在Unity中实现简单VR场景
  19. 网易100天---26、What Is Artificial Intelligence (AI)?
  20. 本科论文查重没通过怎么办?

热门文章

  1. webpack构建中tree shaking、scope Hoisting(面试题)
  2. 《算法第一步》出版啦!
  3. Linux部署springboot项目(从安装java开始)
  4. cublas_学习笔记2
  5. 【蓝桥杯单片机】第十三届蓝桥杯单片机省赛客观题及其题解
  6. Mysql创建用户与赋权限操作
  7. 2021年北航计算机学院夏令营面试经历
  8. cad命令栏怎么调出来_软件CAD | 基本操作逻辑
  9. Android 仿钉钉、微信 群聊组合头像
  10. 微信小程序校园活动管理系统+后台管理系统