我尝试使用CircleCI assembleDebug
,但它必须无法构建(preDex)。
为什么我不能这样做?
问题
./ gradlew assembleProductionDebug意外死亡建筑物92%3%> :app:preDexProductionDebugaction ./gradlew assembleProductionDebug 失败
circle.yml
general:
artifacts:
- "app/build/outputs/apk/app-production-release-unaligned.apk"
machine:
java:
version: openjdk7
environment:
ANDROID_HOME: /usr/local/android-sdk-linux
dependencies:
pre:
- echo y | android update sdk --no-ui --all --filter "build-tools-21.1.2"
- echo y | android update sdk --no-ui --all --filter "platform-tools"
- echo y | android update sdk --no-ui --all --filter "tools"
- 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-m2repository"
- echo y | android update sdk --no-ui --all --filter "extra-android-support"
- echo y | android update sdk --no-ui --all --filter "android-21"
- git submodule sync
- git submodule update --init
cache_directories:
- ~/.android
- ~/android
override:
- ./gradlew dependencies
test:
override:
- ./gradlew test
deployment:
master:
branch: master
commands:
- ./gradlew assembleProductionDebug
答案 0 :(得分:8)
我有同样的问题。原来我必须为ci版本禁用preDex。
将其放入 root build.gradle
:
project.ext.preDexLibs = !project.hasProperty('disablePreDex')
subprojects {
project.plugins.whenPluginAdded { plugin ->
if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name)) {
project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
} else if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) {
project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
}
}
}
然后你可以使用以下命令构建你的ci:
./gradlew ... -PdisablePreDex
答案 1 :(得分:6)
所以我遇到了同样的问题并且发现即使设置了java和gradle堆大小它们也没有被完全尊重,因为dex任务产生了大量具有自己堆大小的新线程(检查你的内存日志,你可能看到同样的) 如果是这样,我用于Android Gradle插件1.3及以上版本的方法是使用:
-Pcom.android.build.threadPoolSize=1
这将阻止dexing步骤产生一堆新的1G线程。还有:
-Porg.gradle.parallel=false
但是我发现由于某种原因使用multidex时这是无效的。 对于CircleCI,我发现这是最一致的构建任务,如果有点慢。我确信可以进一步调整堆大小以获得更好的结果:
./gradlew build -PpreDexEnable=false -Pcom.android.build.threadPoolSize=1 -Dorg.gradle.parallel=false -Dorg.gradle.jvmargs="-Xms512m -Xmx512m" -Dorg.gradle.daemon=false
答案 2 :(得分:2)
我有同样的问题,这是因为每个容器的内存限制(它是4GB)。 对我来说,解决方案是使用: gradle.properties
org.gradle.jvmargs=-Xms256m -Xmx2048m