2014-09-24 18 views
30

Sto installando Android SDK per creare un server di build automatizzato. Ho avuto un problema in cui molti progetti Android basati su Gradle che gestisco si basano su una versione di strumenti di compilazione diversa. Alcuni dei progetti richiedono ancora la vecchia versione degli strumenti di sviluppo (ad esempio v19.1.0).Come installare la vecchia versione degli strumenti di sviluppo Android dalla riga di comando?

Il mio pacchetto android-sdk è stato scaricato quando build-tools versione 20 ha appena rilasciato, in modo che è l'unica versione disponibile per il download tramite android update sdk -u --filter build-tools.

Ho provato a invocare android update sdk -u --filter build-tools-19.1.0 ma non ha funzionato. C'è un modo semplice per installare la vecchia versione degli strumenti di sviluppo Android dalla riga di comando?

Nota: l'installazione tramite interfaccia grafica non è possibile

risposta

54

Supponendo di aver scaricato l'SDK di Android per Linux, sono disponibili due opzioni per aggiornare da linea di comando.

Scarica utilizzando Android strumento dalla sdk

Invece di correre il manager Android SDK con una GUI, si ha anche la possibilità di eseguire in modalità senza testa. Devi solo specificare il flag -u (o --no-ui).

Per elencare i pacchetti disponibili per l'installazione o l'aggiornamento:

$ 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 

Per scaricare pacchetti specifici è necessario specificare il numero della voce che si desidera installare dalla lista nel seguente comando:

$ ./tools/android update sdk -u -a -t [NO_OF_ITEM_TO_BE_INSTALLED] 

Esempio: se avessi voluto installare Andorid sdk strumenti di compilazione di revisione 23.0.1, vorrei digitare:

$ ./tools/android update sdk -u -a -t 7 

Download manuale

Poiché non tutti i pacchetti (specialmente quelli vecchi) è elencato quando si esegue android sdk list, è anche possibile scaricare le cose manualmente. È possibile aprire manualmente il file XML che viene visualizzato quando durante android sdk list-https://dl.google.com/android/repository/repository-11.xml

Si possono trovare lì collegamenti a vari tipi di cose da scaricare, e.g:

Per scaricare manualmente esempio la versione 19.0.1 di costruire strumenti

$ 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 

nota a margine (ubuntu):

Se stai usando Debian/Ubuntu a 64 bit, per eseguire aapt è necessario installare pacchetti aggiuntivi:

sudo apt-get install lib32stdc++6 
sudo apt-get install lib32z1 

Se stai usando CentOS (RedHat), per eseguire aapt è necessario installare pacchetti aggiuntivi:

sudo yum install zlib.i686 libstd++.i686 

Durante l'esecuzione di aapt, se si verifica un errore con GLIBC 2.14 e non si desidera aggiornare il GLIBC locale. Allora u bisogno di scaricare i seguenti pacchetti per sdk (build-tool, platform-utensile):

accumulo strumento: http://dl.google.com/android/repository/build-tools_r23.0.2-linux.zip

piattaforma strumento: https://dl.google.com/android/repository/platform-tools_r23.0.1-linux.zip

+0

Lei ha detto che dopo aver scaricato Android SDK, prima dobbiamo correre "android update sdk -u". quando lo fai senza filtri, scaricherà enormi mount di Gigs .... tutto ciò di cui ho bisogno è una versione specifica ... –

+0

@DoronShai Ho aggiornato la risposta, spero che sia completa adesso! – wtekiela

+0

@wtekiela La "nota a margine" è stata estremamente utile. Grazie! Sarebbe una domanda popolare a pieno titolo. – BrianTheLion

3

Rispondendo alla mia domanda, ho solo trovato che uno dei modi migliori per raggiungere il mio obiettivo è usando SDK manager Gradle plugin by Jake Wharton.

È semplice come aggiungere il plug-in Gradle. Eventuali pacchetti SDK richiesti verranno installati su richiesta nella posizione SDK specificata in 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' 

Questo approccio funziona alla grande soprattutto in ambiente CI senza testa. Basta non dimenticare di aggiungere ANDROID_HOME variabile d'ambiente nel caso in cui non si dispone di local.properties già (che molto probabilmente accade in ambiente CI)

7

quello che vuoi è di essere in grado di ottenere le stesse funzionalità dell'interfaccia grafica SDK manager in una riga di comando.

Emettere questo comando per interrogare tutti i pacchetti disponibili dal repository. La query restituirà i pacchetti con un numero di indice sulla sinistra.

[[email protected] ~]$ 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 
    …. 

è possibile utilizzare un comando grep per restringere la ricerca. Ad esempio:

[[email protected] ~]$ 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) 

Infine, installare il pacchetto desiderato fornendo il suo numero di indice in questo comando.

[[email protected] ~]$ android update sdk -u -a -t 5 

Le opzioni hanno questo significato:

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

basa su: How to install Android SDK Build Tools on the command line? e altri qui è la mia versione:

#!/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 $? 
} 
Problemi correlati