如何在Amazon Device Farm运行UiAutomator 2.0测试?遇Dex文件缺失报错求助
解决Amazon Device Farm上UiAutomator 2.0测试的两个关键问题
嘿,我之前帮朋友排查过类似的场景,给你梳理下针对性的解决方案:
1. 关于Desired Capability被移除的问题
Amazon Device Farm现在对UiAutomator 2.0的支持已经做了简化,很多之前需要手动配置的Desired Capability(比如automationName、uiautomator2ServerInstallTimeout这类)已经被平台自动接管了,你不需要在代码里再设置这些参数。
你只需要确保你的测试项目依赖了正确的UiAutomator 2.0库,比如在项目的Module级别build.gradle里添加:
androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' // 可以替换为更高稳定版本
这样Device Farm就能自动识别并适配UiAutomator 2.0的运行环境,不用纠结被移除的capability了。
2. 解决“根测试包中不存在classes dex文件”的报错
这个问题核心是你上传的jar包不符合Device Farm的测试包要求——它需要的是包含dex字节码的可执行测试包,而不是普通的Java编译jar。这里有几个靠谱的解决步骤:
- 优先用测试APK替代jar包上传:Device Farm对UiAutomator 2.0测试更推荐上传测试APK,而不是jar包。你可以在Android Studio里执行
./gradlew assembleAndroidTest命令(或者通过Build菜单:Build -> Build Bundle(s)/APK(s) -> Build APK(s)),生成的测试APK会在app/build/outputs/apk/androidTest/[debug/release]/目录下,直接上传这个APK就好,它会包含所有必要的dex文件和依赖。 - 确认测试类的目录结构:你的UiAutomator测试类必须放在
androidTest/java/[你的应用包名]目录下(比如com.yourapp.test),而不是普通的test/java目录——后者是本地单元测试,Device Farm不识别这类测试用于UiAutomator 2.0的真机测试。 - 如果一定要用jar包(不推荐):需要用Android的
dx工具把编译后的class文件转换成dex,再打包成jar。命令大概是:
dx --dex --output=tests.dex your-test-classes-dir zip -r test-jar-with-dex.jar tests.dex
但这种方式容易遗漏依赖,还是优先用测试APK更稳妥。
最后总结下操作流程
- 清理代码中被Device Farm移除的Desired Capability,确保测试项目依赖正确的UiAutomator 2.0库;
- 用Gradle生成测试APK(
assembleAndroidTest); - 上传你的应用APK和测试APK到Device Farm;
- 启动测试任务,应该就能正常识别测试类并执行了。
内容的提问来源于stack exchange,提问作者allexif
相关产品推荐
相关产品推荐

