我创建了一些espresso UI测试。这些测试在本地(模拟器和真实设备)运行良好。但是,当我尝试在CircleCI上运行UI测试时。我收到此错误日志
任务:app:compileFossDebugAndroidTestKotlin 使用Kotlin编译守护程序进行的编译未成功 java.rmi.UnmarshalException:解组返回标头时出错;嵌套的异常是:
编译后无法清除jar缓存,也许守护进程已经关闭:java.rmi.ConnectException:连接被拒绝托管给主机:127.0.0.1;嵌套的异常是: java.net.ConnectException:连接被拒绝(连接被拒绝) 无法连接到kotlin守护程序。使用后备策略。
拾取了JAVA_TOOL_OPTIONS:-Xms512m
任务:app:compileFossDebugAndroidTestKotlin失败
失败:构建失败,并出现异常。
有关错误日志的更多详细信息,here
这是我的带有运行UI测试作业的circleci的config.yml文件
run-ui-tests:
docker:
- image: circleci/android@sha256:5cdc8626cc6f13efe5ed982cdcdb432b0472f8740fed8743a6461e025ad6cdfc
environment:
JVM_OPTS: -Xmx2048m
GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
steps:
- checkout
- run:
name: ANDROID_HOME
command: echo "sdk.dir="$ANDROID_HOME > local.properties
- run:
name: restore files from ENV
command: |
echo $ROCKET_JKS_BASE64 | base64 --decode > Rocket.jks
echo $ROCKET_PLAY_JSON | base64 --decode > app/rocket-chat.json
- run:
name: checkout Rocket.Chat.Kotlin.SDK
command: git clone https://github.com/RocketChat/Rocket.Chat.Kotlin.SDK.git ../Rocket.Chat.Kotlin.SDK
- restore_cache:
key: kotlin-sdk-{{ .Revision }}
- restore_cache:
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
- run:
name: Accept licenses
command: yes | sdkmanager --licenses || true
- run:
name: Download Dependencies
command: ./gradlew androidDependencies
- save_cache:
paths:
- ~/.gradle
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
- run:
name: Setup emulator
command: sdkmanager "system-images;android-22;default;armeabi-v7a" && echo "no" | avdmanager create avd -n test -k "system-images;android-22;default;armeabi-v7a"
- run:
name: Launch emulator
command: export LD_LIBRARY_PATH=${ANDROID_HOME}/emulator/lib64:${ANDROID_HOME}/emulator/lib64/qt/lib && emulator64-arm -avd test -noaudio -no-boot-anim -no-window -accel auto -verbose
background: true
- run:
name: Wait emulator
command: |
# wait for it to have booted
circle-android wait-for-boot
# unlock the emulator screen
sleep 30
adb shell input keyevent 82
- run:
name: Run EspressoTests
command: ./gradlew connectedAndroidTest
- store_artifacts:
path: app/build/reports
destination: reports
- store_test_results:
path: app/build/test-results
gradle.properties
android.enableJetifier=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx1536m
其他配置
compileSdk version : 28
targetSdk version : 28
kotlin version : '1.3.31'
该项目具有2种口味:foss和play 和2种构建类型:调试和发布
我尝试了所有可能的解决方案,但是没有一个起作用。任何帮助将不胜感激。谢谢
答案 0 :(得分:1)
我遇到了同样的问题。
最后,我删除了gradle缓存文件夹(linux:〜/ .gradle),此问题消失了。
您可以先杀死Gradle Deamon。
更新:我发现原因是禁用gradle deamon可以解决此问题。 将org.gradle.daemon = false添加到gradle.properties
update2:抱歉,每个人,这是我的ECS太低(1 cpu,1G内存)的原因,我添加了1G交换并且此问题消失了。
答案 1 :(得分:1)
将此行添加到config.yml
可以帮助我避免此错误
GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
更多信息在这里:https://github.com/circleci/circleci-docs/issues/2945#issuecomment-471637158
答案 2 :(得分:0)
对于很多人来说,似乎已经添加了GRADLE_OPTS行,这有助于解决他们的编组错误。对我来说,该行实际上导致我的所有单元测试中断,然后才进入引起非编组错误的命令。对于我们的构建,在运行所有单元测试后,gradle内存已用完。解决方案是在所有单元测试都运行之后,但在构建并推送到商店之前,清除gradle缓存。我们按照注释部分中指出的用户zhukunqian将命令rm -fr ~/.gradle/daemon/
添加到了travis文件中。