灌水 Android P FAQ 第一弹:非 SDK 管控特性

华为终端开放实验室 · 2018年06月01日 · 983 次阅读

​​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 系列将持续推出,欢迎大家扫描屏幕下方二维码关注了解更多

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册