如何通过命令行构建库模块APK并运行其测试用例?
解决Library Module测试用例无法找到的问题
你遇到的核心问题是:试图通过主APP的APK运行库模块的测试用例,但库的instrumented测试需要单独构建和安装测试APK,并且使用正确的instrumentation组件信息。日志里的Unable to find instrumentation info错误,就是因为你指定的组件没有被正确安装到设备上。
错误原因拆解
你之前的脚本安装的是主APP(IrisReferenceClient)的APK,但Network-sdk库的测试用例属于独立的androidTest组件,它需要对应的测试APK和匹配的测试运行器配置,和主APP的APK没有直接关联。
修正后的自动化脚本
下面是针对Network-sdk库模块测试的正确执行步骤:
# 1. 清理项目,避免缓存干扰 ./gradlew clean # 2. 构建并安装Network-sdk的debug版本及对应的测试APK # 这个Gradle任务会自动处理测试所需的宿主APP(Android默认提供) ./gradlew :Network-sdk:installDebugAndroidTest # 3. 运行指定的测试用例 # 注意替换以下内容: # - 第一个是测试类的完整包名+类名 # - 第二个是测试包名 + 测试运行器全类名(和build.gradle配置一致) adb shell am instrument -w -r -e debug false -e class 'com.your.network.sdk.ConnectivityTestSenderTest' com.your.network.sdk.test/androidx.test.runner.AndroidJUnitRunner
关键配置确认
确保Network-sdk模块的build.gradle包含正确的测试配置:
android { defaultConfig { // 测试运行器,推荐使用androidx版本;若仍用support库,替换为android.support.test.runner.AndroidJUnitRunner testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // 可选:自定义测试包名(默认是原包名加.test) // testApplicationId "com.your.network.sdk.test" } } dependencies { // 添加instrumented测试依赖 androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' // 若使用support库,替换为对应依赖 // androidTestImplementation 'com.android.support.test:runner:1.0.2' // androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
验证与排查技巧
- 确认测试类位置:
ConnectivityTestSenderTest必须放在Network-sdk模块的src/androidTest/java/目录下(src/test/java/是本地单元测试,不需要instrument)。 - 查看已安装的instrumentation:运行
adb shell pm list instrumentation,找到对应Network-sdk测试的条目,比如:
这条内容就是你需要在instrumentation:com.your.network.sdk.test/androidx.test.runner.AndroidJUnitRunner (target=com.your.network.sdk)am instrument命令中使用的组件名。 - 检查测试APK信息:若不确定包名,可执行
aapt dump badging Network-sdk/build/outputs/apk/androidTest/debug/Network-sdk-debug-androidTest.apk(替换为你的测试APK路径),找到instrumentation相关行确认配置。
内容的提问来源于stack exchange,提问作者M.A.Murali
相关产品推荐
相关产品推荐

