从 Android 9(API 级别 28)开始,Android 平台对应用能使用的非 SDK 接口实施了限制。只要应用引用非 SDK 接口或尝试使用反射或 JNI 来获取其句柄,这些限制就适用。这些限制旨在帮助提升用户体验和开发者体验,为用户降低应用发生崩溃的风险,同时为开发者降低紧急发布的风险。
使用 veridex 工具进行测试
可以在 APK 上运行静态分析工具 veridex。veridex 工具会扫描 APK 的整个代码库(包括所有第三方库),并报告发现的所有使用非 SDK 接口的行为。
veridex 工具存在以下局限性:
- 它无法检测到通过 JNI 实现的调用。
- 它只能检测到一部分通过反射实现的调用。
- 它对非活动代码路径的分析仅限于 API 级别的检查。
- 它只能在支持 SSE4.2 和 POPCNT 指令的机器上运行。