Android Studio 3.1构建定制AOSP插桩测试APK遇阻求助
解决方案:Android M AOSP定制项目的插桩测试构建问题
我之前在定制Android M(API 23)的AOSP项目时,也碰到过Gradle和JDK版本不兼容的坑,下面针对你的三个问题逐一给出可行方案:
a)Gradle方案:修复JDK版本冲突与「未知属性」错误
这个问题核心是Android Gradle Plugin(AGP)版本、JDK版本和API 23的兼容性不匹配:AS 3.1+默认的AGP 3.x系列要求JDK 8,但Android M的AOSP构建依赖JDK 1.7,直接设置sourceCompatibility会因为AGP版本过高而报错。可以按以下步骤修复:
- 降级AGP到兼容版本:在项目根目录的
build.gradle中,将AGP版本改为支持JDK 7的2.x系列,比如:buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' // 完美兼容API 23和JDK 7 } } - 明确配置JDK与编译参数:在模块的
build.gradle中,指定正确的编译参数:android { compileSdkVersion 23 buildToolsVersion "23.0.3" // 匹配API 23的build tools版本 defaultConfig { applicationId "your.package.name" minSdkVersion 23 targetSdkVersion 23 versionCode 1 versionName "1.0" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } - 指定AS使用JDK 7:打开
File > Project Structure > SDK Location,将JDK location手动指向你本地安装的JDK 1.7路径,不要用AS默认的JDK 8。 - 清理冲突依赖:如果项目中有Kotlin或其他第三方插件,要降级到支持JDK 7的版本(比如Kotlin 1.2.x及以下),避免强制拉取JDK 8依赖。
完成以上配置后重新同步Gradle,「未知属性」的错误应该就能解决了。
b)Gradle不可行时:使用AOSP原生Makefile构建测试APK
如果Gradle的兼容性问题实在无法解决(比如定制的AOSP模块有大量原生依赖,Gradle难以适配),完全可以用AOSP自带的Makefile构建测试APK——这是AOSP项目的原生构建方式,适配性更强:
- 进入AOSP源码根目录,先执行环境初始化:
source build/envsetup.sh lunch your_target_product # 示例:lunch aosp_arm64-userdebug - 构建单个测试模块:如果测试APK对应独立模块,进入模块目录后执行:
或者在根目录指定模块路径:mmmmm path/to/your/test/module - 构建所有测试包:如果需要批量构建所有测试APK,执行:
make test-packages
构建完成的APK会输出在out/target/product/[your_device]/system/app/或out/target/product/[your_device]/data/app/目录下。
c)Makefile构建后:依然支持插桩测试功能
用Makefile构建的测试APK完全可以正常使用插桩功能,AOSP的Instrumentation测试本身就支持原生构建后的执行,有两种常用方式:
- 通过ADB手动运行:
- 先安装主APK和测试APK:
adb install out/target/product/[your_device]/data/app/YourMainApp/YourMainApp.apk adb install out/target/product/[your_device]/data/app/YourTestApp/YourTestApp.apk - 执行插桩测试:
adb shell am instrument -w your.test.package/android.support.test.runner.AndroidJUnitRunner
- 先安装主APK和测试APK:
- 在Android Studio中运行:
- 确保AS已连接到运行定制AOSP的设备/模拟器;
- 打开
Run > Edit Configurations,添加「Android Instrumented Tests」配置,指定测试包路径; - 直接点击运行按钮,AS会识别已安装的测试APK并执行插桩测试。
如果是系统级插桩测试,还可以用AOSP自带的cts或vts框架,通过make cts构建后运行,同样支持插桩逻辑。
内容的提问来源于stack exchange,提问作者likejudo
相关产品推荐
相关产品推荐

