2015-02-09 45 views
6

我嘗試使用CircleCI的assembleDebug,但它必須無法構建(preDex)。 爲什麼我不能那樣做?Gradle assembleDebug和preDexDebug失敗,CircleCI

  • 使用ProductFlavor(名稱是生產)
  • Android的搖籃ver.1.1.0-RC1

問題

./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 
+1

嘿,那裏,我爲CircleCI工作。你介意在[email protected]給我們留言,以便我們可以收集有關您項目的更多信息,併爲您提供幫助嗎? – bellkev 2015-02-09 23:03:12

+2

你是否設法解決這個問題?我有同樣的問題。 – maclir 2015-08-04 12:56:42

回答

1

我有同樣的問題,因爲每一個容器中的存儲器限制(它是4GB)它引起的。 對我來說,解決方案是使用: gradle.properties

org.gradle.jvmargs=-Xms256m -Xmx2048m 
8

我有同樣的問題。事實證明,我必須禁用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 
     } 
    } 
} 

然後你就可以建立在使用以下命令你的詞:

./gradlew ... -PdisablePreDex 
5

所以我有同樣的問題,發現儘管Java並且正在設置gradle堆大小,因爲dex任務會產生大量具有自己堆大小的新線程(請檢查您的內存日誌,並且您可能會看到相同的內容),因此它們沒有得到充分的尊重。如果是這樣的話我用修復它爲Android搖籃插件1.3及以上的方法是使用:

-Pcom.android.build.threadPoolSize=1 

這將停止德興步驟產卵一堆新鮮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 
+0

BRILLIANT!我四處搜尋,試圖找出正在發生的事情。這是答案... – Rpranata 2015-12-01 06:08:33