为什么要检测?
Google在2018年的I/O大会上发布了Android P的Developer Preview 2(简称DP2)版本,其中还说明了在以后的Android P上,将对非SDK API的调用进行限制。目前,开发者对于非SDK API的调用,只能采取反射或JNI间接调用的方法进行调用。由于Android是开源的,所以开发者对非公有SDK的调用十分混乱,Google此举也是为了进一步防止碎片化,规范开发者的API使用行为。

而在运行Android P的手机上,启动APP时,ART虚拟机就会对APP的Dex文件进行检测,比对内置的黑名单、暗灰名单、亮灰名单,一旦发现APP内含有上面名的中的调用,就会发出警告,严重的,会直接抛出异常,如果没有进行处理,将导致APP的Crash,即使进行了try-catch,这些反射调用的功能,也会使用不正常。
调用了黑名单(BlackList)中的API,APP在Android P上运行时抛出异常:

Google官方给出的使用非SDK API的影响:

因此,开发者应该尽量避免使用反射调用非SDK API,防止在Android P上出现问题,为了避免APP体验受到影响,兼容Android P,我们需要对现有APP的API使用情况进行检测。
如何检测?
Google官方并没有直接放出APP检测工具,可能是因为还处于开发者预览版的阶段,最终的黑白名单还没有完全确定下来,但可以通过AOSP的master源码编译后获取这个名为veridex的工具
AOSP的获取方法这里不详细讨论,可以参考:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
veridex的编译方法
首先需要建立好AOSP的构建环境,可以使用macOS或者Ubuntu,这里以64位的Ubuntu 16.04.4 LTS为例:
安装OpenJDK 8,命令:

本文探讨了Google在Android P中限制非SDK API调用的原因及影响,介绍了如何通过编译AOSP源码获取veridex工具进行API检测,并提供了检测方法和注意事项,强调开发者需避免使用非SDK API以确保应用兼容性。
2183

被折叠的 条评论
为什么被折叠?



