Wie installiere ich Android SDK Build Tools in der Kommandozeile?

292

Ich möchte die Android-Entwicklungsumgebung über die Befehlszeile einrichten und auf das folgende Problem stoßen:

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz

Führen Sie nach dem Extrahieren der Datei aus

tools/android update sdk --no-ui

Beim Laufen ist es jedoch zu langsam

Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml

Das Ergebnis ist, dass nichts in Ordner-Build-Tools, und ich möchte, aapt und apkbuilder ist, da ich apk über die Befehlszeile ohne ant erstellen möchte.

Zhenguo Yang
quelle

Antworten:

479

Standardmäßig enthält der SDK-Manager über die Befehlszeile die Build-Tools nicht in der Liste. Sie sind in der Kategorie "veraltet". Verwenden Sie, um alle verfügbaren Downloads anzuzeigen

android list sdk --all

Verwenden Sie dann Folgendes, um eines der Pakete in dieser Liste über die Befehlszeile abzurufen:

android update sdk -u -a -t <package no.>

Wobei -u für --no-ui steht, -a für --all und -t für --filter.

Wenn Sie mehrere Pakete installieren müssen, gehen Sie wie folgt vor:

android update sdk -u -a -t 1,2,3,4, .., n 

Dabei ist 1,2, .., n die Paketnummer, die mit dem obigen Befehl list aufgelistet wurde

nsg
quelle
4
Wenn Sie Build-Tools wie 18.1.1 vermissen, ist dies der richtige Weg, um es über die Befehlszeile zu installieren.
Cray
19
es ist irgendwie scheiße, sie haben die --allOption in den offiziellen Tipps nicht erwähnt . Danke dir.
Alexander Malakhov
4
@ DanielJonker Ja, das ist es. Geben Sie einfach "Ja" für den Befehl ein, dh Echo Ja | android update sdk --all --filter tools --no-ui --force> / dev / null
nsg
4
echo "yes"kann auf verkürzt werden echo "y", aber das funktioniert sowieso nicht in allen Fällen. In einigen Fällen können Sie je nach Filter und bestimmten Paketen mehr als eine Eingabeaufforderung für eine Lizenz erhalten. echo "y"antwortet nur auf die erste Eingabeaufforderung, nicht jedoch auf den Rest. Ich versuche, es mit yesBefehl zum Laufen zu bringen, ohne Erfolg.
i4niac
3
@AlexanderMalakhov Ich stimme zu, wenn Ihr Host-Betriebssystem das Dienstprogramm hat, ist die Verwendung die beste Option. Ich habe zuerst auf "Erwarten" geschaut, aber in meinem Fall muss ich das Skript auf einer bestimmten Linux-Distribution ausführen, die in der AWS-Cloud ausgeführt wird. Diese Distribution hat keine Installation erwartet und ich habe nicht genügend Rechte, um sie als Teil des Build-Plans zu installieren. Nachdem ich mich umgesehen habe, ist die beste Lösung, die ich gefunden habe, <pre> <code> # Android SDK auf dem Headless-Server aktualisieren. FILTER = Tool, Plattform, Android-20 (Schlaf 5 && während [1]; Schlaf 1; Echo y; Fertig ) \ | android update sdk --no-ui --all \ --filter $ {FILTER} </ code> </ pre>
i4niac
140

Wie in anderen Antworten erwähnt, können Sie die --filterOption verwenden, um die installierten Pakete einzuschränken:

android update sdk --filter ...

In den anderen Antworten wird nicht erwähnt, dass Sie für die Filteroptionen konstante Zeichenfolgenbezeichner anstelle von Indizes (die sich ändern) verwenden können. Dies ist hilfreich für unbeaufsichtigte oder Skriptinstallationen. Mann für --filterOption:

... Dies akzeptiert auch die von 'list sdk --extended' zurückgegebenen Bezeichner.

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

Anschließend können Sie die Zeichenfolgen-IDs als Filteroptionen verwenden, um die gewünschten Versionen genau anzugeben:

android update sdk --filter tools,platform-tools,build-tools-19.0.3 usw

robd
quelle
27
+1 für die --extendedOption, um zu verdeutlichen, was für CI-Skripte installiert werden soll.
Nhaarman
16
android updateerfordert auch die --allOption, andernfalls wird die Verwendungshilfe angezeigt. Zum Beispiel: android update sdk --no-ui --all --filter build-tools-21.1.0(und +1 für die --extendedOption, mit der Sie die Aliase wie sehen können build-tools-21.1.0)
Petrus Repo
1
Wo ist der Mann für die --filterund --extendedOptionen?
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功
2
Ich bin damit einverstanden, dass es viel besser ist, die Zeichenfolge zu verwenden, als die Zahl, die nicht festgelegt ist.
wisbucky
1
Ich habe nach dieser --extendedOption gesucht, um ein Skript zu schreiben und es in meinem Continuous Integration Server zu verwenden, wo es die SDK-Ressourcen selbst aktualisieren kann. Netter Tipp!
Osayilgan
73

Version 25.2.3 (und höher) des Android SDK ToolsPakets enthält das neue Tool sdkmanager, das die Installation von Build-Tools über die Befehlszeile vereinfacht.
Es befindet sich im android_sdk/tools/binOrdner.

Verwendung (aus Dokumentation ):

sdkmanager packages [options]

Das packagesArgument ist ein Pfad im SDK-Stil, der in Anführungszeichen gesetzt ist (z. B. "build-tools;25.0.0"oder "platforms;android-25"). Sie können mehrere Paketpfade übergeben, die durch ein Leerzeichen getrennt sind. Sie müssen jedoch jeweils in ihre eigenen Anführungszeichen eingeschlossen werden.

Anwendungsbeispiel (auf meinem 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/

Sie können auch verschiedene Optionen angeben , um beispielsweise alle Verbindungen zur Verwendung von HTTP ( --no_https) zu zwingen oder um den Proxyserver ( --proxy_host=addressund --proxy_port=port) zu verwenden.

Verwenden Sie das --helpFlag, um die verfügbaren Optionen zu überprüfen . Auf meinem Computer (Mac) lautet die Ausgabe wie folgt:

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.
Alex Lipov
quelle
1
Bekommt sonst noch jemand Warning: Unknown argument --package_file?
Ulidtko
3
@ulidtko Es gibt einen Fehler in der Verwendungsdokumentation. Der richtige Weg ist, das Gleichheitszeichen anzuhängen, z --package_file=packages.txt.
Alex Lipov
Leider vereinfacht es die Installation nicht. Nicht alle Android-Programmierer programmieren unter Linux ohne GUI. Einige von uns tun dies unter Windows und bevorzugen eine Benutzeroberfläche, die wie jede andere Windows-Anwendung ausgeführt wird. Dies bewegt sich rückwärts statt vorwärts
AaA
2
@AaA Dies vereinfacht die Installation über die Befehlszeile . OP gab ausdrücklich an, dass er nach einer Befehlszeilenlösung sucht , und daher ist Ihr Kommentar in diesem Zusammenhang irrelevant.
Alex Lipov
55

ADB Build-Tools werden nicht automatisch mit dem Befehl android update sdk --no-ui heruntergeladen

Für die Installation des Buil-Tool-Typs (in der Konsole):

android list sdk --all

Merken Sie sich die Nummer, die vor dem Artikel aufgeführt ist, und führen Sie Folgendes aus:

android update sdk -u --all --filter <number>

Befehle sollten in / YourFolder / android-sdk-linux / tools eingegeben werden

Geben Sie auch für den Remote-Ordner (z. B. von ssh geöffneter Server) Folgendes ein:

**./android** list sdk --all
**./android** update sdk -u --all --filter <number>

Für eine einfache Liste der ADB-Pakete geben Sie das Terminal ein:

android list sdk

für die Installation aller Pakete:

android update sdk --no-ui

Oder mit Filtern (Komma ist Trennzeichen):

android update sdk --no-ui --filter 3,5,8,14
Flinbor
quelle
Für alte veraltete SDKS müssen Sie --all verwenden. Zum Beispiel Android Update SDK --no-ui --all --filter 27, um Plattform-8
Zufall
Da das SDK-Installationsprogramm bei Verwendung der GUI immer wieder abstürzte, musste ich zur Befehlszeile wechseln, was sehr hilfreich war. Vielen Dank.
Yvonne Aburrow
32

Eine großartige Informationsquelle, auf die ich beim Versuch gestoßen bin, alles, was mit Android SDK zu tun hat, über die Befehlszeile zu installieren, war diese Docker-Datei. In der Docker-Datei können Sie sehen, dass der Autor einen einzelnen Befehl zum Installieren platform toolsund build toolsohne weitere Interaktion ausführt . In dem Fall, in dem das OP vorgetragen hat, würde der Befehl angepasst werden an:

echo y | $ANDROID_HOME/tools/android update sdk --all --filter build-tools-21.1.0 --no-ui
geoand
quelle
Was ist, wenn ich nicht alle Pakete möchte ? Ich möchte nur 21.1.0 .
IgorGanapolsky
@IgorGanapolsky Vielleicht sollten Sie versuchen, ohne die --allFlagge
Geo und
21

Ich hatte gerade eine verdammte Zeit damit, Android SDK-Abhängigkeiten über die Befehlszeile zu installieren, und da die Dokumentation, die mit den Tools und online geliefert wird, leider fehlt, dachte ich, ich würde hier posten, was ich entdeckt habe.

Ich arbeite mit android sdk r24.4.1für linux. Es gibt zwei Befehle, die Sie ausführen können, um die verfügbaren Pakete aufzulisten:

android list sdk

und das erschöpfendere:

android list sdk --all

Die Paketnummern für bestimmte Pakete unterscheiden sich für jeden Befehl oben! Zum Beispiel listet das erstere Paket API 23.1 revision 3als Paket auf #3und das letztere listet es als auf #29.

Jetzt gibt es zwei verschiedene Möglichkeiten, um mit dem Android-Befehl zu installieren.

tools/android update sdk --no-ui --filter <package number>

und

tools/android update sdk -u -a -t <package number>

Welche Paketnummer verwenden Sie, da die Installationsbefehle jeweils die Paketnummer als Parameter verwenden können? Nach langem Online-Suchen und Ausprobieren habe ich das entdeckt

android update sdk --no-ui --filter verwendet die Paketnummern von android list sdk

und

android update sdk -u -a -t verwendet die Paketnummern von android list sdk --all

Mit anderen Worten - zur Installation API 23.1 revision 3können Sie entweder:

android update sdk --no-ui --filter 3

oder

android update sdk -u -a -t 29

Verrückt, aber es funktioniert.

lps
quelle
1
-aist die Kurzversion von --all, deshalb wird diese Paketnummer verwendet. ( -uist kurz für --no-uiund -tist kurz für --filter.)
Darthmaim
Ich glaube, was Ips sagt. Es ist bekannt, dass Google seinen usage()Text nicht auf dem neuesten Stand der Realität hält.
not2qubit
auf Ubuntu lief ich: $ echo y | $ ANDROID_HOME / tools / android update sdk -u -a -t 27 Wie kann ich nun bestätigen, dass ich auf Android 8 aktualisiert wurde?
Ashish Karpe
$ ANDROID_HOME / tools / android list target | grep "Basierend auf Android" Basierend auf Android 4.0.3 (API Level 15) Basierend auf Android 4.1.2 (API Level 16) Basierend auf Android 4.2.2 (API Level 17) Basierend auf Android 4.3.1 (API Level 18) Basierend auf Android 4.4.2 (API Level 19) Basierend auf Android 4.4.2 (API Level 19) Basierend auf Android 5.0.1 (API Level 21) Basierend auf Android 5.1.1 (API Level 22) Basierend auf Android 6.0 (API Level 23) Basierend auf Android 7.0 (API Level 24)
Ashish Karpe
Ursache beim Ausführen: $ ANDROID_HOME / tools / android list sdk Für die Installation oder Aktualisierung verfügbare Pakete: 1 1- SDK-Plattform Android 8.1.0, API 27, Revision 1
Ashish Karpe
20

Die meisten Antworten scheinen die Tatsache zu ignorieren, dass Sie das Update möglicherweise in einer kopflosen Umgebung ohne Superuser-Rechte ausführen müssen, was bedeutet, dass das Skript alle y/nLizenzaufforderungen automatisch beantworten muss .

Hier ist das Beispiel, das den Trick macht.

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}

Unabhängig davon, wie viele Eingabeaufforderungen Sie erhalten, werden alle diese beantwortet. Diese while/sleepSchleife sieht aus wie eine Simulation des Befehls yes , und tatsächlich ist es fast so . Das Problem dabei yesist, dass es stdout überflutet 'y'und es praktisch keine Verzögerung zwischen dem Senden dieser Zeichen gibt und die Version, mit der ich mich befassen musste, keinerlei Timeout-Option hatte. Es wird stdout "verschmutzen" und das Skript wird sich nicht über falsche Eingaben beschweren. Die Lösung besteht darin, eine Verzögerung zwischen dem Senden 'y'an stdout zu setzen, und genau das macht while/sleepCombo.

expect ist in einigen Linux-Distributionen standardmäßig nicht verfügbar und ich hatte keine Möglichkeit, es als Teil meiner CI-Skripte zu installieren. Ich musste also die allgemeinste Lösung verwenden und nichts kann allgemeiner sein als ein einfaches Bash-Skript, oder?

Tatsächlich habe ich darüber gebloggt ( NSBogan ). Weitere Informationen finden Sie hier, wenn Sie interessiert sind.

i4niac
quelle
--all installiert alle möglichen SDKs. Nicht ideal, wenn Sie sich auf einen bestimmten Filter beschränken möchten.
IgorGanapolsky
17

Wenn Sie sdkmanagerinstalliert haben (ich verwende MAC)

Ausführen, sdkmanager --listum verfügbare Pakete aufzulisten.

Wenn Sie Build-Tools installieren möchten, kopieren Sie die bevorzugte Version aus der Liste der verfügbaren Pakete.

Um die bevorzugte Version zu installieren, führen Sie

sdkmanager "build-tools;27.0.3"
Lasithds
quelle
1
Vielen Dank. Es klappt! Der Befehl "android" ist jetzt mit der neuesten Version von Android-sdk veraltet. Wir müssen ./sdkmanager aus dem Verzeichnis / tools / bin verwenden
JLavoie
8

Beim Laufen ist es jedoch zu langsam

Ja, ich hatte das gleiche Problem. Einige der Dateidownloads sind extrem langsam (oder zumindest in den letzten Tagen). Wenn Sie alles herunterladen möchten, können Sie nicht viel dagegen tun.

Das Ergebnis ist, dass nichts in Ordner-Build-Tools, und ich möchte, aapt und apkbuilder ist, da ich apk über die Befehlszeile ohne ant erstellen möchte.

Hast du es bis zum Ende laufen lassen?

Sie können die Pakete, die heruntergeladen werden, mithilfe des -tSchalters filtern .

Beispielsweise:

tools/android update sdk --no-ui -t platform-tool

Als ich dies neulich versuchte, bekam ich Version 18.0.0 der Build-Tools installiert. Aus irgendeinem Grund ist die neueste Version 18.0.1 nicht in diesem Filter enthalten, und der einzige Weg, dies zu erreichen, bestand darin, alles mit dem --allSwitch zu installieren .

Dan Dyer
quelle
2
Führen Sie dies aus, um die verfügbaren Filter zu erhalten: "android update sdk -h" ... Ein Filter, der das Update auf die angegebenen Pakettypen in Form einer durch Kommas getrennten Liste von [Plattform, System-Image, Tool, Plattform beschränkt -tool, doc, sample, source]. Dies akzeptiert auch die von 'list sdk --extended' zurückgegebenen Bezeichner.
Aleeb
6

Ich bevorzuge es, ein Skript zu erstellen, das meine Abhängigkeiten installiert

Etwas wie:

#!/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

Daniel Gomez Rico
quelle
Danke, hilf mir viel Zeit zu sparen.
utzcoz
4

Ich hatte gerade dieses Problem und schrieb schließlich eine 1-Zeilen-Bash-Dirty-Lösung, indem ich die Liste der verfügbaren Tools las und analysierte:

 tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')
Aurélien Lambert
quelle
Ich habe mein Projekt auf Play Services umgestellt und nach Lizenzen für viel mehr als nur das Erstellen von Tools gefragt. Daher ist diese Lösung sehr begrenzt.
Nurettin
Fühlt sich viel deterministischer an als Indizes, die sich im Laufe der Zeit ändern können, wenn sich Versionen ändern ...
Augustin Riedinger
4

Inspiriert von den Antworten von @ i4niac & @ Aurélien Lambert, habe ich mir das ausgedacht

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

Erläuterung

  • Holen Sie sich eine durch Kommas getrennte Liste von Zahlen, die die Indizes der Build-Tools-Pakete im Ergebnis des android list sdk --allBefehls sind (Veraltete Pakete ignorieren).
  • Wirf alle paar Millisekunden 'y' s auf das Terminal, um die Lizenzen zu akzeptieren.
Vinay W.
quelle
4

Laden Sie das Android SDK von developer.android.com herunter (derzeit eine 149-MB-Datei für Windows). Es ist erwähnenswert, dass Android die sdkmanager-GUI entfernt hat, aber eine Befehlszeilenversion des sdkmanagers im bin-Ordner hat, der sich im tools-Ordner befindet.

  1. Halten Sie im Ordner bin die Umschalttaste gedrückt, klicken Sie mit der rechten Maustaste und wählen Sie hier die Befehlszeile öffnen. Umschalt + Rechtsklick >> Befehlszeile hier öffnen.
  2. Wenn die Befehlszeile geöffnet wird, geben sdkmanagerSie die Eingabetaste ein.
  3. Führen Sie dann type sdkmanager(space), double hyphen ( --), type list aus sdkmanager --list (hier werden alle Pakete im SDK-Manager aufgelistet).
  4. Geben Sie sdkmanager (Leerzeichen) und dann den Paketnamen ein und drücken Sie die Eingabetaste. Z.B. sdkmanager platform-tools (drücken Sie die Eingabetaste) Es wird die Lizenzvereinbarung geladen. Mit Optionen (j / n). Geben Sie y ein, um zu akzeptieren, und das von Ihnen angegebene Paket wird heruntergeladen.

Weitere Informationen finden Sie im offiziellen Dokument hier

Ich hoffe das hilft. :) :)

philemon uchechukwu
quelle
4

Der Befehl "android" ist veraltet.

Verwenden Sie für Befehlszeilentools tools / bin / sdkmanager und tools / bin / avdmanager

Wenn Sie Android Studio nicht benötigen, können Sie die grundlegenden Android-Befehlszeilentools von developer.android.com im Abschnitt Nur Befehlszeilentools herunterladen .

von CLI sollte es so aussehen wie:

curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

oder

wget --output-document sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

Danach entpacken Sie einfach das Archiv in den Zielordner

unzip sdk-tools-linux.zip

Und jetzt können wir alles installieren, was Sie brauchen ...

./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'

Mit dem Befehl können Sie eine vollständige Liste der Pakete abrufen ./tools/bin/sdkmanager --list

Einige Pakete erfordern die Annahme der Lizenzvereinbarung. Sie können es interaktiv akzeptieren oder einfach "y" an den Eingabestream übergeben, wie folgt (zwei Vereinbarungen für den Fall):

echo -ne "y\ny" | ./tools/bin/sdkmanager --install 'system-images;android-29;default;x86_64'

Natürlich können Sie auch Variablen wie ANDROID_HOME oder ANDROID_SDK_ROOT exportieren (einschließlich in ~ / .profile oder ~ / .bash_profile) oder den PATH patchen Variable - dies liegt in Ihrem Ermessen.

Skriptbeispiel:

mkdir /opt/android-sdk
cd /opt/android-sdk
curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux.zip
echo -ne "y" | ./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'

Anforderungen: locken (oder wget) und entpacken

Fehlerbehebung:

Wenn Sie sehen Warning: Could not create settings, müssen Sie das toolsVerzeichnis innerhalb des cmdline-toolsVerzeichnisses im ANDROID_HOME haben (erstellen Sie es bei Bedarf mit genau diesem Namen). Siehe Android-Befehlszeilentools. sdkmanager zeigt immer Folgendes an: Warnung: Es konnten keine Einstellungen erstellt werden

Максим Шатов
quelle
2

Build-Tools konnten standardmäßig nicht automatisch heruntergeladen werden, wie Nate in https://stackoverflow.com/a/19416222/1104031 post sagte .

Aber ich habe ein kleines Tool geschrieben, das alles für dich macht

Ich habe das Tool "Expect" als Danb in https://stackoverflow.com/a/17863931/1104031 verwendet . Sie brauchen nur android-sdk und python27, expect.

Dieses Skript installiert alle Build-Tools, alle SDKS und alles, was Sie für die automatische Erstellung benötigen:

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)
Jacek Marchwicki
quelle
Wie wäre es echo "yes" | ./android update sdk --no-https --no-ui --filter 1,6?
Schemas
1
Korrigieren Sie mich, wenn ich falsch liege, aber es scheint, dass dieses Skript jedes Mal, wenn es ausgeführt wird, alles erneut herunterlädt. Ich habe es mit dem -u-Parameter versucht, aber es schien nicht zu funktionieren: /
gbero
1

Wie in anderen Antworten angegeben, muss für die Build-Tools das --allFlag installiert sein. Sie verwenden auch besser a-t Filter-Flag verwenden, um die Installation ALLER Pakete zu vermeiden. Es gibt jedoch keine Möglichkeit, alle Build-Tools zu filtern.

Es gibt bereits Funktionsanforderungen für diese beiden Punkte im AOSP-Bug-Tracker. Fühlen Sie sich frei, für sie zu stimmen, dies könnte sie eines Tages passieren lassen:

Sylfo
quelle
1

Ich habe versucht, dies alles zu aktualisieren, und es hat funktioniert!

echo y | $ANDROID_HOME/tools/android update sdk --no-ui
Ting
quelle
0

Versuchen

1. Listen Sie alle Pakete auf

android list sdk --all

2. Installieren Sie Pakete mit dem folgenden Befehl

android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command 
Pehlaj - Entwickler mobiler Apps
quelle
-1

android update sdk

Dieser Befehl aktualisiert und installiert alle neuesten Versionen für SDK-Tools, Build-Tools und SDK-Plattform-Tools.

Es ist Arbeit für mich.

Chirag
quelle