android - tools - Acepta automáticamente todas las licencias de SDK
you have not accepted the license agreements of the following sdk components (30)
Desde gradle android plugins 2.2-alpha4 :
Gradle intentará descargar los paquetes de SDK faltantes 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 del SDK, debe: aceptar los acuerdos de licencia o Gradle le dice:
No ha aceptado los acuerdos de licencia de los siguientes componentes del SDK: [Android SDK Build-Tools 24, Android SDK Platform 24]. Antes de crear su proyecto, debe aceptar los acuerdos de licencia y completar la instalación de los componentes que faltan con el Administrador de Android Studio SDK. 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 fue 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 de Gradle hacerlo.
[EDITAR 2]
Una mejor solución es usar el sdkmananger:
yes | sdkmanager --licenses
A partir de
julio de 2019
, el método más fácil es usar:
flutter doctor --android-licenses
en el símbolo del sistema.
Continúa mostrando los T&C no aceptados de los SDK uno por uno y tiene la opción de elegir ''y / n''. Elige y para todos.
Alternativamente, cuando ejecuta
flutter doctor
, ejecutará el diagnóstico de la cadena de herramientas de Android que muestra cuántas licencias aún no se aceptan, y le sugiere que lo ejecute con el indicador --android-licenss.
AndroidSDK finalmente puede aceptar licencias.
yes | sdkmanager --licenses
EDITAR:
Como se señaló en los comentarios de @MoOx, en macOS, puede hacer
yes | sudo ~/Library/Android/sdk/tools/bin/sdkmanager --licenses
como se señaló en los comentarios de @pho, @mikebridge y @ Noitidart en Windows, puede hacer
cmd.exe ""/K"%LocalAppData%/Android/sdk/tools/bin/sdkmanager.bat --licenses"
asegúrese de instalar java antes
Aquí está mi configuración de Docker.
Puede seguir desde un entorno Linux simple.
Tenga en cuenta que
yes |
y
--licenses --sdk_root=${ANDROID_HOME}
cláusulas.
Parece
sdkmanager --update
acuerdos, entonces
yes |
aparece dos veces
FROM openjdk:8
# Install dev-essential(gnumake)
RUN apt update
RUN apt install -y build-essential
# Set ENV
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip" /
ANDROID_HOME="/usr/local/android-sdk" /
ANDROID_VERSION=28 /
ANDROID_BUILD_TOOLS_VERSION=28.0.3 /
GRADLE_VERSION=4.10.3 /
NDK_VERSION=r16b
# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android /
&& cd "$ANDROID_HOME" /
&& curl -o sdk.zip $SDK_URL /
&& unzip sdk.zip /
&& rm sdk.zip /
&& yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses --sdk_root=${ANDROID_HOME}
# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" /
"platforms;android-${ANDROID_VERSION}" /
"platform-tools" --sdk_root=${ANDROID_HOME}
# Install Gradle
RUN wget https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip
RUN mkdir /opt/gradle
RUN unzip gradle-${GRADLE_VERSION}-all.zip -d /opt/gradle
ENV PATH=${PATH}:/opt/gradle/gradle-${GRADLE_VERSION}/bin
# Install NDK
RUN wget https://dl.google.com/android/repository/android-ndk-${NDK_VERSION}-linux-x86_64.zip
RUN mkdir /opt/ndk-bundle
RUN unzip android-ndk-${NDK_VERSION}-linux-x86_64.zip -d /opt/ndk-bundle
ENV PATH=${PATH}:/opt/ndk-bundle
RUN mkdir /application
WORKDIR /application
Copie el directorio / licencias completo y péguelo en el directorio de inicio del SDK de Android 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í
Corro
#react-native run-android
desde la terminal y se encontró con ese problema. Para manualmente, vaya a Android Studio -> Android SDK -> SDK Platform Haga clic en Mostrar detalles de paquetes y verifique:
+ Google APIs
+ Android SDK Platform 23
+ Intel x86 Atom_64 System Image
+ Google APIs Intel x86 Atom_64 System Image
Cuando instale paquetes, marque aceptar licencia => puede resolver el problema.
Desafortunadamente, la forma en que OP resolvió originalmente no siempre funciona. Si encuentra en el mensaje de error cuál es su versión actual de herramientas de compilación de compilaciones . Podría ser que falta una versión superior de herramientas de compilación. En ese caso, debe iniciar manualmente SDK Manager y agregar las herramientas de compilación y aceptar la licencia.
Según las instrucciones de OP, se ve de la siguiente manera.
$ ./gradlew build
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html. 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: [Android SDK Build-Tools 24.0.2]. ... BUILD FAILED
NOTA: 2017-04-16
La herramienta de
android
ahora ha quedado en desuso en favor del nuevosdkmanager
. Consulte la answer 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
Refresh Sources: Fetching https://dl.google.com/android/repository/addons_list-2.xml Validate XML Parse XML Fetched Add-ons List successfully Refresh Sources Fetching URL: https://dl.google.com/android/repository/repository-11.xml Validate XML: https://dl.google.com/android/repository/repository-11.xml Parse XML: https://dl.google.com/android/repository/repository-11.xml ... Error: Ignoring unknown package filter ''build-tools-24.0.2'' ------------------------------- License id: android-sdk-license-xxxxxxxx Used by: - SDK Platform Android 7.0, API 24, revision 2 - Android Support Repository, revision 39 ------------------------------- ... November 20, 2015 Do you accept the license ''android-sdk-license-xxxxxxxx'' [y/n]: y Installing Archives: Preparing to install archives Downloading SDK Platform Android 7.0, API 24, revision 2 Installing SDK Platform Android 7.0, API 24, revision 2 Installed SDK Platform Android 7.0, API 24, revision 296%) Downloading Android Support Repository, revision 39 Installing Android Support Repository, revision 39 Installed Android Support Repository, revision 3999%) Done. 2 packages installed.
Ejecutando esto de nuevo, aún no hace feliz a Gradle. Por lo tanto, la aceptación manual es la única solución hasta que alguien presente algo mejor. (¡Por favor, hazlo!)
En Mac OSX, navegue hasta
sdk/tools/bin
Luego ejecute
./sdkmanager --licenses
y acepte todas las licencias.
En Windows PowerShell, puedes 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 licencias, pero se puede aumentar si es necesario
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:
yes | sdkmanager --update
yes | sdkmanager --update
que acepta licencias para el propio sdkmanager, y luego
yes | sdkmanager --licenses
yes | sdkmanager --licenses
que aceptan nuevas licencias no aceptadas previamente
Recuerde: ejecute estos comandos con el mismo usuario que
jenkins
.
En nuestro Debian, el usuario de Jenkins es simplemente 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 suyo no está allí,
find / -name "sdkmanager"
con
find / -name "sdkmanager"
Finalmente encontré una solución en Windows, para tener una instalación realmente silenciosa y automática:
En Windows, la siguiente sintaxis no funciona:
echo y | sdkmanager --licenses
Parece que la "y" no se envió correctamente al programa Java llamado en el lote.
La solución alternativa es crear un archivo file-y.txt con varias "y", una por línea, y 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
He encontrado esto 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 actual
$ANDROID_HOME/license
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 hashes son partes del texto de la licencia, que imagino se actualizarán periódicamente, por lo que este código solo funcionará durante un tiempo :)
E instálelo manualmente, pero es el nuevo propósito de la función de Gradle hacerlo.
Al principio me sorprendió que esto no funcionara de inmediato, incluso cuando había aceptado las licencias para los componentes nombrados a través de la herramienta de
android
, pero me señalaron que es el administrador de SDK dentro de AS el que crea la carpeta
/licenses
.
Supongo que las herramientas oficiales no querrían omitir este paso por razones legales.
Al releer las notas de la versión que dice
Descarga automática de SDK: Gradle intentará descargar los paquetes de SDK faltantes de los que depende un proyecto.
Lo que no significa que funcionará si aún no ha instalado las herramientas de Android y ya ha aceptado las últimas licencias.
EDITAR: Dicho esto, todavía no funciona en mi cuadro de prueba de gubuntu hasta que enlace el SDK a AS. Sin embargo, CI funciona bien, no estoy seguro de cuál es la diferencia ...
La herramienta de
android
está en desuso y, en su lugar, debe usar el
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 que el archivo de licencia finalice 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 codificación base64 en su lugar.
Entonces 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"
Le pedirá que acepte la licencia.
Después de aceptarlo, lo copiará a
${ANDROID_HOME}/licenses/android-sdk-license
.
Para asegurarse de obtener siempre exactamente 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 el esperado ejecutando un sha1sum en él.
$> sha1sum ${ANDROID_HOME}/licenses/android-sdk-license
da6b80c9c47b41c0bf7032938e7137a58a3dc249
Ok PARA ALGUIEN QUE TIENE ESTE NÚMERO A PARTIR DE 2018. Las respuestas anteriores NO me funcionaron en absoluto. Lo que sí funcionó fue abrir Android SDK: hacer clic en el botón DESCARGAR en la barra de herramientas y seleccionar los paquetes apropiados. Una vez que finalicen la descarga, le permitirá aceptar el acuerdo de licencia.
PARA APLICACIONES NATIVAS REACT:
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/
Para aquellos que tienen problemas con el SDK de línea de comandos, la razón por la que no encontrarán las licencias que han 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.
Para el nuevo Android Studio (2.3), la mejor manera de actualizar / aceptar todas las licencias es ejecutar:
tools/bin/sdkmanager --licenses
Es posible que aún necesite copiar los archivos de licencia a otras ubicaciones según su configuración.
Para la nueva utilidad
sdkmanager
:
yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;24.0.3"
Hay un poco de retraso entre sí, por lo que el comando podría colgarse con la licencia mostrando por un tiempo, pero no requiere intervención humana.
Para un mensaje de error sobre la API número 25 del SDK:
android update sdk --no-ui --all --filter build-tools-25.0.1,android-25,extra-android-m2repository
Puede aceptar toda la licencia ejecutando el siguiente comando:
sdkmanager --licenses
Esto lo llevará a través de cada licencia que aún no ha aceptado y puede ingresar
y
para aceptar cada una de ellas.
Resolví este problema creando un repositorio público de git con los archivos de licencia aceptados.
Luego uso
wget
para obtener estas licencias en cualquier máquina que necesite en un directorio
[sdk-dir] /
licensias
antes de ejecutar
./gradlew
para construir mi proyecto.
Si está utilizando Jenkins, puede usar el siguiente script bash como primer paso en el proceso de compilació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. La suspensión es para evitar la línea de lectura rota en el programa de instalación, ya que "sí" no funciona correctamente en este caso.
EDITAR: También debe agregar el complemento "Instalar requisitos previos del proyecto Android" en el paso de compilación para obtener el $ ANDROID_HOME correcto si está utilizando el administrador SDK integrado.
Si usa
tools/bin/sdkmanager --licenses
, aún necesita tener una interacción humana.
Tengo el problema al usar mi CI de 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á sí si hay alguna pregunta, pero necesita hacer una línea por paquete de instalación
También puedes simplemente ejecutar:
$ANDROID_HOME/tools/bin/sdkmanager --licenses
Y en Windows, ejecute:
%ANDROID_HOME%/tools/bin/sdkmanager --licenses
Tenga en cuenta que para cualquier persona que llegue a esta pregunta actualmente, build-tools-24.0.2 ahora (creo) ahora se considera obsoleto, 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á en Linux de 32 bits, todo después de las herramientas de compilación 23.0.1 es solo de 64 bits , por lo que no se ejecutará. Los usuarios de 32 bits están atascados en 23.0.1, la única forma de obtener herramientas de compilación posteriores es cambiar a 64 bits.
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 estaba llamando a los archivos instalados a través de
apt
lugar de los archivos en mi directorio de inicio.
Funcionó una vez que cambié la ruta al 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
.
Yo navego a:
/usr/lib/android-sdk/licenses
y escribí en la terminal:
echo -e "/n8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_SDK/licenses/android-sdk-license"
Con permiso de root. Y funciona para mí ahora.
esto resolvió mi error
echo yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
para Windows, abra cmd e ingrese al directorio
bin
ejecutando el comando:
cd C:/Users/username/AppData/Local/Android/sdk/tools/android/Sdk/tools/bin
luego ejecute el comando
sdkmanager --licenses
, se le pide que acepte las licencias.
si corres
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, debe 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
cd $ANDROID_HOME/tools/bin yes | ./sdkmanager --update
o
yes | $ANDROID_HOME/tools/bin/sdkmanager --update