假设我已将我的 Android 应用程序的 AndroidManifest.xml 设置如下:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>
我对如何扫描我的源代码以查找不属于我指定的最低 SDK 版本(在本示例中为 API 级别 8)的一部分的 Android API 调用感兴趣。这样,我可以检查每个有问题的调用以确保它通过反射测试或其他向后兼容性的保证正确包装,这样它就不会使旧设备崩溃。理想情况下,我可以将此调用标记为“安全”,这样它就不会在后续扫描中触发。
例如,假设开发人员在不知情的情况下签入了一些使用 API 的代码DownloadManager
,该 API 在 API 级别 9 及更高级别中可用。由于我上面的“uses-sdk”声明,MyApp 将在 Android 2.2(API 级别 8)设备上构建、安装和运行。但是一旦代码路径调用该DownloadManager
2.2 设备上的方法,用户将遇到未解决的虚拟方法异常(崩溃)。这是我试图避免的。
理想情况下,扫描这些可能不兼容的 API 是我可以在构建期间从命令行执行的操作;并且,它将能够处理对 android:minSdkVersion 的更改,而无需进行太多的重组。