Android P 预览版发布的非 SDK 接口管控特性,被称为 Android 史上最严格的变更特性之一,针对这个特性开发者在适配工作中普遍遇到哪些疑点和困惑?华为终端开放实验室整理了一份 Android P 非 SDK 管控特性 FAQ,一起来看看吧。
Q1.什么是非 SDK 接口?
A:谷歌网站:
https://developer.android.google.cn/reference/packages 在此网站能够查询到的接口都是 SDK 接口;除以上的 SDK 接口外,其他都是非 SDK 接口。
Q2.如果调用了非 SDK 接口,会怎么样?
A: 无论通过调用、反射还是 JNI 等方式调用非 SDK 接口,都会导致应用出现 crash,无法启动;或在运行过程中出现崩溃、闪退等现象;也可能导致应用功能不可用等严重兼容性问题,其影响范围波及所有调用此接口的应用,因此,非 SDK 接口管控被称为 Android 史上最严格的变更特性之一。
Q3. 什么是非 SDK 接口管控名单?
A: 名单类型分 light grey list(浅灰名单), dark grey list(深灰名单), dark list(黑名单)。
Q4.怎么查非 SDK 接口管控名单?
A: 查询链接:
https://android.googlesource.com/platform/frameworks/base/+/master/config/
Q5.hidden api 浅灰名单、深灰名单和黑名单进一步说明:
A:①浅灰名单:
hiddenapi-light-greylist.txt+hiddenapi-vendor-list.txt,hiddenapi-p-light-greylist.txt 名单目前还未用到,可以暂不关注。
②深灰名单和黑名单:
目前没有具体的代码名单可以看到深灰和黑名单接口列表,开发者可以通过编译谷歌提供的静态扫描 veridex 工具(需要下载谷歌 Android P 整个工程代码),动态生成浅灰、深灰和黑名单接口名单:
工具路径: art/tools/veridex/
工具编译:make appcompat
out\target\common\obj\PACKAGING 下会动态生成三个名单:
源码下载指导:
https://source.android.google.cn/setup/downloading
③需要整改的接口名单: 黑名单接口
④在 DP1 版本中黑中名单是空的,只有浅灰 + 深灰,不会因为非 SDK 变更导致应用出现兼容性问题;而 DP2 版本开始加入黑名单,如果应用未在 DP1 版本整改和适配的话,可能会因为 DP2 版本加入的黑名单导致兼容性问题。
Q6.名单变化的趋势是怎样的?
A:整合 OEM 厂商的扫描测试 + 谷歌的扫描测试 + 开发者自己扫描测试,申请将扫描到的黑名单接口加入到灰名单中。目前趋势是黑名单不断减少,浅灰名单不断增加。DP2 版本浅灰名单是现在谷歌最新浅灰名单的一个子集,应用在 DP2 版本中测试可以充分暴露问题。因此,针对非 SDK 问题,应用在 DP2 版本整改之后,不会在后续版本引入新的问题。
Q7.名单申请 deadline 是什么时间?
A:目前谷歌官方未公布,应用须尽快向谷歌反馈需要加灰名单的接口;越晚反馈申请难度越大,之后再发现有新的必须调用的非 SDK API 就只能走 escalation 了,申请修改加灰名单的难度系数将增加很多。
Q8.应用使用 blacklist 非 SDK 接口导致崩溃,无法发现其调用的其他更多非 SDK 接口,怎么办?
A:请用下面的命令将 blacklist 设为只警报不崩溃:
adb shell settings put global hidden_api_policy_pre_p_apps 1
adb shell settings put global hidden_api_policy_p_apps 1
注意:此为开发者选项,仅供开发时使用
复位命令:
adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps
Q9.应用现在要做的最紧急的事情是?
A:在 DP2 版本中通过 veridex 静态分析 + logcat 动态测试充分暴露问题,发现必须要使用的且不在浅灰名单的非 SDK 接口,需尽快反馈给谷歌,申请加浅灰名单,并提交申请理由,以确保后续的 DP 版本不会出现同样的非 SDK 接口问题。
问题反馈链接:
https://issuetracker.google.com/issues/new?component=328403&template=1027267
Q10. 使用加固的应用该怎么做?
A:对于使用加固的应用,因为 OEM 厂商和谷歌都无法通过静态工具帮助应用扫描使用的非 SDK 接口列表。如果应用还未更新最新适配谷歌 Android P 的加固版本,存在无法启动的问题,那么通过动态扫描的方式也是无法进行的。所以使用加固的应用需要通过静态 + 动态扫描白包的方式获取正在使用的非 SDK 接口,并反馈给谷歌申请加灰名单。
重点关注:
1.应用测试中发现需要申请加入浅灰名单的非 SDK 接口需尽快反馈给谷歌,越晚反馈,谷歌修改的难度将越大,可能导致无法加入灰名单而影响应用功能;
2.谷歌发布的 DP2 版本中已加入黑名单,建议开发者在 DP2 版本中测试验证应用调用的非 SDK 接口,针对无法整改的非 SDK 接口,及时向谷歌反馈必需使用此接口的详细原因,申请重新评估该接口。
Android P FAQ 系列将持续推出,欢迎大家扫描屏幕下方二维码关注了解更多