Ich installiere Android SDK, um einen automatisierten Build-Server zu erstellen. Ich bin auf ein Problem gestoßen, bei dem viele Gradle-basierte Android Projekte, die ich verwalte, auf verschiedene Build-Tools-Versionen angewiesen sind Einige der Projekte erfordern noch alte Build-Tools (zB v19.1.0).
Mein Android-SDK-Paket wurde heruntergeladen, als Build-Tools Version 20 veröffentlicht wurde. Dies ist die einzige Version, die über Android update sdk -u --filter build-tools
Heruntergeladen werden kann.
Ich habe versucht, Android update sdk -u --filter build-tools-19.1.0
Aufzurufen, aber es hat nicht funktioniert. Gibt es eine einfache Möglichkeit, alte Versionen von Android Build Tools über die Befehlszeile zu installieren?
Hinweis: Eine Installation über die GUI ist nicht möglich
Angenommen, Sie haben das Android SDK für Linux heruntergeladen, dann haben Sie zwei Möglichkeiten, über die Befehlszeile zu aktualisieren.
Download mit Android Tool vom SDK
Anstatt den Android sdk-Manager mit einer grafischen Benutzeroberfläche auszuführen, haben Sie auch die Möglichkeit, im Headless-Modus zu arbeiten. Sie müssen nur -u
(Oder --no-ui
) Angeben. ) Flagge.
So listen Sie Pakete auf, die für die Installation oder das Upgrade verfügbar sind:
$ 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
Um bestimmte Pakete herunterzuladen, müssen Sie die Nummer des zu installierenden Elements aus der Liste im folgenden Befehl angeben:
$ ./tools/Android update sdk -u -a -t [NO_OF_ITEM_TO_BE_INSTALLED]
Beispiel: Wenn ich andorid sdk build tools revision 23.0.1 installieren wollte, würde ich Folgendes eingeben:
$ ./tools/Android update sdk -u -a -t 7
Manueller Download
Da beim Ausführen von Android sdk list
Nicht jedes Paket (insbesondere die alten) aufgelistet wird, können Sie die Dinge auch manuell herunterladen. Sie können die angezeigte XML-Datei manuell öffnen, wenn Android sdk list
- https://dl.google.com/Android/repository/repository-11.xml
Dort finden Sie Links zu verschiedenen Arten von Dingen zum Herunterladen, z.
Zum manuellen Herunterladen von z. Version 19.0.1 der Build-Tools
$ 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
Randnotiz (Ubuntu):
Wenn Sie Debian/Ubuntu 64-Bit ausführen, müssen Sie zum Ausführen von aapt
zusätzliche Pakete installieren:
Sudo apt-get install lib32stdc++6
Sudo apt-get install lib32z1
Wenn Sie CentOs (RedHat) ausführen, müssen Sie zum Ausführen von aapt
zusätzliche Pakete installieren:
Sudo yum install zlib.i686 libstd++.i686
Wenn Sie beim Ausführen von aapt
eine Fehlermeldung mit GLIBC 2.14 erhalten und Ihr Gebietsschema GLIBC nicht aktualisieren möchten. Dann müssen Sie die folgenden Pakete für sdk herunterladen (Build-Tool, Plattform-Tool):
build-Tool: http://dl.google.com/Android/repository/build-tools_r23.0.2-linux.Zip
plattform-Tool: https://dl.google.com/Android/repository/platform-tools_r23.0.1-linux.Zip
Sie möchten in der Lage sein, die gleiche Funktionalität der SDK Manager-GUI in einer Befehlszeile abzurufen.
Setzen Sie diesen Befehl ab, um alle verfügbaren Pakete aus dem Repository abzufragen. Die Abfrage gibt die Pakete mit einer Indexnummer auf der linken Seite zurück.
[[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
….
Sie können einen grep-Befehl verwenden, um Ihre Suche einzugrenzen. Beispielsweise:
[[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)
Installieren Sie abschließend das gewünschte Paket, indem Sie die Indexnummer in diesem Befehl angeben.
[[email protected] ~]$ Android update sdk -u -a -t 5
Die Optionen haben folgende Bedeutung:
-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
Bei der Beantwortung meiner eigenen Frage habe ich festgestellt, dass der beste Weg, mein Ziel zu erreichen, die Verwendung von SDK-Manager Gradle-Plugin von Jake Wharton ist.
Es ist so einfach wie das Hinzufügen eines Gradle-Plugins. Alle erforderlichen SDK-Pakete werden bei Bedarf an dem in local.properties
Angegebenen SDK-Speicherort installiert.
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'
Dieser Ansatz eignet sich besonders in einer Umgebung mit kopfloser CI. Vergessen Sie jedoch nicht, die Umgebungsvariable Android_HOME
Hinzuzufügen, falls Sie noch nicht local.properties
Haben (was höchstwahrscheinlich in einer CI-Umgebung der Fall ist).
Basierend auf: Wie installiere ich Android SDK Build Tools in der Befehlszeile? und anderen hier ist meine 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 $?
}