web-dev-qa-db-fra.com

Comment installer Android SDK Build Tools sur la ligne de commande?

Je souhaite configurer l'environnement de développement Android à partir de la ligne de commande et rencontrer le problème suivant:

wget http://dl.google.com/Android/android-sdk_r22.0.5-linux.tgz

après avoir extrait le fichier, lancez

tools/Android update sdk --no-ui

Cependant, il est trop lent sur l'exécution

Fetching https://dl-ssl.google.com/Android/repository/addons_list-2.xml

Le résultat est que rien dans le dossier build-tools, et ce que je veux, c'est aapt et apkbuilder, car je veux construire apk à partir d'une ligne de commande sans ant.

284
Zhenguo Yang

Par défaut, le gestionnaire de SDK à partir de la ligne de commande n'inclut pas les outils de génération dans la liste. Ils sont dans la catégorie "obsolète". Pour voir tous les téléchargements disponibles, utilisez

Android list sdk --all

Et pour obtenir l'un des packages de cette liste à partir de la ligne de commande, utilisez:

Android update sdk -u -a -t <package no.>

Où -u signifie --no-ui, -a signifie --all et -t signifie --filter.

Si vous devez installer plusieurs packages, procédez comme suit:

Mise à jour Android sdk -u -a -t 1,2,3,4, .., n 

Où 1,2, .., n est le numéro de paquet indiqué avec la commande list ci-dessus

473
Nate

Comme mentionné dans d'autres réponses, vous pouvez utiliser l'option --filter pour limiter les packages installés:

Android update sdk --filter ...

Les autres réponses ne précisent pas que vous pouvez utiliser des identifiants de chaîne constants à la place des index (qui changeront) pour les options de filtrage. Ceci est utile pour les installations sans assistance ou par script. Man for --filter option:

... Ceci accepte également les identifiants renvoyés par 'list sdk --extended'.

Android list sdk --all --extended:

Packages available for installation or update: 97
----------
id: 1 or "tools"
     Type: Tool
     Desc: Android SDK Tools, revision 22.6.2
----------
id: 2 or "platform-tools"
     Type: PlatformTool
     Desc: Android SDK Platform-tools, revision 19.0.1
----------
id: 3 or "build-tools-19.0.3"
     Type: BuildTool
     Desc: Android SDK Build-tools, revision 19.0.3

Vous pouvez ensuite utiliser les identifiants de chaîne comme options de filtre pour spécifier précisément les versions souhaitées:

Android update sdk --filter tools,platform-tools,build-tools-19.0.3 etc

139
robd

La version 25.2.3 (et ultérieure) du package Android SDK Tools contient un nouvel outil - sdkmanager -, ce qui simplifie cette tâche consistant à installer les outils de construction à partir de la ligne de commande.
Il se trouve dans le dossier Android_sdk/tools/bin.

Utilisation (depuis documentation ):

sdkmanager packages [options]

L'argument packages est un chemin de style SDK, entouré de guillemets (par exemple, "build-tools;25.0.0" ou "platforms;Android-25"). Vous pouvez passer plusieurs chemins de package, séparés par un espace, mais ils doivent tous être entourés de leurs propres guillemets.

Exemple d'utilisation (sur mon Mac):

alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/   
alex@mbpro:~/sdk/tools/bin$ ./sdkmanager "build-tools;25.0.2"  
done   
alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/ 25.0.2/

Vous pouvez également spécifier diverses options , par exemple pour forcer toutes les connexions à utiliser HTTP (--no_https), ou pour utiliser un serveur proxy (--proxy_Host=address et --proxy_port=port ).

Pour vérifier les options disponibles, utilisez l’indicateur --help. Sur ma machine (Mac), la sortie est la suivante:

alex@mbpro:~/sdk/tools/bin$ ./sdkmanager --help
Usage: 
  sdkmanager [--uninstall] [<common args>] \
    [--package_file <package-file>] [<packages>...]
  sdkmanager --update [<common args>]
  sdkmanager --list [<common args>]

In its first form, installs, or uninstalls, or updates packages.
    <package> is a sdk-style path (e.g. "build-tools;23.0.0" or 
             "platforms;Android-23").
    <package-file> is a text file where each line is a sdk-style path
                   of a package to install or uninstall.
    Multiple --package_file arguments may be specified in combination
     with explicit paths.
In its second form (with --update), currently installed packages are
    updated to the latest version.
In its third form, all installed and available packages are printed out.

Common Arguments:
    --sdk_root=<sdkRootPath>: Use the specified SDK root instead of the SDK containing this tool
    --channel=<channelId>: Include packages in channels up to <channelId>.
                           Common channels are:
                           0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary).

    --include_obsolete: With --list, show obsolete packages in the
                        package listing. With --update, update obsolete
                        packages as well as non-obsolete.
    --no_https: Force all connections to use http rather than https.
    --proxy=<http | socks>: Connect via a proxy of the given type.
    --proxy_Host=<IP or DNS address>: IP or DNS address of the proxy to use.
    --proxy_port=<port #>: Proxy port to connect to.

* If the env var REPO_OS_OVERRIDE is set to "windows",
  "macosx", or "linux", packages will be downloaded for that OS.
65
Alex Lipov

Les outils de compilation de la BAD ne seront pas téléchargés automatiquement, par la commande Android update sdk --no-ui

Donc, pour installer le type Buil-Tool (dans la console):

Android list sdk --all

N'oubliez pas le numéro indiqué avant l'élément et exécutez les opérations suivantes:

Android update sdk -u --all --filter <number>

les commandes doivent être saisies dans/YourFolder/Android-sdk-linux/tools

Également pour le dossier distant (serveur ouvert par ssh par exemple), tapez:

**./Android** list sdk --all
**./Android** update sdk -u --all --filter <number>

Pour une liste simple des types de paquets ADB dans le terminal:

Android list sdk

pour installer tous les paquets:

Android update sdk --no-ui

Ou avec des filtres (la virgule est séparateur):

Android update sdk --no-ui --filter 3,5,8,14
54
Flinbor

Une excellente source d’informations que j’ai trouvée en essayant d’installer tout ce que Android SDK lié à la ligne de commande était this Dockerfile. Dans le fichier Docker, vous pouvez voir que l'auteur exécute une commande unique pour installer platform tools et build tools sans aucune autre interaction. Dans le cas où le PO a mis en avant, la commande serait adaptée pour:

echo y | $Android_HOME/tools/Android update sdk --all --filter build-tools-21.1.0 --no-ui
32
geoand

Je viens de passer un sacré bout de temps à obtenir Android dépendances sdk installées via une ligne de commande et, comme la documentation fournie avec les outils et en ligne fait cruellement défaut, je pensais publier ce que j'avais découvert ici.

Je travaille avec Android sdk r24.4.1 pour linux. Vous pouvez exécuter deux commandes pour répertorier les packages disponibles:

Android list sdk

et le plus exhaustif:

Android list sdk --all

Les numéros de paquet pour des paquets spécifiques diffèrent pour chaque commande ci-dessus! Par exemple, le premier répertorie le package API 23.1 revision 3 en tant que package #3 et le dernier le désigne sous la forme #29.

Désormais, il existe deux manières différentes d’installer à l’aide de la commande Android.

tools/Android update sdk --no-ui --filter <package number>

et

tools/Android update sdk -u -a -t <package number>

Étant donné que les commandes d'installation peuvent chacune prendre le paquet # en paramètre, quel numéro de paquet utilisez-vous? Après de nombreuses recherches en ligne, essais et erreurs, j'ai découvert que

Android update sdk --no-ui --filter utilise les numéros de package de Android list sdk

et

Android update sdk -u -a -t utilise les numéros de package de Android list sdk --all

En d'autres termes - pour installer API 23.1 revision 3, vous pouvez soit:

Android update sdk --no-ui --filter 3

ou

Android update sdk -u -a -t 29

Fou, mais ça marche.

21
lps

La plupart des réponses semblent ignorer le fait que vous devrez peut-être exécuter la mise à jour dans un environnement sans en-tête sans droits super-utilisateur, ce qui signifie que le script doit répondre automatiquement à toutes les invites de licence y/n.

Voici l'exemple qui fait l'affaire.

FILTER=tool,platform,Android-20,build-tools-20.0.0,Android-19,Android-19.0.1

( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \
    | Android update sdk --no-ui --all \
    --filter ${FILTER}

Peu importe le nombre d'invites que vous recevez, toutes ces réponses seront répondues. Cette boucle while/sleep ressemble à une simulation de la commande oui , et en fait, c'est bien presque . Le problème avec yes est qu’il déborde de stdout avec 'y' et qu’il n’ya pratiquement aucun délai entre l’envoi de ces caractères et que la version que j’ai eu à traiter ne comportait aucune option de dépassement de délai. Cela "polluera" stdout et le script échouera à se plaindre d'une saisie incorrecte. La solution consiste à mettre un délai entre l'envoi de 'y' à stdout, et c'est exactement ce que fait le combo while/sleep.

expect n'est pas disponible par défaut sur certaines distributions Linux et je n'avais aucun moyen de l'installer dans le cadre de mes scripts CI. Je devais donc utiliser la solution la plus générique et rien ne pouvait être plus générique qu'un simple script bash, n'est-ce pas?

En fait, j'ai blogué à ce sujet ( NSBogan ), consultez-le pour plus de détails ici si vous êtes intéressé.

20
i4niac

Si vous avez sdkmanager installé (j'utilise MAC)

lancez sdkmanager --list pour lister les paquets disponibles.

Si vous souhaitez installer des outils de construction, copiez la version préférée de la liste des packages disponibles.

Pour installer la version préférée, lancez

sdkmanager "build-tools;27.0.3"
11
Lasithds

Cependant, il est trop lent sur l'exécution

Oui, j'ai eu le même problème. Certains téléchargements de fichiers sont extrêmement lents (ou du moins ils l’ont été ces derniers jours). Si vous voulez tout télécharger, vous pouvez faire beaucoup de choses à ce sujet.

Le résultat est que rien dans le dossier build-tools, et ce que je veux, c'est aapt et apkbuilder, car je veux construire apk à partir d'une ligne de commande sans ant.

Avez-vous laissé courir jusqu'à la fin?

Vous pouvez par exemple filtrer les packages en cours de téléchargement à l'aide du commutateur -t.

Par exemple:

tools/Android update sdk --no-ui -t platform-tool

Lorsque j'ai essayé cela l'autre jour, j'ai installé la version 18.0.0 des outils de compilation. Pour une raison quelconque, la dernière version 18.0.1 n’est pas incluse dans ce filtre et le seul moyen de l’obtenir consiste à tout installer à l’aide du commutateur --all.

8
Dan Dyer

Je préfère mettre un script qui installe mes dépendances

Quelque chose comme:

#!/usr/bin/env bash
#
# Install JUST the required dependencies for the project.
# May be used for ci or other team members.
#

for I in Android-25 \
         build-tools-25.0.2  \
         tool \
         extra-Android-m2repository \
         extra-Android-support \
         extra-google-google_play_services \
         extra-google-m2repository;

 do echo y | Android update sdk --no-ui --all --filter $I ; done

https://github.com/caipivara/Android-scripts/blob/master/install-Android-dependencies.sh

5
Daniel Gomez Rico

Inspiré des réponses de @ i4niac & @ Aurélien Lambert, voici ce que je propose

csv_update_numbers=$(./Android list sdk --all | grep 'Android SDK Build-tools' | grep -v 'Obsolete' | sed 's/\(.*\)\- A.*/\1/'|sed '/^$/d'|sed -e 's/^[ \t]*//'| tr '\n' ',')
csv_update_numbers_without_trailing_comma=${csv_update_numbers%?}

( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \
    | ./Android update sdk --all -u -t $csv_update_numbers_without_trailing_comma

Explication

  • obtenir une liste de nombres séparés par des virgules, qui sont les index des packages d'outils de génération dans le résultat de la commande Android list sdk --all (ignorant les packages obsolètes).
  • continuez à jeter des "y" au terminal toutes les quelques millisecondes pour accepter les licences.
4
Vinay Wadhwa

Je viens d'avoir ce problème, alors j'ai finalement écrit une solution sale en 1 ligne en lisant et en analysant la liste des outils disponibles:

 tools/Android update sdk -u -t $(Android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')
4
Aurélien Lambert

Téléchargez Android SDK à partir de developer.Android.com (il s’agit actuellement d’un fichier de 149 Mo pour Windows OS). Il est à noter que Android a supprimé l'interface graphique de sdkmanager mais dispose d'une version en ligne de commande de sdkmanager dans le dossier bin situé dans le dossier des outils.

  1. Une fois dans le dossier bin, maintenez la touche Maj enfoncée, cliquez avec le bouton droit de la souris, puis sélectionnez Ouvrir la ligne de commande ici. Maj + clic droit >> ouvrir la ligne de commande ici.
  2. Lorsque la ligne de commande s'ouvre, tapez sdkmanager cliquez sur Entrée.
  3. Ensuite, exécutez le type sdkmanager (espace), le double tiret (--), le type list sdkmanager --list (cela répertorie tous les packages du gestionnaire de SDK).
  4. Tapez sdkmanager (espace) puis nom du paquet, appuyez sur entrée. Par exemple. sdkmanager platform-tools (appuyez sur enter) Il chargera le contrat de licence. Avec options (y/n). Entrez y pour accepter et il téléchargera le package que vous avez spécifié.

Pour plus de référence, suivez document officiel ici

J'espère que ça aide. :)

4
philemon uchechukwu

Les outils de compilation ne pouvaient pas être téléchargés automatiquement par défaut, comme le disait Nate dans https://stackoverflow.com/a/19416222/1104031 post.

Mais j’ai écrit un petit outil qui fait tout pour vous

J'ai utilisé l'outil "expect" en tant que danb dans https://stackoverflow.com/a/17863931/1104031 post. Vous n'avez besoin que d'Android-sdk et de python27, expect.

Ce script installera tous les outils de construction, tous les sdks et tout ce dont vous avez besoin pour une construction automatisée:

import subprocess,re,sys

w = subprocess.check_output(["Android", "list", "sdk", "--all"])
lines = w.split("\n")
tools = filter(lambda x: "Build-tools" in x, lines)
filters = []
for tool in tools:
  m = re.search("^\s+([0-9]+)-", tool)
  tool_no = m.group(1)
  filters.append(tool_no)

if len(filters) == 0:
  raise Exception("Not found build tools")


filters.extend(['extra', 'platform', 'platform-tool', 'tool'])

filter = ",".join(filters)

expect= '''set timeout -1;
spawn Android update sdk --no-ui --all --filter %s;
expect {
  "Do you accept the license" { exp_send "y\\r" ; exp_continue }
  eof
}''' % (filter)

print expect

ret = subprocess.call(["expect", "-c", expect])
sys.exit(ret)
2
Jacek Marchwicki

J'ai essayé cela pour tout mettre à jour, et cela a fonctionné!

echo y | $Android_HOME/tools/Android update sdk --no-ui
1
Ting

Comme indiqué dans d'autres réponses, les outils de construction nécessitent l'installation de l'indicateur --all. Il est également préférable d’utiliser un indicateur de filtre -t pour éviter d’installer TOUS les packages, mais il n’existe aucun moyen de filtrer tous les outils de construction.

Il existe déjà des demandes de fonctionnalités pour ces deux points dans le suivi des bogues AOSP. N'hésitez pas à voter pour eux, cela pourrait les faire arriver un jour:

1
Sylfo

Essayer

1. Lister tous les paquets

Android list sdk --all

2. Installer les paquets en utilisant la commande suivante

Android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command 
0
Pehlaj