Accepter automatiquement toutes les licences SDK
depuis gradle android plugins 2.2-alpha4 :
Gradle tentera de télécharger les paquets SDK manquants qu'un projet dépend de
qui est étonnamment cool et était connu pour être un JakeWharton project .
mais, pour télécharger la bibliothèque SDK vous devez: accepter les accords de licence ou Grad vous dit:
vous n'avez pas accepté les accords de licence du SDK suivant composants :[ Android SDK Build-Tools 24, Android SDK Platform 24]. Avant de construire votre projet, vous devez accepter la licence accords et effectuer l'installation des composants manquants utiliser le Gestionnaire de SDK Android Studio. Alternativement, pour apprendre à transférer les accords de licence d'un poste de travail à un autre, aller à http://d.android.com/r/studio-ui/export-licenses.html
et c'est un problème parce que j'aimerais installer toutes les dépendances sdk tout en faisant un gradle build
.
je cherche une solution pour accepter automatiquement toutes les licences. Peut-être un gradle script ? Avez-vous des idées ?
Merci!
[EDIT]
une solution était d'exécuter:
android update sdk --no-ui --filter build-tools-24.0.0,android-24,extra-android-m2repository
et l'installer manuellement, mais il est la nouvelle fonctionnalité de Grad le but de le faire.
[EDIT 2]
une meilleure solution est d'utiliser le sdkmananger:
yes | sudo sdkmanager --licenses
30 réponses
j'ai rencontré ceci avec le alpha5
preview.
Jake Wharton m'a fait remarquer que vous pouvez actuellement utiliser""
mkdir -p "$ANDROID_SDK/licenses"
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_SDK/licenses/android-sdk-preview-license"
pour recréer le dossier courant $ANDROID_HOME/license
sur votre machine. Cela aurait le même résultat que le processus décrit dans le lien de l'erreur msg ( http://tools.android.com/tech-docs/new-build-system/license ).
texte de licence, que j'imagine sera mis à jour périodiquement, de sorte que ce code ne fonctionnera que pendant si longtemps :)
Et de l'installer manuellement, mais c'est la gradle nouvelle fonction objectif pour le faire.
j'ai d'abord été surpris que cela ne fonctionne pas à l'extérieur de la boîte, même lorsque j'avais accepté les licences pour les composants nommés via l'outil android
, mais il a été souligné à moi son le gestionnaire SDK à l'intérieur comme cela crée le /licenses
le dossier.
je suppose que les outils officiels ne voulez pas sauter cette étape pour des raisons juridiques.
relire les notes de mise à jour il est dit
SDK auto-download: Gradle tentera de télécharger les paquets SDK manquants dont dépend un projet.
ce qui ne signifie pas qu'il fonctionnera si vous n'avez pas encore installé les outils android et avez déjà accepté la dernière licence(s).
EDIT: en disant que, il ne fonctionne toujours pas sur ma boîte de test gubuntu jusqu'à ce que je lie le SDK jusqu'à AS. L'assurance-récolte fonctionne très bien, mais je ne sais pas quelle est la différence...
Androidsdsdk peut enfin accepter des licences.
yes | sdkmanager --licenses
pour le plus récent studio Android (2.3) la meilleure façon de mettre à jour/accepter toutes les licences est d'exécuter:
tools/bin/sdkmanager --licenses
vous pourriez encore avoir besoin de copier les fichiers de licence à d'autres endroits en fonction de votre installation.
Si vous utilisez Jenkins, vous pouvez utiliser le script bash suivant comme première étape dans le processus de génération:
(while sleep 3; do echo "y"; done) | $ANDROID_HOME/tools/android update sdk -u
cela installera bien sûr toutes les mises à jour disponibles, mais cela vous fera gagner du temps si vous pouvez économiser de l'espace disque. Le sommeil est d'éviter la ligne de lecture cassée dans le programme d'installation, puisque "oui" ne fonctionne pas correctement dans ce cas.
EDIT: vous devez également ajouter le plugin "Install Android project prerequisites" dans l'étape de construction pour obtenir le $ANDROID_HOME correct si vous utilisez le gestionnaire SDK intégré.
pour le nouveau sdkmanager
utility:
yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;24.0.3"
il y a un peu de retard entre les yesses, donc la commande pourrait être suspendue avec la licence affichée pendant un certain temps, mais cela ne nécessite pas d'intervention humaine.
malheureusement la façon dont OP résolu à l'origine il ne fonctionne pas toujours. Si vous trouvez dans le message d'erreur Quelle est votre construction actuelle build-tools version . Il se peut que ce soit une version supérieure des outils de construction qui manque. Dans ce cas, vous devez démarrer manuellement SDK Manager et ajouter les outils de compilation et accepter la licence.
selon les instructions de L'opération, il ressemble à ce qui suit.
$ ./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
REMARQUE: 2017-04-16
l'outil
android
a été déprécié en faveur du nouveausdkmanager
. Veuillez voir Joe Lawson réponse et ultérieure des postes de Mars (2017) et ainsi de suite.
puis vous ajustez la commande comme suit:
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.
encore une fois, Ne rendez pas Gradle heureux. Donc l'acceptation manuelle est la seule solution jusqu'à ce que quelqu'un trouve quelque chose de mieux. (S'il vous plaît!)
cela a résolu mon erreur
echo yes | $ANDROID_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
l'outil android
est déprécié et vous devez utiliser le sdkmanager
à la place. sdkmanager
écrit également le fichier de licences lorsque vous l'acceptez Pour la première fois. La licence change en fonction du SDK que vous utilisez, même si la commande
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
fonctionne sur certains systèmes. Il ne fonctionnera pas sur tous. Certains SDK installent s'attendent à autoriser la fin du fichier sans nouvelle ligne dans le fichier, alors essayez d'ajouter un -n
à la commande echo.
echo -n -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
si cela ne fonctionne pas, vous pouvez essayer d'utiliser l'encodage base64 à la place.
donc pour découvrir ma licence:
$> 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"
cela vous incitera à accepter la licence. Après avoir accepté, il le copiera sur ${ANDROID_HOME}/licenses/android-sdk-license
. Pour vous assurer que vous obtenez toujours exactement ce qui est écrit, utilisez base64
.
$> base64 ${ANDROID_HOME}/licenses/android-sdk-license
Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU=
, Alors vous pouvez utiliser base64 -d
recréer le fichier exactement.
$> echo Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU= | base64 -d > ${ANDROID_HOME}/licenses/android-sdk-license
vous pouvez vérifiez si le fichier écrit Est ce qu'on attend en exécutant un sha1sum dessus.
$> sha1sum ${ANDROID_HOME}/licenses/android-sdk-license
da6b80c9c47b41c0bf7032938e7137a58a3dc249
si vous lancez yes | sdkmanager --licenses
, alors nous imprimons le contenu de $ANDROID_HOME/licenses/android-sdk-license
,
nous obtiendrons ce
# cat $ANDROID_HOME/licenses/android-sdk-license
8933bad161af4178b1185d1a37fbf41ea5269c55
d56f5187479451eabf01fb78af6dfcb131a6481e
pour GitLab CI, pour accepter les licences Android SDK Build-Tools 26.0.2, vous devez exécuter ce
before_script:
- mkdir -p $ANDROID_HOME/licenses
- echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_HOME/licenses/android-sdk-license
- echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> $ANDROID_HOME/licenses/android-sdk-license
notez que pour quiconque vient à cette question actuellement, build-tools-24.0.2 est (je pense) maintenant considéré comme obsolète, donc vous obtiendrez:
Error: Ignoring unknown package filter 'build-tools-24.0.2'
lors de l'exécution des différentes commandes qui ont été suggérées pour les installer.
la solution est d'ajouter --all
:
android update sdk --no-ui --all --filter "build-tools-24.0.2"
aussi si vous êtes sur 32bit linux, tout après les outils de construction 23.0.1 est 64bit seulement , donc ne courra pas. 32bit utilisateurs sont bloqués sur 23.0.1, la seule façon d'obtenir une version ultérieure outils est de passer à 64 bits.
nous avons trouvé la même question construire le projet sur Jenkins. Avec buildToolsVersion '25.0.2'
, nous devons accepter les licences avant de construire. Dans notre cas, nous avions besoin de courir:
./sdkmanager --update
qui nous demande d'accepter une licence pour le sdkmanager, puis
./sdkmanager --licenses
qui nous demande d'accepter de nouvelles licences non acceptées auparavant
N'oubliez pas: Lancez ces commans avec le même utilisateur que jenkins
. Dans ma Debian, l' L'utilisateur de Jenkins est juste jenkins
. En d'autres termes: le faire comme root
créera les licences acceptées comme root
, donc Jenkins ne les lira pas.
soit dit en passant, nous avons trouvé sdkmanager
à /var/lib/jenkins/tools/android-sdk/tools/bin
. Si le vôtre n'est pas là, trouvez-le avec find / -name "sdkmanager"
pour un message d'erreur concernant L'api SDK numéro 25:
android update sdk --no-ui --all --filter build-tools-25.0.1,android-25,extra-android-m2repository
si vous utilisez tools/bin/sdkmanager --licenses
vous devez toujours avoir une interaction humaine. J'ai le problème avec mon Indic gitlab. C'est ma solution:
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
dira oui si il y a une question, mais vous avez besoin de faire une ligne par installe le paquet
j'ai résolu ce problème en créant un repo git public avec les fichiers de licence acceptés. Puis j'utilise wget
pour récupérer ces licences sur n'importe quelle machine dont j'ai besoin dans un répertoire [sdk-dir]/licences avant d'exécuter ./gradlew pour construire mon projet.
Ok pour toute personne ayant ce problème à partir de 2018. Les réponses ci-dessus ne fonctionnaient pas du tout pour moi. Ce qui a fonctionné était d'ouvrir Android SDK - en cliquant sur le bouton télécharger sur la barre d'outils et en sélectionnant les paquets appropriés. Une fois le téléchargement terminé, vous pourrez accepter le contrat de licence.
j'ai eu la même erreur en utilisant Cordova.
le problème était dû au fait que J'ai installé Android Sdk à travers Android Studio et à travers apt
avec apt install android-sdk adb
. Et Cordova appelait les fichiers installés par apt
au lieu des fichiers de mon répertoire personnel.
ça a marché une fois que j'ai changé le chemin vers le SDK à 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
puis j'ai supprimé les fichiers système qui n'étaient pas utilisés plus: apt remove android-sdk adb
.
vous pouvez accepter toute la licence en exécutant la commande suivante:
sdkmanager --licenses
cela vous invitera à utiliser chaque licence que vous n'avez pas encore acceptée et vous pouvez simplement entrer y
pour accepter chacune d'elles.
vous pouvez aussi simplement exécuter
$ANDROID_HOME/tools / bin / sdkmanager --licences
ou pour Windows exécuter
%ANDROID_HOME% / tools / bin / sdkmanager --licences
pour ceux qui ont des problèmes avec le SDK de ligne de commande, la raison pour laquelle il ne trouvera pas les licences que vous avez acceptées est parce qu'ils ont été écrits à un endroit différent de $ANDROID_HOME/licenses
qui est où ils doivent être.
j'ai trouvé la solution la plus facile était d'accepter les licences comme ceci:
$ANDROID_HOME/bin/sdkmanager --licenses --sdk_root=$ANDROID_HOME
Note: cela suppose que vous avez défini ANDROID_HOME
pour pointer vers l'endroit où votre sdk est installé.
Copiez l'intégralité du répertoire licences/ et collez-le dans le répertoire Android SDK home sur la machine où vous souhaitez construire vos projets.
https://developer.android.com/studio/intro/update.html#download-with-gradle
cela a résolu le problème pour moi
dans Windows PowerShell, vous pouvez faire
for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | sdkmanager --licenses
c'est beaucoup plus flexible et nécessite aucune intervention manuelle. Le nombre de 30 est arbitraire, devrait être suffisant pour couvrir le nombre d'acceptations de licence, mais peut être augmenté si nécessaire
je cours
#react-native run-android
de terminal et rencontré ce problème. Pour manuellement, allez à Android Studio - > Android SDK - > plate-forme SDK Cliquez sur Afficher les détails des paquets et vérifier:
+ Google APIs
+ Android SDK Platform 23
+ Intel x86 Atom_64 System Image
+ Google APIs Intel x86 Atom_64 System Image
lors de l'installation des paquets, cochez accept license => peut résoudre le problème.
sur Mac OSX, naviguez vers le sdk/tools/bin
puis lancez ./sdkmanager --licenses
, et acceptez toutes les licences.
j'ai finalement trouvé une solution sur Windows, pour avoir une installation vraiment silencieuse et automatique:
sous Windows, la syntaxe suivante ne fonctionne pas:
echo y | sdkmanager --licenses
il semble que le" y " ne soit pas correctement envoyé au programme java appelé dans le lot.
la solution est de créer un fichier file-y.txt avec plusieurs "y", un par ligne, et pour utiliser
call sdkmanager --licenses < file-y.txt
cela créera les fichiers nécessaires dans le licences répertoire. Le problème est probablement lié à L'utilisation de BufferedReader en Java
il y a 2 approches que je peux trouver à ce problème.
-
Update sdk tools with command window by accepting licence agreement as follows, il suffit de modifier la version en fonction de vos besoins.
mise à jour android sdk --no-ui --filter build-tools-25.0.2, android-25, extra-android-m2repository
-
la deuxième approche consiste à copier des dossiers de licence dans le répertoire racine Android. Goto votre machine de développement open Android Studio. Trouvez votre emplacement sdk dans le menu Structure du projet. (C:\Users\UserName\AppData\Local\Android\sdk). Dans ce répertoire il doit y avoir un dossier licence. Copier ce dossier avec le contenu. Collez ce dossier dans votre machine Jenkins server (ou là où vous êtes confrontés à ce problème) sous le dossier racine SDK android. (C:\Users\UserName.jenkins\tools\android-sdk)
enfin, ces 2 simples étapes ont fonctionné pour moi sur windows 10.
1) Assurez-vous de mettre à jour vos outils de construction android et api. Sur votre Sdk Android il suffit de cliquer sur installer les paquets pour installer les mises à jour disponibles.
2) Démarrez votre studio Android et vous serez invité à installer les outils de construction requiured pour l'api et les outils déjà mis à jour, ce qui permettra d'installer les propriétés des outils de construction, y compris les licences et votre fait.
je navigue vers:
/usr/lib/android-sdk/licenses
et j'ai tapé:
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_SDK/licenses/android-sdk-license"
avec la permission de la racine. Et ça marche pour moi maintenant.
pour les applications natives REACT:
Si vous rencontrez ce problème pour Réagir application Native, en plus des étapes mentionnées ci-dessus, assurez-vous d'avoir le local.fichier de propriétés dans le répertoire android (AppName / android) de votre application qui pointe vers votre répertoire 'sdk':
sdk.dir=/PATH_TO_SDK/
j'ai essayé toute la commande ci-dessus sur windows 10 machine mais la solution était d'utiliser le SDKMANAGER pour vérifier et accepter les licences buy installant des versions manquantes