2015-02-09 21 views
6

Próbowałem użyć assembleDebug przy użyciu CircleCI, ale nie udało się go skompilować (preDex). Dlaczego nie mogę tego zrobić?Gradle assembleDebug i preDexDebug nie powiodły się z CircleCI

  • Stosując ProductFlavor (nazwa produkcji)
  • Android Gradle ver.1.1.0-RC1

problem

./gradlew assembleProductionDebug zmarł nieoczekiwanie Budowa 92% 3% > : aplikacja: preDexProductionDebugaction ./gradlew assembleProductionDebug nieudane

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

Hej, pracuję dla CircleCI. Czy chcesz nam powiedzieć o tym na stronie [email protected], abyśmy mogli zebrać trochę więcej informacji na temat twojego projektu i sprawić, że wszystko będzie działać? – bellkev

+2

Udało ci się to rozwiązać? Mam ten sam problem. – maclir

Odpowiedz

1

miałem sam problem był spowodowany od ograniczeń pamięci na pojemniku (to jest 4 GB). Dla mnie rozwiązaniem było zastosowanie: gradle.properties

org.gradle.jvmargs=-Xms256m -Xmx2048m 
8

miałem ten sam problem. Okazało się, że muszę wyłączyć preDex dla kompilacji ci.

Umieścić to w korzeniabuild.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 
     } 
    } 
} 

Następnie można zbudować na swojej CI za pomocą następującego polecenia:

./gradlew ... -PdisablePreDex 
5

więc miałem ten sam problem i znaleźć choć java i ustawiano gradacje wielkości sterty, które nie były w pełni respektowane, ponieważ zadania dex odradzają mnóstwo świeżych wątków z ich własną wielkością sterty (sprawdź dziennik pamięci i możesz zobaczyć to samo) Jeśli tak, Metoda I stosuje się do mocowania go do Androida Gradle wtyczki 1.3 i powyżej użyć:

-Pcom.android.build.threadPoolSize=1 

ten zatrzyma etap Dexing tarła masę świeżych nici 1g. Istnieje również:

-Porg.gradle.parallel=false 

Ale okazało się, że jest to nieskuteczne, jeśli z jakiegoś powodu korzystamy z wielościeżkowego. Dla CircleCI uważam to za najbardziej spójne zadanie kompilacji, jeśli trochę powolne. Jestem pewien, że rozmiary sterty mogą zostać nieco poprawione, aby uzyskać lepsze wyniki:

./gradlew build -PpreDexEnable=false -Pcom.android.build.threadPoolSize=1 -Dorg.gradle.parallel=false -Dorg.gradle.jvmargs="-Xms512m -Xmx512m" -Dorg.gradle.daemon=false 
+0

BRILLIANT! Szukałem go, próbując dowiedzieć się, co się dzieje. To jest odpowiedź ... – Rpranata

Powiązane problemy