2016-07-05 41 views
9

Attualmente sto utilizzando lo CircleCI per il mio progetto. Inoltre sto implementando il nuovo vincolo Layout nel mio progetto. Ora sono bloccato con l'edificio CircleCI. Mi questo dimostra quando Gradle -dependencies run:CircleCI Android constraintLayout non funziona

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 

Qui è la mia configurazione nel file di .yml:

#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 

ho controllato nel registro generazione quando

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

comando corri e qui è il risultato:

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. 

E il mio percorso di classe è:

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

Non sono sicuro di quello che ho fatto in modo non corretto o c'è qualcosa che devo aggiungere altro. Si prega di suggerire. Grazie.

risposta

2

TL; DR

È necessario copiare le licenze da $ANDROID_HOME/licenses nell'ambiente CircleCI.

È possibile comprimere le licenze e memorizzarla su Dropbox (o qualcosa di simile) e modificare il file circle.yml per scaricare le licenze ed estrarlo in $ANDROID_HOME.

L'ultimo paragrafo dell'errore spiega praticamente esso

Prima di costruire il progetto, è necessario accettare i contratti di licenza e completare l'installazione dei componenti mancanti utilizzando Gestione Android Studio SDK. In alternativa, per informazioni su come trasferire i contratti di licenza da una postazione di lavoro ad un altro, andare a http://d.android.com/r/studio-ui/export-licenses.html

+3

Grazie, ho finalmente trovato il modo per esportare la Licenza di CI con l'aggiunta di questi per le dipendenze pre: - cp -r $ {HOME}/$ {CIRCLE_PROJECT_REPONAME}/android-sdk-license $ ANDROID_HOME - cp -r $ {HOME}/$ {CIRCLE_PROJECT_REPONAME}/android-sdk-preview-license $ ANDROID_HOME Anche io metto android-sdk-license e android-sdk- licenza di anteprima nel mio repository – Jutikorn

+1

Questo è un ottimo consiglio! Ma suggerirei di inserire il contenuto di 'android-sdk-license' e' android-sdk-preview-license' come due variabili d'ambiente Circle CI separate, dato che le vvars sono protette, il che non è necessariamente vero per il vostro Repo VCS. – dbm

+0

@Jutikorn dove posso scaricare anche questo? Ho trovato solo 'android-sdk-license' – Spurdow

1

Questo ha funzionato per me, e controlla anche per le versioni memorizzate nella cache prima:

 
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 

Tratto da this post da CircleCI dipendente drazisil

2

ho lo stesso problema con ConstraintLayout, questo è il mio config lavoro circle.yml

+0

Sto usando il tuo file .yml ma ho ancora lo stesso problema – codevscolor

+0

Finalmente ha funzionato. Ho copiato la cartella delle licenze e ha funzionato :) – codevscolor

2

La risposta di Alex Fu spiega bene dove si trova il problema e come affrontarlo, ma esiste una soluzione più semplice. Poiché i file di licenza sono in realtà solo semplici file con un gruppo di caratteri esadecimali, è possibile crearli semplicemente senza copiare.Un esempio potrebbe essere mettere il seguente codice nella sezione pre::

- 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"