Aceptar automáticamente todas las licencias de SDK

Desde los plugins Android 2.2 de Gradle :

Gradle intentará descargar los paquetes faltantes de SDK de los que depende un proyecto

Lo cual es increíblemente genial y se sabía que era un proyecto de JakeWharton .

Pero, para descargar la biblioteca de SDK, debe: aceptar los acuerdos de licencia o gradle le dice:

No ha aceptado los acuerdos de licencia de los siguientes componentes de SDK: [Android SDK Build-Tools 24, Android SDK Platform 24]. Antes de construir su proyecto, debe aceptar los acuerdos de licencia y completar la instalación de los componentes que faltan utilizando el Administrador de SDK de Android Studio. Alternativamente, para aprender cómo transferir los acuerdos de licencia de una estación de trabajo a otra, vaya a http://d.android.com/r/studio-ui/export-licenses.html

Y esto es un problema porque me encantaría instalar todas las dependencias de gradle build mientras hago una gradle build .

Estoy buscando una solución para aceptar automáticamente todas las licencias. Tal vez un guión gradle? Tienes alguna idea ?

¡Gracias!

[EDITAR]

Una solución era ejecutar:

 android update sdk --no-ui --filter build-tools-24.0.0,android-24,extra-android-m2repository 

E instálelo manualmente, pero es el nuevo propósito de la función gradle para hacerlo.

[EDIT 2]

Una mejor solución es usar el sdkmananger:

 yes | sudo sdkmanager --licenses 

Me he encontrado con la alpha5 previa alpha5 .

Jake Wharton me señaló que actualmente puedes usar

 mkdir -p "$ANDROID_SDK/licenses" echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license" echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK/licenses/android-sdk-preview-license" 

para recrear la carpeta $ANDROID_HOME/license actual en su máquina. Esto tendría el mismo resultado que el proceso descrito en el enlace del mensaje de error ( http://tools.android.com/tech-docs/new-build-system/license ).

Los hash son los mismos del texto de la licencia, que imagino que se actualizarán periódicamente, por lo que este código solo funcionará durante tanto tiempo 🙂

E instálelo manualmente, pero es el nuevo propósito de la función gradle para hacerlo.

Al principio me sorprendió que esto no funcionara, incluso cuando había aceptado las licencias para los componentes nombrados a través de la herramienta de android , pero me dijeron que es el administrador de SDK dentro de AS que crea la carpeta /licenses .

Supongo que las herramientas oficiales no querrían omitir este paso por razones legales.

Releyendo las notas de la versión declara

Descarga automática de SDK: Gradle intentará descargar los paquetes faltantes de SDK de los que depende un proyecto.

Lo cual no significa que funcionará si aún no ha instalado las herramientas de Android y ya ha aceptado la (s) última (s) licencia (s).

EDITAR: Diciendo eso, todavía no funciona en mi cuadro de prueba gubuntu hasta que enlace el SDK hasta AS. Sin embargo, CI funciona bien; no estoy seguro de cuál es la diferencia …

AndroidSDK finalmente puede aceptar licencias.

 yes | sdkmanager --licenses 

Para el último Android Studio (2.3), la mejor forma de actualizar / aceptar todas las licencias es ejecutar:

 tools/bin/sdkmanager --licenses 

es posible que aún tenga que copiar los archivos de licencia a otras ubicaciones según su configuración.

Si está usando Jenkins, puede usar el siguiente script bash como primer paso en el proceso de comstackción:

 (while sleep 3; do echo "y"; done) | $ANDROID_HOME/tools/android update sdk -u 

Por supuesto, esto instalará TODAS las actualizaciones disponibles, pero le ahorrará algo de tiempo si puede ahorrar espacio en el disco. El sueño es evitar la línea de lectura interrumpida en el progtwig de instalación, ya que “sí” no funciona correctamente en este caso.

EDITAR: También necesita agregar el complemento “Instalar prerrequisitos de proyecto de Android” en el paso de comstackción para obtener el $ ANDROID_HOME correcto si está utilizando el administrador de SDK integrado.

Para la nueva utilidad sdkmanager :

yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;24.0.3"

Hay un poco de retraso entre los yesses, por lo que el comando podría bloquearse con la licencia que se muestra por un tiempo, pero no requiere intervención humana.

Desafortunadamente, la forma en que OP resolvió originalmente no siempre funciona. Si encuentra en el mensaje de error cuál es la versión actual de sus herramientas de comstackción, comstack . Podría ser que es una versión más alta de las herramientas de comstackción que falta. En ese caso, debe iniciar manualmente el Administrador de SDK y agregar las herramientas de comstackción y aceptar la licencia.

Según las instrucciones OP, se ve de la siguiente manera.

$ ./gradlew build

 
 Para respetar la configuración de JVM para esta comstackción, se bifurcará una nueva JVM.  Considere utilizar el daemon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html.

 FALLO: la comstackción falló con una excepción.

 * Qué salió mal:
 Se ha producido un problema al configurar el proyecto ': aplicación'.
 > No ha aceptado los acuerdos de licencia de los siguientes componentes de SDK:
   [Android SDK Build-Tools 24.0.2].

 ...
 CONSTRUCCIÓN FALLIDA

NOTA: 2017-04-16

La herramienta de android ahora ha quedado en desuso en favor del nuevo sdkmanager . Consulte la respuesta de Joe Lawson y las publicaciones posteriores de marzo (2017) en adelante.

Luego ajuste su comando de la siguiente manera:

 android update sdk --no-ui --filter build-tools-24.0.2,android-24,extra-android-m2repository 
 Refrescar fonts:
   Obteniendo https://dl.google.com/android/repository/addons_list-2.xml
   Validar XML
   Parse XML
   Obtenido lista de complementos exitosamente
   Actualizar fonts
   Obteniendo URL: https://dl.google.com/android/repository/repository-11.xml
   Validar XML: https://dl.google.com/android/repository/repository-11.xml
   Parse XML: https://dl.google.com/android/repository/repository-11.xml
 ...
 Error: Ignorando el filtro de paquete desconocido 'build-tools-24.0.2'
 -------------------------------
 Identificación de la licencia: android-sdk-license-xxxxxxxx
 Usado por: 
  - SDK Platform Android 7.0, API 24, revisión 2
   - Repositorio de soporte de Android, revisión 39
 -------------------------------

 ...

 20 de noviembre de 2015
 ¿Acepta la licencia 'android-sdk-license-xxxxxxxx' [y / n]: y

 Instalación de archivos:
   Preparación para instalar archivos
   Descargando SDK Platform Android 7.0, API 24, revisión 2
   Instalación de SDK Platform Android 7.0, API 24, revisión 2
     Plataforma SDK instalada Android 7.0, API 24, revisión 296%)
   Descarga del repository de soporte de Android, revisión 39
   Instalación del repository de soporte de Android, revisión 39
     Repositorio de soporte de Android instalado, revisión 3999%)
   Hecho.  2 paquetes instalados.

Ejecutando esto de nuevo, todavía no hace feliz a Gradle. Entonces la aceptación manual es la única solución hasta que alguien encuentre algo mejor. (¡Por favor, hazlo!)

La herramienta de android está en desuso y en su lugar debe usar sdkmanager . sdkmanager también escribe el archivo de licencias cuando lo acepta por primera vez. La licencia cambia según el SDK que esté utilizando, aunque el comando

 echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license" 

funciona en algunos sistemas. No funcionará en todos. Algunas instalaciones de SDK esperan licenciar el archivo para finalizar sin una nueva línea en el archivo, así que intente agregar un -n al comando echo.

 echo -n -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license" 

Si eso no funciona, puede intentar usar la encoding base64 en su lugar.

Para descubrir mi licencia:

 $> rm ${ANDROID_HOME}/ $> unzip tools_r25.2.3-linux.zip -d ${ANDROID_HOME} $> ${ANDROID_HOME}/tools/bin/sdkmanager "system-images;android-23;default;x86_64" 

Te pedirá que aceptes la licencia. Después de aceptar, lo copiará a ${ANDROID_HOME}/licenses/android-sdk-license . Para asegurarse de obtener siempre lo que está escrito, use base64 .

 $> base64 ${ANDROID_HOME}/licenses/android-sdk-license Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU= 

Entonces puede usar base64 -d recrear el archivo exactamente.

 $> echo Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU= | base64 -d > ${ANDROID_HOME}/licenses/android-sdk-license 

Puede verificar si el archivo escrito es lo que se espera ejecutando un sha1sum en él.

 $> sha1sum ${ANDROID_HOME}/licenses/android-sdk-license da6b80c9c47b41c0bf7032938e7137a58a3dc249 

esto resolvió mi error

 echo yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2" 

si ejecuta yes | sdkmanager --licenses yes | sdkmanager --licenses , luego imprimimos contenido de $ANDROID_HOME/licenses/android-sdk-license ,

conseguiremos esto

 # cat $ANDROID_HOME/licenses/android-sdk-license 8933bad161af4178b1185d1a37fbf41ea5269c55 d56f5187479451eabf01fb78af6dfcb131a6481e 

Para GitLab CI, para aceptar las licencias de Android SDK Build-Tools 26.0.2, necesita ejecutar esto

 before_script: - mkdir -p $ANDROID_HOME/licenses - echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_HOME/licenses/android-sdk-license - echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> $ANDROID_HOME/licenses/android-sdk-license 

Tenga en cuenta que, para cualquier persona que llegue a esta pregunta actualmente, build-tools-24.0.2 es (creo) ahora considerada obsoleta, por lo que obtendrá:

  Error: Ignoring unknown package filter 'build-tools-24.0.2' 

al ejecutar los diversos comandos que se han sugerido para instalarlos.

La solución es agregar --all :

 android update sdk --no-ui --all --filter "build-tools-24.0.2" 

Además, si estás en 32 bits de Linux, todo lo que hay después de las herramientas de comstackción 23.0.1 es solo de 64 bits , por lo que no se ejecutará. Los usuarios de 32 bits están bloqueados en 23.0.1, la única forma de obtener herramientas de comstackción posteriores es cambiar a 64 bits.

Encontramos el mismo problema al construir el proyecto en Jenkins. Con buildToolsVersion '25.0.2' , debemos aceptar licencias antes de construir. En nuestro caso, necesitábamos ejecutar:

./sdkmanager --update que nos solicita aceptar una licencia para el sdkmanager, y luego

./sdkmanager --licenses que nos piden aceptar nuevas licencias no aceptadas previamente

Recuerda: ejecuta estos comandos con el mismo usuario que jenkins . En mi Debian, el usuario de Jenkins es solo jenkins . En otras palabras: hacerlo como root creará las licencias aceptadas como root , por lo que Jenkins no las leerá.

Por cierto, encontramos sdkmanager en /var/lib/jenkins/tools/android-sdk/tools/bin . Si el tuyo no está allí, find / -name "sdkmanager" con find / -name "sdkmanager"

Para obtener un mensaje de error sobre SDK api número 25:

android update sdk --no-ui --all --filter build-tools-25.0.1,android-25,extra-android-m2repository

Si usa tools/bin/sdkmanager --licenses , aún necesita tener una interacción humana. Tengo el problema al usar mi CI gitlab. Esta es mi solución:

 wget --quiet --output-document=tools.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip unzip -qq tools.zip echo y | tools/bin/sdkmanager "platforms;android-25" echo y | tools/bin/sdkmanager "platform-tools" echo y | tools/bin/sdkmanager "build-tools;25.0.2" echo y | tools/bin/sdkmanager "extras;android;m2repository" echo y | tools/bin/sdkmanager "extras;google;m2repository" 

echo y dirá que sí si hay alguna pregunta, pero necesita hacer una línea por paquete de instalación

Resolví este problema creando un repository de git público con los archivos de licencia aceptados. Luego uso wget para obtener estas licencias en cualquier máquina que necesite en un directorio [sdk-dir] / licenses antes de ejecutar ./gradlew para construir mi proyecto.

OK PARA CUALQUIERA QUE TENGA ESTE NÚMERO A PARTIR DEL 2018. Las respuestas anteriores NO funcionaron para mí en absoluto. Lo que hizo DID fue abrir Android SDK: hacer clic en el botón DESCARGAR en la barra de herramientas y seleccionar los paquetes adecuados. Después de que finalicen la descarga, le permitirá aceptar el acuerdo de licencia.

enter image description here

Tuve el mismo error al usar Cordova.

El problema se debió al hecho de que instalé Android Sdk a través de Android Studio y a través de apt con apt install android-sdk adb . Y Cordova llamaba a los archivos instalados a través de apt lugar de los archivos en mi directorio personal.

Funcionó una vez que cambié el camino a SDK en bash:

 # Change path export ANDROID_HOME="$HOME/Android/Sdk/" echo "Android home = $ANDROID_HOME" # Accept licenses eval "${ANDROID_HOME}/tools/bin/sdkmanager --licenses" # Run Cordova cordova build android 

Luego eliminé los archivos del sistema que ya no se usaban: apt remove android-sdk adb .

Puede aceptar toda la licencia ejecutando el siguiente comando:

  sdkmanager --licenses 

Esto le indicará cada una de las licencias que aún no ha aceptado y solo puede ingresar y aceptar cada una de ellas.

También puedes simplemente ejecutar

$ ANDROID_HOME / tools / bin / sdkmanager –licenses

O para ejecutar en Windows

% ANDROID_HOME% / tools / bin / sdkmanager –licenses

Para aquellos que tienen problemas con el SDK de línea de comando, la razón por la que no encontrará las licencias que ha aceptado es porque se han escrito en una ubicación diferente a $ANDROID_HOME/licenses que es donde deben estar.

Encontré que la solución más fácil era aceptar las licencias de esta manera:

$ANDROID_HOME/bin/sdkmanager --licenses --sdk_root=$ANDROID_HOME

Nota: Esto supone que ha configurado ANDROID_HOME para que apunte a donde esté instalado su sdk.

Copie todo el directorio de licencias / y péguelo en el directorio de inicio de Android SDK en la máquina donde desea construir sus proyectos.

https://developer.android.com/studio/intro/update.html#download-with-gradle

esto resolvió el problema para mí

En Windows PowerShell, puede hacer

 for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | sdkmanager --licenses 

Esto es mucho más flexible y no requiere intervención manual. El número 30 es arbitrario, debería ser suficiente para cubrir el número de aceptaciones de licencia, pero puede boostse si es necesario

cd $ ANDROID_HOME / tools / bin ./sdkmanager –actualizar

Corro

 #react-native run-android 

desde la terminal y se encontró con ese problema. Para acceder manualmente, vaya a Android Studio -> Android SDK -> Plataforma SDK Haga clic en Mostrar detalles de paquetes y compruebe:

 + Google APIs + Android SDK Platform 23 + Intel x86 Atom_64 System Image + Google APIs Intel x86 Atom_64 System Image 

Cuando instale paquetes, marque accept license => para resolver el problema.

En Mac OSX, navegue a sdk/tools/bin

Luego ejecute ./sdkmanager --licenses , y acepte todas las licencias.

Finalmente encontré una solución en Windows, para tener una verdadera instalación silenciosa y automática:

En Windows, la siguiente syntax no funciona:

 echo y | sdkmanager --licenses 

Parece que la “y” no se envía correctamente al progtwig java llamado en el lote.

La solución consiste en crear un archivo file-y.txt con varias “y”, una por línea, y para usar

 call sdkmanager --licenses < file-y.txt 

Esto creará los archivos necesarios en el directorio de licencias. El problema probablemente esté relacionado con el uso de BufferedReader en Java

Hay 2 enfoques que puedo encontrar para este problema.

  1. Actualice las herramientas de SDK con la ventana de comandos aceptando el acuerdo de licencia de la siguiente manera, simplemente cambie la versión de acuerdo con sus necesidades.

    android update sdk –no-ui –filter build-tools-25.0.2, android-25, extra-android-m2repository

  2. El segundo enfoque es copiar las carpetas de licencias al directorio raíz de Android. Vaya a su máquina de desarrollo abra Android Studio. Encuentre su ubicación de SDK desde el menú Estructura del proyecto. (C: \ Users \ UserName \ AppData \ Local \ Android \ sdk). Debajo de ese directorio debe haber una carpeta de licencia. Copia esa carpeta con el contenido. Pegue esa carpeta en su máquina servidor Jenkins (o donde se encuentre con este problema) en la carpeta raíz de Android SDK. (C: \ Users \ UserName.jenkins \ tools \ android-sdk)

Finalmente, estos 2 pasos simples funcionaron para mí en Windows 10.

1) Asegúrese de actualizar sus herramientas de comstackción de Android y api. En su Sdk de Android Simplemente haga clic en instalar paquetes para instalar las actualizaciones disponibles.

2) Inicie su Android Studio y se le pedirá que instale las herramientas de comstackción necesarias para la API y las herramientas ya actualizadas. Esto instalará las propiedades de las herramientas de comstackción, incluidas las licencias y su finalización.

Navego a:

 /usr/lib/android-sdk/licenses 

y escribí el terminal:

 echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_SDK/licenses/android-sdk-license" 

Con permiso de root. Y funciona para mí ahora.

PARA LAS APLICACIONES NATIVAS DE REACCIÓN:

Si tiene este problema para una aplicación React Native, además de los pasos mencionados anteriormente, asegúrese de tener el archivo local.properties en el directorio de Android (AppName / android) de su aplicación que apunta a su directorio ‘sdk’:

 sdk.dir=/PATH_TO_SDK/ 

Intenté todo el comando anterior en la máquina con Windows 10, pero la solución fue usar el SDKMANAGER para verificar y aceptar licencias, comprar instalando las versiones faltantes.

enter image description here