I met memory problem when running android ui test on circleCI. It is fine if just running unit test, but failed if runnning instrumentation test. I think the reason is my project using multi dex, but I have no way to limit the memory of executing test. Could someone help me solve the problem?
Here is part of memory-usage.txt:
27465 1462692 182 /usr/lib/jvm/jdk1.8.0/bin/java -Djava.awt.headless=true -Xmx4g -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /usr/local/android-sdk-linux/build-tools/25.0.3/lib/dx.jar com.android.dx.command.Main --dex --num-threads=4 --multi-dex --main-dex-list /home/ubuntu/myProject/myProject/build/intermediates/multi-dex/debug/maindexlist.txt --output /home/ubuntu/myProject/myProject/build/intermediates/transforms/dex/debug/folders/1000/1f/main /home/ubuntu/myProject/myProject/build/intermediates/transforms/jarMerging/debug/jars/1/1f/combined.jar
23791 1312704 76.5 /usr/local/android-sdk-linux/tools/qemu/linux-x86_64/qemu-system-armel -avd circleci-android24-googleapis -no-window -gpu off
27164 1199012 98.2 /usr/lib/jvm/jdk1.8.0/bin/java -Xms512m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Duser.variant -cp /home/ubuntu/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-launcher-3.3.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 3.3
my circle.yml:
general:
artifacts:
- "~/build_output.zip" # Save APK's, Lint Results, and Test Results
machine:
environment:
ANDROID_HOME: /usr/local/android-sdk-linux
# Disable emulator audio
QEMU_AUDIO_DRV: none
_JAVA_OPTIONS: "-Xms256m -Xmx1280m -XX:MaxPermSize=350m"
GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx1536m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError"'
java:
version: oraclejdk8
dependencies:
pre:
- echo y | android update sdk --no-ui --all --filter "android-24"
# Android SDK Platform 25 Build Tools
- echo y | android update sdk --no-ui --all --filter "tools"
# Android SDK Platform Tools 25.0.3
- echo y | android update sdk --no-ui --all --filter "platform-tools"
# Android SDK Build-tools, revision 25.0.2
- echo y | android update sdk --no-ui --all --filter "build-tools-25.0.3"
# Android Support Repository, revision 35 / Local Maven repository for Support Libraries
- echo y | android update sdk --no-ui --all --filter "extra-android-m2repository"
- echo y | android update sdk --no-ui --all --filter "extra-google-google_play_services"
- echo y | android update sdk --no-ui --all --filter "extra-google-m2repository"
- echo y | android update sdk --no-ui --all --filter "extra-android-support"
# Android 24 ARM Google APIs system Image
- echo y | android update sdk --no-ui --all --filter "sys-img-armeabi-v7a-google_apis-24"
# Create the android 24 AVD
- echo no | android create avd -n circleci-android24-googleapis -t 'android-24' --abi google_apis/armeabi-v7a
# software rendering is broken in revision 10, we'll use revision 08
- wget "https://dl-ssl.google.com/android/repository/sys-img/google_apis/armeabi-v7a-24_r08.zip"
- unzip armeabi-v7a-24_r08.zip
# overwrite some of the new files with older files
- mv armeabi-v7a/* /usr/local/android-sdk-linux/system-images/android-24/google_apis/armeabi-v7a
- rm armeabi-v7a-24_r08.zip
override:
- ANDROID_HOME=/usr/local/android-sdk-linux ./gradlew dependencies
cache_directories:
- ~/.gradle
- /usr/local/android-sdk-linux/tools
- /usr/local/android-sdk-linux/platforms/android-24
- /usr/local/android-sdk-linux/build-tools/25.0.3
- /usr/local/android-sdk-linux/extras/android/m2repository
test:
override:
#- ./gradlew test
- emulator -avd circleci-android24-googleapis -no-window -gpu off:
background: true
parallel: true
# wait for emulator to boot
- circle-android wait-for-boot
# unlock the emulator
- sleep 30
- adb shell input keyevent 82
# run tests against the emulator.
- ./gradlew --no-daemon --stacktrace connectedAndroidTest --continue -PpreDexEnable=false -Pcom.android.build.threadPoolSize=1 -Dorg.gradle.parallel=false -Dorg.gradle.jvmargs="-Xms512m -Xmx512m":
timeout: 15000
failed log:
./gradlew --no-daemon --stacktrace connectedAndroidTest --continue -PpreDexEnable=false -Pcom.android.build.threadPoolSize=1 -Dorg.gradle.parallel=false -Dorg.gradle.jvmargs="-Xms512m -Xmx512m" died unexpectedly
my project gradle setting:
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "myproject"
minSdkVersion 14
targetSdkVersion 19
// Enabling multidex support.
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
dexOptions {
javaMaxHeapSize "4g"
dexInProcess = false
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
signingConfig signingConfigs.config
}
}
lintOptions {
disable 'MissingTranslation'
disable "ResourceType"
checkReleaseBuilds false
abortOnError false
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
}
useLibrary 'org.apache.http.legacy'
}