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.
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
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
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.
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
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
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.
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é.
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"
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
.
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
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
Android list sdk --all
(ignorant les packages obsolètes).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/')
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.
sdkmanager
cliquez sur Entrée.sdkmanager
(espace), le double tiret (--
), le type list sdkmanager --list
(cela répertorie tous les packages du gestionnaire de SDK).Pour plus de référence, suivez document officiel ici
J'espère que ça aide. :)
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)
J'ai essayé cela pour tout mettre à jour, et cela a fonctionné!
echo y | $Android_HOME/tools/Android update sdk --no-ui
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:
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