android - 在 2 个仿真器上运行仪器测试时 - connectedProStagingDebugAndroidTest 失败 - INSTALL_FAILED_INVALID_APK -/base.apk 代码丢失
问题描述
我尝试在 2 个模拟器上运行 Instrumentation 测试,在 CI 机器上使用 2 个不同的测试套件和下面的 shell 脚本,该机器使用 Jenkins 运行该作业。
startTest(){
./gradlew installProStagingDebug
./gradlew installProStagingDebugAndroidTest
pids=
env ANDROID_SERIAL=emulator-5554 ./gradlew -Pandroid.testInstrumentationRunnerArguments.class=com.app.appname.TestSuiteOne connectedproStagingDebugAndroidTest \
&
pids+=" $!"
echo "PID 1st is $pids"
env ANDROID_SERIAL=emulator-5556 ./gradlew -Pandroid.testInstrumentationRunnerArguments.class=com.app.appname.TestSuiteTwo connectedproStagingDebugAndroidTest \
&
pids+=" $!"
echo "PID 2nd is $pids"
wait $pids || { echo "there were errors" >&2; exit 1; }
exit 0
}
在运行startTest()方法之前,如果SDK不可用,我将下载它,然后启动这些模拟器。
模拟器的配置是
- 内存(RAM) - 4096MB
- GPU - swiftshader_indirec(也尝试过主机gpu)
使用上面的脚本,我无法在两个设备上运行 Instrumentation 测试。
[05:03:33]: ▸ [35m> Task :app:connectedProStagingDebugAndroidTest FAILED[0m
[05:03:33]: ▸ [35mUnable to install /home/ubuntu/workspace/AndroidInstrumentationTest/app/build/outputs/apk/proStaging/debug/app-proStaging-debug.apk[0m
[05:03:33]: ▸ [35mcom.android.ddmlib.InstallException: INSTALL_FAILED_INVALID_APK: Scanning Failed.: Package /data/app/com.app.appnamestaging-YtqaUiatT==/base.apk code is missing[0m
[05:03:33]: ▸ [35mat com.android.ddmlib.Device.installRemotePackage(Device.java:1143)[0m
[05:03:33]: ▸ [35mat com.android.ddmlib.Device.installPackage(Device.java:973)[0m
[05:03:33]: ▸ [35mat com.android.ddmlib.Device.installPackage(Device.java:949)[0m
[05:03:33]: ▸ [35mat com.android.ddmlib.Device.installPackage(Device.java:938)[0m
[05:03:33]: ▸ [35mat com.android.builder.testing.ConnectedDevice.installPackage(ConnectedDevice.java:126)[0m
[05:03:33]: ▸ [35mat com.android.builder.internal.testing.SimpleTestRunnable.run(SimpleTestRunnable.java:148)[0m
[05:03:33]: ▸ [35mat com.android.ide.common.workers.ExecutorServiceAdapter$submit$submission$1.run(ExecutorServiceAdapter.kt:68)[0m
[05:03:33]: ▸ [35mat java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)[0m
[05:03:33]: ▸ [35mat java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)[0m
[05:03:33]: ▸ [35mat java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)[0m
[05:03:33]: ▸ [35mat java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)[0m
[05:03:33]: ▸ [35mat java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)[0m
[05:03:33]: ▸ [35mcom.android.builder.testing.ConnectedDevice > runTests[Nexus_5_29(AVD) - 10] [31mFAILED [0m
[05:03:33]: ▸ [35mcom.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: INSTALL_FAILED_INVALID_APK: Scanning Failed.: Package /data/app/com.app.appnamestaging-YtqaUiatT==/base.apk code is missing[0m
[05:03:33]: ▸ [35mat com.android.builder.testing.ConnectedDevice.installPackage(ConnectedDevice.java:132)[0m
[05:03:33]: ▸ [35m[no message defined][0m
[05:03:33]: ▸ [35mjava.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: INSTALL_FAILED_INVALID_APK: Scanning Failed.: Package /data/app/com.app.appnamestaging-YtqaUiatT==/base.apk code is missing[0m
[05:03:33]: ▸ [35mat java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1006)[0m
[05:03:33]: ▸ [35mat com.android.ide.common.workers.ExecutorServiceAdapter.await(ExecutorServiceAdapter.kt:102)[0m
[05:03:33]: ▸ [35mat com.android.builder.testing.BaseTestRunner.runTests(BaseTestRunner.java:204)[0m
[05:03:33]: ▸ [35mat com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.lambda$doTaskAction$2(DeviceProviderInstrumentTestTask.java:198)[0m
[05:03:33]: ▸ [35mat com.android.builder.testing.api.DeviceProvider.use(DeviceProvider.java:53)[0m
[05:03:33]: ▸ [35mat com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.doTaskAction(DeviceProviderInstrumentTestTask.java:188)[0m
……..
[35m67 actionable tasks: 15 executed, 52 up-to-date[0m
[05:03:35]: ▸ [35m> Task :app:mergeProjectDexProStagingDebug[0m
[05:03:36]: ▸ [35m> Task :app:mergeExtDexProStagingDebug[0m
[05:03:37]: ▸ [35m> Task :app:packageProStagingDebug[0m
[05:03:41]: ▸ [35m> Task :app:connectedProStagingDebugAndroidTest[0m
[05:03:41]: ▸ [35mStarting 0 tests on Nexus_5_29_2(AVD) - 10[0m
[05:03:41]: ▸ [35mTests on Nexus_5_29_2(AVD) - 10 failed: Instrumentation run failed due to 'Process crashed.'[0m
[05:03:41]: ▸ [35mcom.android.builder.testing.ConnectedDevice > No tests found.[Nexus_5_29_2(AVD) - 10] [31mFAILED [0m
[05:03:41]: ▸
有时一些测试在我的两个模拟器上运行,但在运行 3 5 个测试后,其中一个模拟器停止运行测试,logcat 显示进程崩溃。
在单个 Emulator 上,上面的脚本工作正常。
注意:我没有使用分片选项或任何像勺子这样的库,因为测试是随机分布在设备上的,在我的场景中,每个测试类都需要执行登录测试 1st。
任何人都可以知道如何解决这个问题?
解决方案
推荐阅读
- php - 更改密码功能在 Laravel 6 中不起作用
- python - if条件下如何连接线?
- reactjs - 如何在 React State 中更新数组中的对象元素
- google-chrome - 登录时 Google chrome 搜索建议无法正常运行
- firebase - 为什么flutter firestore插件不担心关闭它的接收器(快照流)?
- python-2.x - 寻找有关泡菜模块的说明
- android-studio - Kotlin:未找到 RangeSeekBar 库 setSelectedMinValue 函数?
- excel - 未将单元格复制到下一个可用单元格
- java - 处理集成流中可能发生的异常
- javascript - 使用 EJS/Node.js 格式化日期