web-dev-qa-db-fra.com

Comment installer l'ancienne version de Android build tools depuis la ligne de commande?

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

32
akhy

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

60
wtekiela

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 
7
rgulia

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)

3
akhy

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 $?
}
2
uthomas