J'installe Android SDK pour créer un serveur de build automatisé. Je suis entré dans un problème où de nombreux projets basés sur Gradle Android projets que je gère dépendent de différentes versions d'outils de build) Certains projets nécessitent encore une ancienne version des outils de build (par exemple v19.1.0).
Mon package Android-sdk a été téléchargé lorsque la version 20 de build-tools vient de sortir, c'est donc la seule version disponible au téléchargement via Android update sdk -u --filter build-tools
.
J'ai essayé d'invoquer Android update sdk -u --filter build-tools-19.1.0
mais ça n'a pas marché. Existe-t-il un moyen simple d'installer l'ancienne version de Android build tools depuis la ligne de commande?
Remarque: l'installation via l'interface graphique n'est pas possible
En supposant que vous avez téléchargé le Android SDK pour linux, vous avez deux options pour mettre à jour à partir de la ligne de commande.
Téléchargez à l'aide de l'outil Android à partir du sdk
Au lieu d'exécuter le gestionnaire de sdk Android avec une interface graphique, vous avez également la possibilité de l'exécuter en mode sans tête. Il vous suffit de spécifier -u
(ou --no-ui
) drapeau.
Pour répertorier les packages disponibles pour l'installation ou la mise à niveau:
$ cd Android-sdk-linux
$ ./tools/Android list sdk --all
Refresh Sources:
(...)
Fetching URL: https://dl.google.com/Android/repository/repository-11.xml
(...)
Packages available for installation or update: 166
1- Android SDK Tools, revision 24.4.1
2- Android SDK Tools, revision 25.0.9 rc10
3- Android SDK Platform-tools, revision 23.1
4- Android SDK Platform-tools, revision 24 rc1
5- Android SDK Build-tools, revision 24 rc1
6- Android SDK Build-tools, revision 23.0.2
7- Android SDK Build-tools, revision 23.0.1
8- Android SDK Build-tools, revision 23 (Obsolete)
(...)
162- Google Play Billing Library, revision 5
163- Google Play Licensing Library, revision 2
164- Android Auto API Simulators, revision 1
165- Google Web Driver, revision 2
166- Intel x86 Emulator Accelerator (HAXM installer), revision 6.0.1
Pour télécharger des packages spécifiques, vous devez spécifier le numéro de l'élément que vous souhaitez installer dans la liste de la commande suivante:
$ ./tools/Android update sdk -u -a -t [NO_OF_ITEM_TO_BE_INSTALLED]
Exemple: si je voulais installer la révision 23.0.1 des outils de construction d'andorid sdk, je taperais:
$ ./tools/Android update sdk -u -a -t 7
Téléchargement manuel
Comme tous les packages (en particulier les anciens) ne sont pas répertoriés lorsque vous effectuez Android sdk list
, vous pouvez également télécharger des éléments manuellement. Vous pouvez ouvrir manuellement le fichier XML qui s'affiche lors de Android sdk list
- https://dl.google.com/Android/repository/repository-11.xml
Vous pouvez y trouver des liens vers différents types de choses à télécharger, par exemple:
Pour télécharger manuellement par exemple version 19.0.1 des outils de build
$ cd Android-sdk-linux/build-tools
$ wget http://dl.google.com/Android/repository/build-tools_r19.0.1-linux.Zip
$ unzip build-tools_r19.0.1-linux.Zip
$ mv Android-4.4.2 19.0.1
$ rm build-tools_r19.0.1-linux.Zip
Note latérale (ubuntu):
Si vous utilisez debian/ubuntu 64 bits, pour exécuter aapt
, vous devrez installer des paquets supplémentaires:
Sudo apt-get install lib32stdc++6
Sudo apt-get install lib32z1
Si vous exécutez CentOs (RedHat), pour exécuter aapt
, vous devrez installer des packages supplémentaires:
Sudo yum install zlib.i686 libstd++.i686
Lors de l'exécution de aapt
, si vous obtenez une erreur avec GLIBC 2.14 et que vous n'avez pas l'habitude de mettre à niveau votre locale GLIBC. Ensuite, vous devez télécharger les packages suivants pour sdk (build-tool, platform-tool):
outil de build: http://dl.google.com/Android/repository/build-tools_r23.0.2-linux.Zip
plate-forme-outil: https://dl.google.com/Android/repository/platform-tools_r23.0.1-linux.Zip
Ce que vous voulez, c'est obtenir la même fonctionnalité de l'interface graphique du SDK Manager dans une ligne de commande.
Exécutez cette commande pour interroger tous les packages disponibles à partir du référentiel. La requête renverra les packages avec un numéro d'index à gauche.
[rgulia@xinu ~]$ Android list sdk --all
Refresh Sources:
Fetching https://dl-ssl.google.com/Android/repository/addons_list-2.xml
Validate XML
Parse XML
Fetched Add-ons List successfully
…
Validate XML: https://dl-ssl.google.com/Android/repository/sys-img/x86/addon-x86.xml
Parse XML: https://dl-ssl.google.com/Android/repository/sys-img/x86/addon-x86.xml
Packages available for installation or update: 138
1- Android SDK Tools, revision 24.1.2
2- Android SDK Platform-tools, revision 22
3- Android SDK Build-tools, revision 22.0.1
4- Android SDK Build-tools, revision 22 (Obsolete)
5- Android SDK Build-tools, revision 21.1.2
….
Vous pouvez utiliser une commande grep pour affiner votre recherche. Par exemple:
[rgulia@xinu ~]$ Android list sdk --all | grep -i tools | grep 21
5- Android SDK Build-tools, revision 21.1.2
6- Android SDK Build-tools, revision 21.1.1 (Obsolete)
7- Android SDK Build-tools, revision 21.1 (Obsolete)
8- Android SDK Build-tools, revision 21.0.2 (Obsolete)
9- Android SDK Build-tools, revision 21.0.1 (Obsolete)
10- Android SDK Build-tools, revision 21 (Obsolete)
Enfin, installez le package souhaité en fournissant son numéro d'index dans cette commande.
[rgulia@xinu ~]$ Android update sdk -u -a -t 5
Les options ont cette signification:
-u (--no-ui) # Headless mode
-a (--all) # Includes all packages, included the obsolete ones
-t (--filter) # in this example we have filtered by package index, i.e. 5
Répondant à ma propre question, je viens de découvrir que l'un des meilleurs moyens d'atteindre mon objectif est d'utiliser plugin Gradle du gestionnaire de SDK par Jake Wharton .
C'est aussi simple que d'ajouter un plugin Gradle. Tous les packages SDK requis seront installés sur demande à l'emplacement SDK spécifié dans local.properties
.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.12.+'
classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
}
}
apply plugin: 'Android-sdk-manager'
apply plugin: 'com.Android.application'
Cette approche fonctionne très bien, en particulier dans un environnement CI sans tête. N'oubliez pas d'ajouter Android_HOME
variable d'environnement au cas où vous n'en auriez pas local.properties
déjà (ce qui se produit très probablement dans l'environnement CI)
Basé sur: Comment installer Android SDK Build Tools sur la ligne de commande? et d'autres voici ma version:
#!/bin/bash -e
installAndroidSdk() {
local url=http://dl.google.com/Android/android-sdk_r24.3-linux.tgz
Sudo apt-get install -y lib32stdc++6 lib32z1
# Install Android SDK
(
cd /opt
curl -o Android.tgz -sL $url
tar xzf Android.tgz
mv Android-sdk-linux/ Android
rm Android.tgz
echo "export Android_HOME=/opt/Android" > /etc/profile.d/Android.sh
echo "export PATH=\$PATH:\$Android_HOME/tools:\$Android_HOME/platform-tools" >> /etc/profile.d/Android.sh
source /etc/profile.d/Android.sh
Android list sdk --all --extended > /tmp/Android-skds
modules=( platform-tools build-tools-22.0.1 Android-22 )
for module in ${modules[@]}; do
moduleId=$(less /tmp/Android-skds | sed -n "s/id: \(.*\) or \"$module\"/\1/p")
if [[ ! -z "$moduleId" ]]; then
expect -c "
set timeout -1 ;
spawn Android update sdk -u -a -t $moduleId;
expect {
\"Do you accept the license\" { exp_send \"y\r\" ; exp_continue }
eof
}
"
else
echo "[WARNING] - $module was not installed."
fi
done
echo "export PATH=\$PATH:\$Android_HOME/build-tools/22.0.1" | Sudo tee -a /etc/profile.d/Android.sh
rm -f /tmp/Android-skds
Sudo apt-get install -y Android-tools-adb
)
return $?
}