2016-07-05 21 views
9

Ich verwende jetzt die CircleCI für mein Projekt. Außerdem implementiere ich das neue constraintLayout in meinem Projekt. Jetzt bin ich mit dem CircleCI Gebäude festgefahren. Es zeigt mir diese, wenn gradle -dependencies Lauf:CircleCI Android constraintLayout funktioniert nicht

File /home/ubuntu/.android/repositories.cfg could not be loaded. 
FAILURE: Build failed with an exception. 

* What went wrong: 
A problem occurred configuring project ':app'. 
> You have not accepted the license agreements of the following SDK components: 
    [com.android.support.constraint:constraint-layout:1.0.0-alpha3, com.android.support.constraint:constraint-layout-solver:1.0.0-alpha3]. 
    Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager. 
    Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html 

Hier ist meine Konfiguration in .yml Datei:

#Install android build tools, platforms 
#Supported versions here https://circleci.com/docs/android 
machine: 
    java: 
     version: openjdk8 
    environment: 
     ANDROID_HOME: /usr/local/android-sdk-linux 

dependencies: 
    pre: 
     - echo y | android list sdk 
     - echo y | android update sdk --no-ui --all --filter "tools" 
     - echo y | android update sdk --no-ui --all --filter "platform-tools" 
     - echo y | android update sdk --no-ui --all --filter "build-tools-24.0.0" 
     - echo y | android update sdk --no-ui --all --filter "android-24" 
     - echo y | android update sdk --no-ui --all --filter "extra-google-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-android-support" 
     - echo y | android update sdk --no-ui --all --filter "extra-android-m2repository" 
     - (./gradlew -version): 
        timeout: 360 
    override: 
     #- ANDROID_HOME=/usr/local/android-sdk-linux ./gradlew dependencies 
     - export TERM="dumb"; if [ -e ./gradlew ]; then ./gradlew clean dependencies -stacktrace;else gradle clean dependencies -stacktrace;fi 

#Pull any submodules 
checkout: 
    post: 
    - git submodule init 
    - git submodule update 

#-PdisablePreDex is a must else gradle just dies due to memory limit 
#Replace 
test: 
    override: 
     - (./gradlew assemble -PdisablePreDex): 
      timeout: 360 
     - cp -r ${HOME}/${CIRCLE_PROJECT_REPONAME}/app/build/outputs/apk/ $CIRCLE_ARTIFACTS 
     - emulator -avd circleci-android22 -no-audio -no-window: 
      background: true 
      parallel: true 
     # wait for it to have booted 
     - circle-android wait-for-boot 
     # run tests against the emulator. 
     - ./gradlew connectedAndroidTest 

#Deploy when tests pass 
deployment: 
    #production: 
    # branch: master 
    # commands: 
    #  - (./gradlew clean assembleRelease crashlyticsUploadDistributionRelease -PdisablePreFex): 
    #   timeout: 720 

    staging: 
     branch: staging 
     commands: 
      - (./gradlew clean assembleStaging crashlyticsUploadDistributionStaging -PdisablePreFex): 
       timeout: 720 

ich im Buildprotokoll überprüft, wenn

echo y | android update sdk --no-ui --all --filter "extra-android-m2repository" 

Befehl run und hier ist das Ergebnis:

November 20, 2015 
Do you accept the license 'android-sdk-license-c81a61d9' [y/n]: 
Installing Archives: 
    Preparing to install archives 
    Downloading Android Support Repository, revision 33 
    Installing Android Support Repository, revision 33 
    Installed Android Support Repository, revision 33 
    Done. 1 package installed. 

Und mein Classpath ist:

classpath 'com.android.tools.build:gradle:2.2.0-alpha4' 

Ich bin nicht sicher, was ich oder ist sie falsch gemacht dort alles, was ich brauche mehr hinzuzufügen. Bitte vorschlagen. Danke.

Antwort

2

TL; DR

Sie müssen die Lizenzen von $ANDROID_HOME/licenses in Ihre CircleCI Umgebung kopieren.

Sie können Ihre Lizenzen zippen und auf Dropbox (oder ähnlichem) speichern und Ihre circle.yml Datei ändern, um die Lizenzen herunterzuladen und sie zu $ANDROID_HOME zu extrahieren.

Der letzte Absatz des Fehlers ziemlich viel es

Bevor Ihr Projekt Aufbau erklärt, müssen Sie die Lizenzvereinbarungen akzeptieren und die Installation der fehlenden Komponenten mit dem Android-Studio SDK-Manager abzuschließen. Alternativ zu lernen, wie die Lizenzvereinbarungen von einem Arbeitsplatz zum anderen zu übertragen, gehen Sie zu http://d.android.com/r/studio-ui/export-licenses.html

+3

Danke, ich fand schließlich den Weg, um die Lizenz zu CI exportieren, indem Sie diesen Abhängigkeiten vor Zugabe: - cp -r $ {HOME}/$ {CIRCLE_PROJECT_REPONAME}/android-sdk-Lizenz $ ANDROID_HOME - cp -r $ {HOME}/$ {CIRCLE_PROJECT_REPONAME}/android-sdk-Vorschau-Lizenz $ ANDROID_HOME ich habe auch android-sdk-Lizenz und android-sdk- Preview-Lizenz in meinem Repo – Jutikorn

+1

Dies ist ein guter Tipp! Aber ich würde vorschlagen, den Inhalt der "android-sdk-license" und "android-sdk-preview-license" als zwei separate Circle CI-Umgebungsvariablen zu verwenden, da die env vars geschützt sind, was nicht unbedingt für Sie gilt VCS Repo. – dbm

+0

@Jutikorn wo kann ich das auch herunterladen? Ich fand nur 'android-sdk-license' – Spurdow

1

Das ist für mich gearbeitet, und prüft auch, ob im Cache gespeicherten Versionen zuerst:

 
dependencies: 
    pre: 
    # Android SDK Platform 24 
    - if [ ! -d "/usr/local/android-sdk-linux/platforms/android-24" ]; then echo y | android update sdk --no-ui --all --filter "android-24"; fi 
    # Android SDK Build-tools, revision 24.0.1 
    - if [ ! -d "/usr/local/android-sdk-linux/build-tools/24.0.1" ]; then echo y | android update sdk --no-ui --all --filter "build-tools-24.0.1"; fi 
    # Android Support Repository, revision 35/Local Maven repository for Support Libraries 
    - if [ ! -d "/usr/local/android-sdk-linux/extras/android/m2repository/com/android/support/design/24.1.0" ]; then echo y | android update sdk --no-ui --all --filter "extra-android-m2repository"; fi 


    cache_directories: 
    - /usr/local/android-sdk-linux/platforms/android-24 
    - /usr/local/android-sdk-linux/build-tools/24.0.1 
    - /usr/local/android-sdk-linux/extras/android/m2repository 

Entnommen this post von CircleCI Mitarbeiter drazisil

2

ich habe gleiches Problem mit ConstraintLayout, das ist mein Arbeits Config circle.yml

+0

Ich benutze Ihre .yml-Datei aber immer noch das gleiche Problem – codevscolor

+0

Schließlich hat es funktioniert. Ich habe den Lizenzordner kopiert und es hat funktioniert :) – codevscolor

2

Alex Fus Antwort erklärt schön, wo das Problem liegt und wie man damit umgeht, aber es gibt eine einfachere Lösung. Da es sich bei den Lizenzdateien nur um einfache Dateien mit vielen Hex-Zeichen handelt, können Sie diese einfach erstellen, ohne sie zu kopieren.Ein Beispiel des folgenden Code in den pre: Abschnitt setzen wäre:

- ANDROID_HOME=/usr/local/android-sdk-linux 
- mkdir "$ANDROID_HOME/licenses" || true 
- echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" 
- echo "84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" 
- echo "d975f751698a77b662f1254ddbeed3901e976f5a" > "$ANDROID_HOME/licenses/intel-android-extra-license"