Depuis la sortie des plugins Android 2.2-alpha4 :
Gradle tentera de télécharger les packages SDK manquants d’un projet dépend de
Ce qui est incroyablement cool et était connu pour être un projet JakeWharton .
Mais, pour télécharger la bibliothèque du SDK, vous devez: accepter les contrats de licence ou indiquer à Gradle ce qui suit:
Vous n'avez pas accepté les contrats de licence du SDK suivant composants: [Android SDK Build-Tools 24, Plate-forme Android SDK 24] . Avant de construire votre projet, vous devez accepter la licence accords et terminer l’installation des composants manquants en utilisant Android Studio SDK Manager. Sinon, pour apprendre à transférez les contrats de licence d’un poste de travail à un autre, allez à http://d.Android.com/r/studio-ui/export-licenses.html
Et ceci est un problème parce que j'aimerais installer toutes les dépendances de sdk en faisant un gradle build
.
Je recherche une solution pour accepter automatiquement toutes les licences. Peut-être un script de grade? Avez-vous des idées?
Merci!
[MODIFIER]
Une solution consistait à exécuter:
Android update sdk --no-ui --filter build-tools-24.0.0,Android-24,extra-Android-m2repository
Et installez-le manuellement, mais c’est la nouvelle fonction de Gradle.
[EDIT 2]
Une meilleure solution consiste à utiliser sdkmananger:
yes | Sudo sdkmanager --licenses
AndroidSDK peut enfin accepter les licences.
yes | sdkmanager --licenses
J'ai rencontré cela avec l'aperçu alpha5
.
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 actuel $Android_HOME/license
sur votre ordinateur. Cela aurait le même résultat que le processus décrit dans le lien du message d'erreur ( http://tools.Android.com/tech-docs/new-build-system/license ).
Les hachages sont des parties du texte de la licence, qui, je suppose, sera périodiquement mis à jour. Ce code ne fonctionnera donc que si longtemps :)
Et installez-le manuellement, mais c’est la nouvelle fonction de Gradle.
Au début, je fus surpris de constater que cela ne fonctionnait pas, même si j’avais accepté les licences des composants nommés via l’outil Android
, mais c’est le gestionnaire de SDK au sein de AS qui crée le dossier /licenses
.
Je suppose que les outils officiels ne voudraient pas sauter cette étape pour des raisons légales.
Relire les notes de publication, il est indiqué
Téléchargement automatique du SDK: Gradle tentera de télécharger les packages SDK manquants dont dépend un projet.
Cela ne signifie pas que cela fonctionnera si vous n'avez pas encore installé les outils Android et avez déjà accepté les dernières licences.
EDIT: Cela dit, cela ne fonctionne toujours pas sur ma boîte de test tant que je n'ai pas connecté le SDK à AS. CI fonctionne bien - je ne sais pas quelle est la différence ...
Pour le dernier Android Studio (2.3), le meilleur moyen de mettre à jour/accepter toutes les licences est de lancer:
tools/bin/sdkmanager --licenses
vous devrez peut-être quand même copier les fichiers de licence dans d’autres emplacements en fonction de votre configuration.
Pour le nouvel utilitaire sdkmanager
:
yes | $Android_HOME/tools/bin/sdkmanager "build-tools;24.0.3"
Il y a un peu de retard entre les deux, donc la commande peut rester en suspens pendant quelques instants, mais elle ne nécessite aucune intervention humaine.
Si vous utilisez Jenkins, vous pouvez utiliser le script bash suivant comme première étape du processus de construction:
(while sleep 3; do echo "y"; done) | $Android_HOME/tools/Android update sdk -u
Bien sûr, cela installera TOUTES les mises à jour disponibles, mais cela vous fera gagner du temps si vous pouvez économiser de l'espace disque. La mise en veille évite les ruptures de lignes de lecture dans le programme d'installation, car "oui" ne fonctionne pas correctement dans ce cas.
EDIT: Vous devez également ajouter le plug-in "Installer les conditions préalables du projet Android" à l'étape de génération pour obtenir le correct $ Android_HOME si vous utilisez le gestionnaire de SDK intégré.
Malheureusement, la façon dont l'OP a été résolu à l'origine ne fonctionne pas toujours. Si vous trouvez dans le message d'erreur quelles sont vos versions actuelles build-tools version. Il se pourrait que ce soit une version supérieure des outils de construction qui manque. Dans ce cas, vous devez démarrer manuellement SDK Manager, ajouter les outils de construction et accepter la licence.
Par instructions OP, il se présente comme suit.
$ ./gradlew build
Pour respecter les paramètres de la machine virtuelle Java pour cette construction, une nouvelle machine virtuelle Java sera créée. Veuillez envisager d'utiliser le démon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html. FAILURE: La génération a échoué avec une exception . * Qu'est-ce qui a mal tourné? : Un problème est survenu lors de la configuration du projet ': app' >. Vous n'avez pas accepté les contrats de licence des composants du SDK suivants: [Android SDK Build-Tools 24.0.2] . ... ÉCHEC DE LA CONSTRUCTION
NOTE: 16/04/2017
L'outil
Android
est maintenant déconseillé au profit de la nouvellesdkmanager
. Veuillez consulter les réponses de Joe Lawson et les publications ultérieures à partir de mars (2017) et les suivantes.
Puis ajustez votre commande comme suit:
Android update sdk --no-ui --filter build-tools-24.0.2,Android-24,extra-Android-m2repository
Actualiser les sources: Récupération de https://dl.google.com/Android/repository/addons_list-2.xml Valide XML Analyser XML Liste des modules complémentaires récupérés avec succès Actualiser les sources URL de récupération: https://dl.google.com/Android/repository/repository-11.xml Validez XML: https://dl.google.com/Android/repository/repository-11.xml Analyse XML: https://dl.google.com/Android/repository/repository-11.xml ... Error: ignorant le filtre de package inconnu 'build-tools-24.0.2' - ------------------------------ Identifiant de licence: Android-sdk-license-xxxxxxxx Utilisé par: - Plate-forme SDK Android 7.0, API 24, révision 2 - Référentiel de support Android, révision 39 ------------------------------- ... 20 novembre 2015 Acceptez-vous la licence 'Android-sdk-license-xxxxxxxx' [y/n]: y Installation d'Archives: Préparation de l'installation des archives Téléchargement du SDK Platform Android 7.0, API 24, révision 2 Installation de SDK Platform Android 7.0, API 24, révision 2 Plate-forme SDK installée Android 7.0, API 24, révision 296%) Téléchargement du référentiel de support Android, révision 39 Installation du référentiel de support Android, révision 39 Référentiel de support Android installé, révision 3999%) Terminé. 2 paquets installés .
En cours d'exécution à nouveau, ne faites toujours pas plaisir à Gradle. L'acceptation manuelle est donc la seule solution jusqu'à ce que quelqu'un propose quelque chose de mieux. (S'il vous plaît faire!)
cela a résolu mon erreur
echo yes | $Android_HOME/tools/bin/sdkmanager "build-tools;25.0.2"
L'outil Android
est obsolète et vous devriez plutôt utiliser sdkmanager
. 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, alors que la commande
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$Android_SDK/licenses/Android-sdk-license"
fonctionne sur certains systèmes. Cela ne fonctionnera pas sur tous. Certaines installations du SDK s’attendent à ce que le fichier de licence se termine sans nouvelle ligne dans le fichier. Essayez donc d’ajouter un -n
à la commande echo.
echo -n -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$Android_SDK/licenses/Android-sdk-license"
Si cela ne fonctionne pas, vous pouvez utiliser le codage base64 à la place.
Alors 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. Une fois accepté, il sera copié dans ${Android_HOME}/licenses/Android-sdk-license
. Pour vous assurer de toujours obtenir exactement ce qui est écrit, utilisez base64
.
$> base64 ${Android_HOME}/licenses/Android-sdk-license
Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU=
Ensuite, vous pouvez utiliser base64 -d
pour recréer le fichier avec précision.
$> echo Cjg5MzNiYWQxNjFhZjQxNzhiMTE4NWQxYTM3ZmJmNDFlYTUyNjljNTU= | base64 -d > ${Android_HOME}/licenses/Android-sdk-license
Vous pouvez vérifier si le fichier écrit correspond aux attentes en exécutant un sha1sum dessus.
$> sha1sum ${Android_HOME}/licenses/Android-sdk-license
da6b80c9c47b41c0bf7032938e7137a58a3dc249
si vous exécutez yes | sdkmanager --licenses
, nous imprimons le contenu de $Android_HOME/licenses/Android-sdk-license
,
nous aurons ceci
# cat $Android_HOME/licenses/Android-sdk-license
8933bad161af4178b1185d1a37fbf41ea5269c55
d56f5187479451eabf01fb78af6dfcb131a6481e
Pour que GitLab CI accepte les licences Android SDK Build-Tools 26.0.2, vous devez exécuter cette
before_script:
- mkdir -p $Android_HOME/licenses
- echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > $Android_HOME/licenses/Android-sdk-license
- echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> $Android_HOME/licenses/Android-sdk-license
Nous avons retrouvé le même problème lors de la construction du projet sur Jenkins. Avec buildToolsVersion '25.0.2'
, nous devons accepter les licences avant de construire. Dans notre cas, nous devions exécuter:
yes | sdkmanager --update
qui accepte des licences pour sdkmanager lui-même, puis
yes | sdkmanager --licenses
qui accepte les nouvelles licences non acceptées auparavant
Rappelez-vous: exécutez ces commans avec le même utilisateur que jenkins
. Dans ma Debian, l’utilisateur Jenkins n’est que jenkins
. En d'autres termes: le faire en tant que root
créera les licences acceptées sous la forme root
, donc Jenkins ne les lira pas.
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"
Notez que pour ceux qui viennent à cette question actuellement, build-tools-24.0.2 est (je pense) maintenant considéré comme obsolète, vous obtiendrez donc:
Error: Ignoring unknown package filter 'build-tools-24.0.2'
lors de l'exécution des différentes commandes suggérées pour les installer.
La solution consiste à ajouter --all
:
Android update sdk --no-ui --all --filter "build-tools-24.0.2"
Aussi, si vous êtes sur Linux 32 bits, everythingaprès la compilation des outils 23.0.1 est uniquement à 64 bits , donc ne fonctionnera pas. Les utilisateurs 32 bits sont bloqués sur 23.0.1, le seul moyen d’obtenir des outils de construction ultérieurs est de passer à 64 bits.
Si vous utilisez tools/bin/sdkmanager --licenses
, vous devez toujours avoir une interaction humaine. J'ai un problème avec mon gitlab CI. Ceci 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 s'il y a une question, mais vous devez créer une ligne par paquet installe
Vous pouvez aussi simplement exécuter:
$Android_HOME/tools/bin/sdkmanager --licenses
Et sous Windows, exécutez:
%Android_HOME%/tools/bin/sdkmanager --licenses
Pour un message d'erreur concernant le SDK api numéro 25:
Android update sdk --no-ui --all --filter build-tools-25.0.1,Android-25,extra-Android-m2repository
OK POUR TOUTE PERSONNE AYANT CETTE PUBLICATION À PARTIR DE 2018. Les réponses ci-dessus ne m'ont pas du tout aidé. Le travail de DID consistait à ouvrir Android SDK - en cliquant sur le bouton TÉLÉCHARGER de la barre d’outils et en sélectionnant les packages appropriés. Une fois le téléchargement terminé, vous pourrez accepter le contrat de licence.
Pour ceux qui rencontrent des problèmes avec le SDK en ligne de commande, les licences que vous avez acceptées ne sont pas accessibles car elles ont été écrites à un emplacement différent de $Android_HOME/licenses
, qui est l'endroit où elles doivent être.
J'ai trouvé la solution la plus simple était d'accepter les licences comme ceci:
$Android_HOME/bin/sdkmanager --licenses --sdk_root=$Android_HOME
Remarque: Cela suppose que vous avez défini Android_HOME
pour pointer où que votre sdk soit installé.
J'ai résolu ce problème en créant un référentiel git public avec les fichiers de licence acceptés. Ensuite, j'utilise wget
pour récupérer ces licences sur n'importe quelle machine dont j'ai besoin dans un répertoire [sdk-dir]/licenses avant d'exécuter ./gradlew pour construire mon projet.
J'ai enfin trouvé une solution sur Windows, pour avoir une véritable installation automatique et silencieuse:
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 consiste à créer un fichier fichier-y.txt avec plusieurs "y", un par ligne, et à utiliser
call sdkmanager --licenses < file-y.txt
Cela créera les fichiers nécessaires dans le répertoire des licences. Le problème est probablement lié à l'utilisation de BufferedReader en Java
J'ai eu la même erreur en utilisant Cordova.
Le problème était dû au fait que j'ai installé Android Sdk via Android Studio et via apt
avec apt install Android-sdk adb
. Et Cordova appelait les fichiers installés via apt
au lieu des fichiers de mon répertoire personnel.
Cela a fonctionné une fois que j'ai changé le chemin d'accès au SDK sous 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
Ensuite, j'ai supprimé les fichiers système qui n'étaient plus utilisés: apt remove Android-sdk adb
.
Voici ma configuration Docker.
Vous pouvez suivre depuis un environnement Linux simple.
Notez que les clauses yes |
et --licenses --sdk_root=${Android_HOME}
.
Il semble que sdkmanager --update
annule les accords, donc yes |
est apparu deux fois.
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
Vous pouvez accepter toute la licence en exécutant la commande suivante:
sdkmanager --licenses
Cela vous guidera à travers chaque licence que vous n'avez pas encore acceptée et vous pouvez simplement entrer y
pour accepter chacune d'elles.
Copiez le répertoire de licences/répertoire complet et collez-le dans le répertoire de base du SDK Android sur la machine sur laquelle vous souhaitez créer vos projets.
https://developer.Android.com/studio/intro/update.html#download-with-gradle
cela a résolu le problème pour moi
cd $Android_HOME/tools/bin
./sdkmanager --update
ou
$Android_HOME/tools/bin/sdkmanager --update
Dans Windows PowerShell, vous pouvez faire
for($i=0;$i -lt 30;$i++) { $response += "y`n"}; $response | sdkmanager --licenses
Ceci est beaucoup plus flexible et ne nécessite aucune intervention manuelle. Le nombre 30 est arbitraire, devrait être suffisant pour couvrir le nombre d'acceptations de licences, mais peut être augmenté si nécessaire
À compter de juillet 2019, la méthode la plus simple consiste à utiliser: flutter doctor --Android-licenses
dans l'invite de commande.
Il affiche les conditions générales non acceptées des kits de développement logiciel un par un et vous donne la possibilité de choisir "y/n". Choisissez y pour tous.
Alternativement, lorsque vous exécutez flutter doctor
, il exécutera Android diagnostics de chaîne d'outils qui affiche le nombre de licences non encore acceptées et vous suggère de l'exécuter avec l'indicateur --Android-licenses.
Je cours
#react-native run-Android
du terminal et rencontré ce problème. Pour manuellement, allez à Android Studio -> SDK Android -> Plate-forme SDKCliquez sur Afficher les détails des packages et vérifiez:
+ Google APIs
+ Android SDK Platform 23
+ Intel x86 Atom_64 System Image
+ Google APIs Intel x86 Atom_64 System Image
Lorsque vous installez des packages, cochez accept license => peut résoudre le problème.
pour Windows, ouvrez cmd et entrez dans le répertoire bin
en lançant la commande suivante:
cd C:\Users\username\AppData\Local\Android\sdk\tools\Android\Sdk\tools\bin
puis exécutez la commande sdkmanager --licenses
, il demande à accepter les licences.
Sur Mac OSX, accédez au sdk/tools/bin
Ensuite, lancez ./sdkmanager --licenses
et acceptez toutes les licences.
Je navigue vers:
/usr/lib/Android-sdk/licenses
et j'ai tapé dans le terminal:
echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > $Android_SDK/licenses/Android-sdk-license"
Avec la permission root ... et cela fonctionne pour moi maintenant.
Dans Windows, accédez à l'invite de commande et tapez les commandes suivantes:
cd C:\Users\<Username>\AppData\Local\Android\Sdk\tools\bin
sdkmanager --licenses
Cela générera les licences continuer à appuyer sur "y" pour accepter toutes les licences.
La même erreur de licence n’a pas été acceptée… lors de la configuration d’un environnement Android pour exécuter une application native de React dans l’émulateur Android pour le niveau 23 de l’API.
J'ai fait ce qui suit:
Basé sur le lien https://developer.Android.com/studio/intro/update#download-with-gradle
Vérifié si la licence a été téléchargée via le gestionnaire de SDK du studio Android studio 3.1.3.
Configurer Android_HOME en tant que C: \\ Android\Sdk
(il a été installé dans C:\Utilisateurs\nom d'utilisateur\AppData\Local\Android\Sdk)
L'erreur s'est résolue après une nouvelle tentative de génération dans une nouvelle invite de commande.
Il est tard mais toutes les solutions mentionnées ci-dessus n'ont pas fonctionné pour moi et cette ligne accepte finalement toutes les licences Android.
yes | sdkmanager --licenses && sdkmanager --update
J'avais un problème similaire, je l'ai résolu en ouvrant Android Studio. Le fait était qu'Android Build Tools 26.0.2 n'était pas installé. Une erreur est venue m'avertir à ce sujet, je l'ai installé et synchronisé avec le projet. Problème résolu :)
Après avoir essayé plusieurs des solutions possibles mentionnées par les membres de la communauté, je viens de découvrir qu'il y avait peut-être eu des problèmes de temps supplémentaire, de sorte que la plupart des solutions sont obsolètes.
Actuellement, et comme j'ai posté dans la communauté Travis , Travis devrait accepter toutes les licences par défaut, mais il n'arrêtait pas de se plaindre de ne pas accepter les licences 27.0.3, ce qui ne devrait pas arriver.
Ajouter:
before_install:
- yes | sdkmanager "build-tools;27.0.3"
pour résoudre le problème, nous pourrions même utiliser une version 3. + d'Android Gradle Tools sans même avoir à déclarer quelle version des outils de construction que nous utilisons:
Android:
components:
# Use the latest revision of Android SDK Tools
- tools
- platform-tools
- tools
# The SDK version used to compile your project
- Android-${Android_API}
# - build-tools-28.0.3 # WE DONT NEED THIS ANYMORE FROM AGP 3.+
# Additional components
- extra-google-google_play_services
- extra-google-m2repository
- addon-google_apis-google-${Android_API}
Cela fonctionne comme le 29 octobre 2018. Travis pourrait faire des changements dans le futur, alors bonne chance avec ça!
Sous Windows 10, ouvrir cmd
avec des privilèges d'administrateur, puis taper cd C:\Program Files (x86)\Android\android-sdk\tools\bin\
, puis sdkmanager --update
a fonctionné pour moi. Après cela, il me suffisait d'appuyer deux fois sur "y" pour accepter les licences.
Tout ce que je devais faire, c’est yes | sdkmanager --licenses > /dev/null
, et tout a été accepté, et aucune sortie énorme sur la console, le journal Travis ou ailleurs. Cela fonctionne aussi comme yes | sdkmanager "tools" > /dev/null
par exemple.
POUR REAC NATIVE APP:
Si vous rencontrez ce problème pour une application React Native, en plus des étapes mentionnées ci-dessus, assurez-vous de disposer du fichier local.properties dans le répertoire Android (AppName/Android) de votre application qui pointe vers votre répertoire "sdk":
sdk.dir=/PATH_TO_SDK/
J'ai passé une demi-journée à chercher une solution pour Bitbucket Pipelines
Si vous utilisez Bitbucket Pipelines et que le problème est d'accepter toutes les licences SDK, essayez d'utiliser ce code dans votre fichier .yml:
image: mingc/Android-build-box:latest
pipelines:
default:
- step:
script:
- chmod +x gradlew
- ./gradlew assemble
Cela devrait fonctionner.