Ich benutze die neuen Kommandozeilen-Tools von Android, weil das alte SDK-Tools-Repository von Android nicht mehr verfügbar ist. Also habe ich mein gitlab-ci geändert, um die commandlintools zu laden. Aber wenn ich versuche, es auszuführen, erhalte ich den folgenden Fehler:
Warning: Could not create settings
java.lang.IllegalArgumentException
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.<init>(SdkManagerCliSettings.java:428)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:152)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:134)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:57)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Ich habe bereits versucht, diese Befehle von Hand auszuführen, aber ich erhalte den gleichen Fehler. Auch wenn ich laufe sdkmanager --version
, tritt der gleiche Fehler auf. Mein gitlab-ci sieht aus wie:
image: openjdk:9-jdk
variables:
ANDROID_COMPILE_SDK: "29"
ANDROID_BUILD_TOOLS: "29.0.3"
ANDROID_SDK_TOOLS: "6200805"
before_script:
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
- unzip -d android-sdk-linux android-sdk.zip
- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
#- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
- export ANDROID_HOME=$PWD/android-sdk-linux
- export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
- chmod +x ./gradlew
# temporarily disable checking for EPIPE error and use yes to accept all licenses
- set +o pipefail
- yes | android-sdk-linux/tools/bin/sdkmanager --licenses
- set -o pipefail
stages:
- build
- test
lintDebug:
stage: build
script:
- ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
assembleDebug:
stage: build
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/
debugTests:
stage: test
script:
- ./gradlew -Pci --console=plain :app:testDebug
echo y
Befehle zu verdeutlichen .sdkmanager --sdk_root=${ANDROID_HOME} "tools"
bisschen hat es für mich getan - danke!Für diejenigen, die Probleme mit der Installation der Android-Befehlszeilentools für Appium unter Windows 10 / x64 haben, gehen Sie wie folgt vor:
quelle
cmdline-tools
ist ein Muss, ist aberlatest
nicht erforderlich. Der Pfad (oder Name) voncmdline-tools
stammt aus dem Android SDK selbst. Sie können diesen Befehl ausführensdkmanager --sdk_root=${ANDROID_HOME} --list
, wobei die Ergebnisse "cmdline-tools; 1.0 | 1.0 | Android SDK-Befehlszeilentools"Für das Herunterladen der neuen cmdline-Tools von der Android Developer-Website muss die folgende Verzeichnisstruktur eingehalten werden.
quelle
Anstatt das Argument
--sdk_root
für jede einzelne Befehlsausführung zu übergeben, wollen wir uns eingehend mit der wahren Ursache befassen.Ab Android SDK Command-Line Tools 1.0.0 (6200805) wurde im Gegensatz zu Android SDK 26.1.1 (4333796) die
tools
Verzeichnishierarchie geändert. Früher wurde es direkt im Inneren abgelegtANDROID_HOME
, jetzt heißt es immer noch alstools
(das einzige, was Sie nach dem Entpacken der heruntergeladenen ZIP-Datei für commandlinetools erhalten ), aber anders müssen Sie es in einem Verzeichnis ablegen , das Sie selbst aufgerufen habencmdline-tools
. Der Namecmdline-tools
stammt von seinem Paketnamen, den Sie über den Befehl "Listings packages" abrufen könnensdkmanager --list
, zu dessen Ausgaben gehörencmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools
.Wenn Sie das
tools
Verzeichnis in dascmdline-tools
Verzeichnis einschließen, funktioniert es und Sie können das nervige--sdk_root
Argument loswerden . Aber was ist mit den anderen Teilen?Das ist alles, was Sie ändern müssen. Lassen Sie mich mehr erklären.
sdkmanager
lebt im Innerencmdline-tools/tools/bin
, Sie sollten besser diePATH
Umgebungsvariable einstellencmdline-tools
sollte nicht als eingestellt werdenANDROID_HOME
. Denn später, wenn Sie das Android SDK aktualisieren oder weitere Pakete installieren, werden die anderen Pakete unterANDROID_HOME
, aber nicht unter platziertcmdline-tools
.ANDROID_HOME
Verzeichnisstruktur wie folgt aussehen soll, besteht aus ganz wenigen Unterverzeichnissen:build-tools
,cmdline-tools
,emulator
,licenses
,patcher
,platform-tools
,platforms
,system-images
. Sie können leicht darauf hinweisenbuild-tools
undcmdline-tools
sind Geschwister, alle sitzen im ElternteilANDROID_HOME
.Lassen Sie mich auf einfache Weise zusammenfassen:
ANDROID_HOME
(genau wie zuvor)cmdline-tools
, die im Inneren istANDROID_HOME
$ANDROID_HOME/cmdline-tools/tools/bin
an die Umgebungsvariable anPATH
, damit das System weiß, wo es zu finden istsdkmanager
quelle
Habe das gleiche Problem, kam hier von Google. Laut dem AndroidStudio-Archiv war heute die Veröffentlichung von 4.1. Ich nehme an, das ist kein Zufall.
Diese völlig unabhängige Anleitung enthält einen Hardlink für eine ältere Version der SDK-Tools für Linux . Sie können die URL für andere Betriebssysteme in Windows oder Mac ändern. Ich werde das vorerst als Hotfix verwenden.
(das sollte ein Kommentar sein, keine Lösung)
quelle
Der sdkmanager versucht, den android-sdk-Pfad basierend auf dem Entpackungsort zu ermitteln, ohne die Umgebungsvariablen wie ANDROID_SDK_ROOT zu verwenden. Aber es wird schlimmer, weil es einen fest codierten übergeordneten Ordner namens cmdline-tools hat und wenn Sie Befehlslinientools in einem Ordner mit einem anderen Namen entpacken, funktioniert dies nicht und zwingt uns, den Parameter sdk_root zu verwenden, um die innere Variable korrekt einzugeben.
In diesem Sinne können wir den folgenden Ansatz verwenden, um dies zu lösen.
Ich gehe davon aus, dass wir Ubuntu OS verwenden. Wenn Sie dies nicht tun, sollten Sie einige dieser Anweisungen anpassen.
Installieren Sie das Android-SDK.
Nach der Installation haben Sie einen Ordner namens android-sdk in / usr / lib
Erstellen Sie einen Ordner namens cdmline-tools im android-sdk-Ordner
Entpacken Sie die gerade heruntergeladene Datei in / usr / lib / android-sdk / cmdline-tools
Gehen Sie zu Ihrem Home-Verzeichnis und bearbeiten Sie Ihr .profile
Erstellen Sie eine ANDROID_SDK_ROOT-Variable
Legen Sie den Ordner sdkmanager in Ihren Pfad
Laden Sie Ihr Profil neu
Lauf
Sie sollten die Version in Ihrem Terminal sehen.
quelle
Ich habe die Lösung gefunden, um die neuesten Befehlszeilentools mithilfe der folgenden Schritte zu verwenden:
1 - Extrahieren der Befehlszeilentools in einen Ordner mit folgender Struktur: Beispiel:
$HOME/Development/android/cmdline-tools/latest
(Dieser Ordner muss lib , bin , Notice.txt und source.properties enthalten. )2 - Definieren von ANDROID_HOME als Umgebungsvariable:
3 - Laden auf PATH :
quelle
cmdline-tools
ist ein Muss, ist aberlatest
nicht erforderlich.Ich möchte meine Erfahrungen teilen.
Zuerst versuche ich zu erklären, warum die Verzeichnisstruktur so aussehen muss, wie in dieser Antwort gezeigt - https://stackoverflow.com/a/60460681/1758733 . https://stackoverflow.com/users/668455/tristan hat mehrmals um Erklärung gebeten, also hoffe ich, dass ich die Situation mit dem nächsten Experiment klären werde:
Möglicherweise tritt ein anderes Problem auf - Es bleibt bei ".android / repositories.cfg konnte nicht geladen werden" hängen.
Andere Probleme & Fakten:
Zusammenfassend lässt sich folgendes Rezept für die Entwicklung mit Qt zusammenstellen:
quelle
Diese Seite aus der Unity 2018-Dokumentation enthält auch eine gute Erklärung zur Behebung dieses Problems, einschließlich folgender Punkte:
https://docs.unity3d.com/2018.4/Documentation/Manual/android-sdksetup.html
quelle
Dies ist mir beim Herunterladen der eigenständigen Befehlszeilentools (
commandlinetools-mac-6200805_latest
) auf einen neuen Mac passiert .Aufgrund all der Antworten hier konnte ich dafür sorgen, dass es so funktioniert
In den Dokumenten für die
--sdk_root
Option heißt es "Verwenden Sie das angegebene SDK-Stammverzeichnis anstelle des SDK, das dieses Tool enthält ". Dies ließ mich denken, dass das Tool, obwohl es eigenständig ausgeliefert wird, voraussichtlich Teil eines Bundles sein wird, in dem auch das SDK installiert ist.quelle
Die erste Voraussetzung für die Installation von SDK (Beliebige Methode) ist die Installation von Java und das Festlegen des JAVA_HOME- Pfads.
Dann benötigen SDK-Befehlszeilentools einen Installationspfad, ohne den NullPointerException ausgelöst wird.
Um dies zu überwinden, übergeben Sie einfach den Pfad, in dem Sie das SDK installieren möchten, mit dem Argument "--sdk_root"
. sdkmanager.bat "Plattform-Tools" "Plattformen; android-" --sdk_root =
quelle