Error de Travis CI porque no puede aceptar la licencia Restringir diseño

Antes de escribir esta pregunta, ya busqué la misma pregunta sobre esto, exportaron licencia porque todavía usan la versión alfa del diseño de restricción. Pero ahora Android ya lanzó una versión estable del diseño de restricciones. Intenté una gran cantidad de configuración, pero aún así fallé.

mi último .travis.yml

 language: android jdk: oraclejdk8 android: components: - platform-tools - tools # to get the new `repository-11.xml` - tools # see https://github.com/travis-ci/travis-ci/issues/6040#issuecomment-219367943) - build-tools-25.0.0 - android-25 # Additional components - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository licenses: - 'android-sdk-preview-license-52d11cd2' - 'android-sdk-license-.+' - 'google-gdk-license-.+' script: - ./gradlew clean build 

y este es mi build.gradle

 apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion '25.0.0' defaultConfig { applicationId "com.package.my" minSdkVersion 16 targetSdkVersion 25 versionCode 6 versionName "1.3.1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dataBinding { enabled = true } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.1' testCompile 'junit:junit:4.12' compile 'com.google.firebase:firebase-database:10.2.0' compile 'com.google.firebase:firebase-messaging:10.2.0' compile 'com.firebaseui:firebase-ui-database:1.2.0' compile 'com.android.support.constraint:constraint-layout:1.0.1' compile 'com.android.support:design:25.0.0' compile 'org.sufficientlysecure:html-textview:3.2' compile 'com.android.support:recyclerview-v7:25.2.0' } apply plugin: 'com.google.gms.google-services' 

con esta configuración obtuve este error

 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: [ConstraintLayout for Android 1.0.1, Solver for ConstraintLayout 1.0.1]. 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 * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 1 mins 55.975 secs The command "./gradlew clean build" exited with 1. Done. Your build exited with 1. 

¿hay alguna solución sin solución alternativa que utilice la licencia de exportación?

Respuesta actualizada

¿hay alguna solución sin solución alternativa que utilice la licencia de exportación?

Sí, puede usar el nuevo sdkmanager para instalar la biblioteca de restricciones y aceptar la licencia :

  - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2" 

De lo contrario, gradle detectará el componente que gradle y lo descargará sin aceptarlo:

  # Show version and download Gradle Wrapper if it's not already cached - cd ${TRAVIS_BUILD_DIR}/${DIR} && ./gradlew --version # Clean project and download missing dependencies and components - cd ${TRAVIS_BUILD_DIR}/${DIR} && ./gradlew clean build 

En ese caso, como se explica a continuación, debe aceptar la licencia la primera vez a través de la solución alternativa.

Ejemplo de trabajo completo que utiliza el repository de código de restricciones del diseño para Android API nivel 22 a 25:

 language: android jdk: oraclejdk8 sudo: required # false for Container-Based Infrastructure, required for Sudo-enabled Infrastructure before_cache: - rm -f ${TRAVIS_BUILD_DIR}/gradle/caches/modules-2/modules-2.lock # Avoid to repack it due locks - rm -f ${TRAVIS_BUILD_DIR}/gradle/caches/3.3/classAnalysis/classAnalysis.lock - rm -f ${TRAVIS_BUILD_DIR}/gradle/caches/3.3/jarSnapshots/jarSnapshots.lock cache: directories: - ${TRAVIS_BUILD_DIR}/gradle/caches/ - ${TRAVIS_BUILD_DIR}/gradle/wrapper/dists/ notifications: email: false android: components: # Cookbooks version: https://github.com/travis-ci/travis-cookbooks/tree/9c6cd11 - tools # Update preinstalled tools from revision 24.0.2 to 24.4.1 - build-tools-25.0.2 # Match build-tools version used in build.gradle - platform-tools # Update platform-tools to revision 25.0.3+ - tools # Update tools from revision 24.4.1 to 25.2.5 env: global: - DIR=constraint-layout-start # Project directory - API=25 # Android API level 25 by default - TAG=google_apis # Google APIs by default, alternatively use default - ABI=armeabi-v7a # ARM ABI v7a by default - QEMU_AUDIO_DRV=none # Disable emulator audio to avoid warning - GRADLE_USER_HOME="${TRAVIS_BUILD_DIR}/gradle" # Change location for Gradle Wrapper and cache - ANDROID_HOME=/usr/local/android-sdk-24.0.2 # Depends on the cookbooks version used in the VM - TOOLS=${ANDROID_HOME}/tools # PATH order matters, exists more than one emulator script - PATH=${ANDROID_HOME}:${ANDROID_HOME}/emulator:${TOOLS}:${TOOLS}/bin:${ANDROID_HOME}/platform-tools:${PATH} - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default) matrix: include: # More Emulator API levels to build in parallel - env: API=24 - env: API=23 - env: API=22 allow_failures: - env: API=23 - env: API=22 fast_finish: false before_install: - export EMULATOR="system-images;android-${API};${TAG};${ABI}" # Used to install/create emulator - echo 'count=0' > /home/travis/.android/repositories.cfg # Avoid warning install: # List and delete unnecessary components to free space - sdkmanager --list || true - sdkmanager --uninstall "system-images;android-15;default;armeabi-v7a" - sdkmanager --uninstall "system-images;android-16;default;armeabi-v7a" - sdkmanager --uninstall "system-images;android-17;default;armeabi-v7a" - sdkmanager --uninstall "system-images;android-18;default;armeabi-v7a" - sdkmanager --uninstall "system-images;android-19;default;armeabi-v7a" - sdkmanager --uninstall "system-images;android-21;default;armeabi-v7a" - sdkmanager --uninstall "extras;google;google_play_services" - sdkmanager --uninstall "extras;android;support" - sdkmanager --uninstall "platforms;android-10" - sdkmanager --uninstall "platforms;android-15" - sdkmanager --uninstall "platforms;android-16" - sdkmanager --uninstall "platforms;android-17" - sdkmanager --uninstall "platforms;android-18" - sdkmanager --uninstall "platforms;android-19" - sdkmanager --uninstall "platforms;android-20" - sdkmanager --uninstall "platforms;android-21" - sdkmanager --uninstall "build-tools;21.1.2" # Update sdk tools to latest version and install/update components - echo yes | sdkmanager "tools" - echo yes | sdkmanager "platforms;android-25" # Latest platform required by SDK tools - echo yes | sdkmanager "platforms;android-${API}" # Android platform required by emulator - echo yes | sdkmanager "extras;android;m2repository" - echo yes | sdkmanager "extras;google;m2repository" - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2" - echo yes | sdkmanager "$EMULATOR" # Install emulator system image # Create and start emulator - echo no | avdmanager create avd -n acib -k "$EMULATOR" -f --abi "$ABI" --tag "$TAG" - emulator -avd acib -engine classic -no-window -camera-back none -camera-front none -verbose -qemu -m 512 & # Start adbd, wait for device connected and show android serial - adb wait-for-device get-serialno # Show version and download Gradle Wrapper if it's not already cached - cd ${TRAVIS_BUILD_DIR}/${DIR} && ./gradlew --version # Clean project and download missing dependencies and components - cd ${TRAVIS_BUILD_DIR}/${DIR} && ./gradlew clean build # Check components status - sdkmanager --list || true before_script: # Wait for emulator fully-booted and disable animations - android-wait-for-emulator - adb shell settings put global window_animation_scale 0 & - adb shell settings put global transition_animation_scale 0 & - adb shell settings put global animator_duration_scale 0 & - sleep 30 - adb shell input keyevent 82 & script: # Run all device checks - cd ${TRAVIS_BUILD_DIR}/${DIR} && ./gradlew connectedCheck after_script: # Show tests and lint results - cat ${TRAVIS_BUILD_DIR}/${DIR}/*/build/outputs/androidTest-results/connected/* - cat ${TRAVIS_BUILD_DIR}/${DIR}/*/build/reports/lint-results.xml 

Dos muestras más utilizando sdkmanager y avdmanager sin la avdmanager ${DIR} :

  • Biblioteca de Android Maps Utils – Google
  • Biblioteca de Dexter – Karumi

Referencias

Documentación oficial relacionada con la descarga automática de paquetes perdidos con Gradle

Las nuevas opciones de Emulator se explican en Iniciar el emulador desde la línea de comandos

avdmanager explica aquí reemplaza android avd desde herramientas SDK versión 25.3.0

sdkmanager explicado aquí también mejorado para ver y aceptar todas las licencias desde la línea de comando


Respuesta anterior: Desde sdkmanager reemplaza script de Android

Estoy un poco desactualizado con Travis-ci y parece que ahora se requiere trabajo adicional, así que es mejor que compruebes:

  • Como lo notó tir38, la herramienta android ya no es compatible. En su lugar, use sdkmanager

  • Problema abierto y soluciones para este tema:

En su archivo .travis.yml , agregue:

 before_install: - mkdir "$ANDROID_HOME/licenses" || true - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" 

No olvides aceptar todas las licencias en el objeto principal de android :

 android: components: # ... licenses: - android-sdk-license-.+ - '.+' 
  • Otro problema relacionado y una solución alternativa:

Si obtiene “Instale los componentes que faltan utilizando el administrador de SDK en Android Studio”. error, puede simplemente instalar el componente que falta con la herramienta de línea de comandos sdkmanager:

 echo y | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.0-beta4" echo y | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.0-beta" 
  • Este artículo explica el problema de la disposición del contraint para Circle-ci y Travis-ci

  • Documentación sobre sdkmanager incluida en el paquete de Herramientas de Android SDK (25.2.3+)


Solución obsoleta: antes de la depreciación del guión de Android

No uso la secuencia de comandos predeterminada de Travis-ci para instalar componentes de Android y aceptar licencias, desde aquí :

 # Install and update SDK function install-and-update-sdk { # Keep SDK packages up-to-date (only missing suggested updates are installed). ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk -u -t \ ${UPDATE_PKGS:-'platform-tools,tools,extra-android-m2repository,extra-google-m2repository'} # Install or reinstall SDK packages (if empty, all packages are installed). ( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) | android update sdk -a -u -t \ ${INSTALL_PKGS:-'build-tools-23.0.3,android-23'},${TARGET_PKGS:-} } 

Puede aceptar todas las licencias al mismo tiempo si lo hace así:

 # THE SETUP STAGE # --------------- # If you comment out this section, Travis CI will install for you the components you define here. # Check your project requirements and the components included by default on Travis-ci VM images. # Check required: https://github.com/google/iosched/blob/master/doc/BUILDING.md # Check defaults: http://docs.travis-ci.com/user/languages/android/#Pre-installed-components android: components: # Check Android SDK tools: http://developer.android.com/tools/sdk/tools-notes.html # Check Android SDK Platform-tools: http://developer.android.com/tools/revisions/platforms.html # Comment the lines below if the latest revisions of Android SDK Tools are included by default. # - tools # - platform-tools # ... licenses: # Check licenses: http://docs.travis-ci.com/user/languages/android/#Dealing-with-Licenses # By default Travis will accept all the licenses, but it's also possible to define a white list: # White list current android-sdk-license revision. # - 'android-sdk-license-5be876d5' # White list all android-sdk-license revisions. # - 'android-sdk-license-.+' # White list all the licenses. - '.+' 

Tuve el mismo problema y el problema fue que estaba usando una versión anterior de las herramientas de comstackción de Android y la versión de Gradle, simplemente actualizarlas a la última versión disponible hizo el truco. Por ejemplo, hoy la última versión de gradle es 3.3, y la última versión de las herramientas de comstackción es 2.3.3. Mi archivo build.gradle se parece a eso

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' } } 

Esto surgió como un problema hace un tiempo https://issuetracker.google.com/issues/37102998 y si vas a las últimas respuestas verás que el problema se solucionó con la actualización de la versión de Gradle y la versión de herramientas de comstackción.

La solución más simple que funcionó para mí fue copiar las licencias de SDK a mi proyecto desde SDK y luego decirle a Travis que se las copie consigo mismo mientras construye.

Ya hay un problema cerrado para esto en la página de Github de Travis y definitivamente una de las soluciones mencionadas actualmente está funcionando.

Solución

  1. Copie la carpeta de licenses encuentra en el directorio raíz de Android SDK.
  2. Pégalo en el directorio raíz de tu propio proyecto en la misma jerarquía donde .travis.yml archivo .travis.yml .
  3. Agregue estos comandos al bloque anterior de instalación de before_install :

.travis.yml :

 before_install: - mkdir "$ANDROID_HOME/licenses" || true - cp ./licenses/* "$ANDROID_HOME/licenses/" 

Enlace exacto a la solución: https://github.com/travis-ci/travis-ci/issues/6617#issuecomment-369580270