sug*_*ada 6 android gradle circleci
我尝试assembleDebug
使用CircleCI,但它必须无法构建(preDex).为什么我不能这样做?
问题
./gradlew assembleProductionDebug意外死亡构建92%3%>:app:preDexProductionDebugaction ./gradlew assembleProductionDebug failed
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
Run Code Online (Sandbox Code Playgroud)
我遇到过同样的问题.事实证明,我必须为ci版本禁用preDex.
把它放在根目录中 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令构建ci:
./gradlew ... -PdisablePreDex
Run Code Online (Sandbox Code Playgroud)
小智 6
所以我遇到了同样的问题并且发现即使设置了java和gradle堆大小它们也没有被完全尊重,因为dex任务产生了大量具有自己堆大小的新线程(检查你的内存日志,你可能会看到相同的)如果是这样,我用来修复Android Gradle插件1.3及以上版本的方法是使用:
-Pcom.android.build.threadPoolSize=1
Run Code Online (Sandbox Code Playgroud)
这将阻止dexing步骤产生一堆新的1G线程.还有:
-Porg.gradle.parallel=false
Run Code Online (Sandbox Code Playgroud)
但是我发现由于某种原因使用multidex时这是无效的.对于CircleCI,我发现这是最一致的构建任务,如果有点慢.我确信可以进一步调整堆大小以获得更好的结果:
./gradlew build -PpreDexEnable=false -Pcom.android.build.threadPoolSize=1 -Dorg.gradle.parallel=false -Dorg.gradle.jvmargs="-Xms512m -Xmx512m" -Dorg.gradle.daemon=false
Run Code Online (Sandbox Code Playgroud)
小智 2
我遇到了同样的问题,这是由于每个容器的内存限制(它是 4GB)引起的。对我来说,解决方案是使用:gradle.properties
org.gradle.jvmargs=-Xms256m -Xmx2048m
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3088 次 |
最近记录: |