Korzystam z nowych narzędzi Android wiersza poleceń, ponieważ stare repozytorium sdk-tools Androida nie jest już dostępne. Więc zmieniłem moją gitlab-ci, aby załadować narzędzia CommandLintools. Ale kiedy próbuję go uruchomić, pojawia się następujący błąd:
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)
Próbowałem już wykonać te polecenia ręcznie, ale pojawia się ten sam błąd. Również jeśli uruchomię sdkmanager --version
, wystąpi ten sam błąd. Mój gitlab-ci wygląda następująco:
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
poleceń.sdkmanager --sdk_root=${ANDROID_HOME} "tools"
kawałek mi to zrobił - dzięki!Dla tych, którzy mieli problemy z instalacją narzędzi wiersza poleceń Androida dla Appium w systemie Windows 10 / x64, wykonaj następujące czynności:
źródło
cmdline-tools
jest koniecznością, jednaklatest
nie jest wymagany. A ścieżka (lub nazwa)cmdline-tools
pochodzi z samego zestawu SDK systemu Android. Możesz uruchomić to poleceniesdkmanager --sdk_root=${ANDROID_HOME} --list
, w którym wyniki zawierają „cmdline-tools; 1.0 | 1.0 | Android SDK Narzędzia wiersza polecenia”Pobieranie nowych narzędzi cmdline ze strony Android Developer wymaga przestrzegania następującej struktury katalogów.
źródło
Zamiast przekazać argument
--sdk_root
dla każdego wykonania pojedynczego polecenia, zagłębmy się w prawdziwą przyczynę.Wychodząc z Android SDK wiersza polecenia Tools 1.0.0 (6200805) , w przeciwieństwie do Android SDK 26.1.1 (4333796) The
tools
hierarchia katalogu została zmieniona. Wcześniej był umieszczony bezpośrednio w środkuANDROID_HOME
, teraz jest nadal nazywanytools
(jedyną rzeczą, którą dostaniesz po rozpakowaniu pobranego pliku zip z narzędziami Commandlinetools ), ale inaczej musisz umieścić go w katalogu nazywanymcmdline-tools
własnym. Nazwacmdline-tools
pochodzi od nazwy pakietu, z której można uzyskać polecenie wyświetlania list pakietówsdkmanager --list
, których wyniki obejmującmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools
.Zawijanie
tools
katalogu docmdline-tools
katalogu sprawi, że będzie działać i pomoże pozbyć się irytującego--sdk_root
argumentu. Ale co z pozostałymi częściami?To wszystko, co musisz zmienić. Pozwól mi wyjaśnić więcej.
sdkmanager
mieszka w środkucmdline-tools/tools/bin
, lepiej ustawPATH
zmienną środowiskowącmdline-tools
nie powinno być ustawione jakoANDROID_HOME
. Ponieważ później, podczas aktualizacji zestawu SDK systemu Android lub instalowania większej liczby pakietów, pozostałe pakiety zostaną umieszczone podANDROID_HOME
, ale nie podcmdline-tools
.ANDROID_HOME
struktura katalogów powinna wyglądać jak poniżej, składa się z dość kilka podkatalogów:build-tools
,cmdline-tools
,emulator
,licenses
,patcher
,platform-tools
,platforms
,system-images
. Możesz łatwo to zauważyćbuild-tools
icmdline-tools
są rodzeństwem, wszyscy siedzą wewnątrz rodzicaANDROID_HOME
.Pozwól mi podsumować w prosty sposób:
ANDROID_HOME
(tak jak poprzednio)cmdline-tools
, który jest w środkuANDROID_HOME
$ANDROID_HOME/cmdline-tools/tools/bin
do zmiennej środowiskowejPATH
, aby system wiedział, gdzie znaleźćsdkmanager
źródło
Mam ten sam problem, przyszedł tu przez Google. Według archiwum AndroidStudio , dziś była wersja 4.1. Przypuszczam, że to nie przypadek.
Ten całkowicie niepowiązany przewodnik zawiera łącze do starszej wersji narzędzi SDK dla systemu Linux . Możesz zmienić adres URL na Windows lub Mac dla innych systemów operacyjnych. Na razie użyję tego jako poprawki.
(to miał być komentarz, a nie rozwiązanie)
źródło
Program sdkmanager próbuje obliczyć ścieżkę Android-SDK na podstawie miejsca, w którym jest rozpakowany, bez użycia zmiennych środowiskowych, takich jak ANDROID_SDK_ROOT. Ale jest gorzej, ponieważ ma zakodowany folder nadrzędny o nazwie cmdline-tools, a jeśli rozpakujesz polecenia z linii poleceń w folderze o innej nazwie, to nie działa, zmuszając nas do użycia parametru sdk_root do prawidłowego podania zmiennej wewnętrznej.
Mając to na uwadze, możemy zastosować następujące podejście do rozwiązania tego problemu.
Zakładam, że używamy Ubuntu OS, więc jeśli nie, powinieneś dostosować niektóre z tych instrukcji.
Zainstaluj zestaw Android-SDK.
Po instalacji będziesz mieć folder o nazwie android-sdk w / usr / lib
Utwórz folder o nazwie cdmline-tools w folderze android-sdk
Rozpakuj właśnie pobrany plik w / usr / lib / android-sdk / cmdline-tools
Idź do domu do domu i zmień .profile
Utwórz zmienną ANDROID_SDK_ROOT
Umieść folder sdkmanager na swojej ścieżce
Załaduj ponownie swój profil
Biegać
Wersja powinna zostać wydrukowana w twoim terminalu.
źródło
Znalazłem rozwiązanie do korzystania z najnowszych narzędzi wiersza polecenia, wykonując następujące kroki:
1 - Wyodrębnianie narzędzi wiersza polecenia do folderu o tej strukturze: np .:
$HOME/Development/android/cmdline-tools/latest
(ten folder musi zawierać lib , bin , notice.txt i source.properties )2 - Zdefiniowanie ANDROID_HOME jako zmiennej środowiskowej:
3 - Ładowanie go na PATH :
źródło
cmdline-tools
jest koniecznością, jednaklatest
nie jest wymagana.Chciałbym podzielić się swoim doświadczeniem.
Najpierw próbuję wyjaśnić, dlaczego struktura katalogów musi wyglądać tak, jak pokazano w tej odpowiedzi - https://stackoverflow.com/a/60460681/1758733 . https://stackoverflow.com/users/668455/tristan kilkakrotnie poprosił o wyjaśnienia, więc mam nadzieję, że wyjaśnię sytuację w następnym eksperymencie:
Można napotkać inny problem - nie można załadować pliku „.roidroid / repositories.cfg”.
Inne problemy i fakty:
Podsumowując, można skomponować następujący przepis na rozwój z Qt:
źródło
Ta strona z dokumentacji Unity 2018 zawiera również dobre wyjaśnienie rozwiązania tego problemu, w tym takie punkty, jak:
https://docs.unity3d.com/2018.4/Documentation/Manual/android-sdksetup.html
źródło
Zdarzyło mi się to podczas pobierania samodzielnych narzędzi wiersza poleceń (
commandlinetools-mac-6200805_latest
) na nowy komputer Mac.Na podstawie wszystkich odpowiedzi tutaj udało mi się sprawić, aby działało w ten sposób
Dokumenty tej
--sdk_root
opcji mówią „Użyj określonego katalogu głównego SDK zamiast SDK zawierającego to narzędzie ”. To sprawiło, że pomyślałem, że pomimo tego, że jest dostarczane jako samodzielne narzędzie, oczekuje się, że będzie ono częścią pakietu, w którym SDK jest również zainstalowany.źródło
Pierwszym wymaganiem instalacji zestawu SDK (dowolna metoda) jest instalacja Java i ustawienie ścieżki JAVA_HOME .
Następnie narzędzia wiersza polecenia SDK potrzebują ścieżki instalacji, bez której zgłasza wyjątek NullPointerException.
Aby temu zaradzić, po prostu podaj ścieżkę, w której chcesz zainstalować SDK z argumentem „--sdk_root”,
np. sdkmanager.bat "platform-tools" "platform; android-" --sdk_root =
źródło