Я использую новые инструменты командной строки Android, потому что старое хранилище sdk-tools для Android больше не доступно. Поэтому я изменил свой gitlab-ci для загрузки командных инструментов. Но когда я пытаюсь запустить его, я получаю следующую ошибку:
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)
Я уже пытался выполнить эти команды вручную, но я получаю ту же ошибку. Также, если я бегу sdkmanager --version
, возникает та же ошибка. Мой gitlab-ci выглядит так:
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
команд.sdkmanager --sdk_root=${ANDROID_HOME} "tools"
немного сделал это для меня - спасибо!Для тех, кто боролся с установкой инструментов командной строки Android для Appium в Windows 10 / x64, просто сделайте следующее:
источник
cmdline-tools
является обязательным, ноlatest
не обязательно. И путь (или имя)cmdline-tools
происходит от самого Android SDK. Вы можете запустить эту командуsdkmanager --sdk_root=${ANDROID_HOME} --list
, где результаты включают «cmdline-tools; 1.0 | 1.0 | Инструменты Android SDK для командной строки»Вместо того, чтобы передавать аргумент
--sdk_root
для каждого отдельного выполнения команды, давайте углубимся в реальную причину.Начиная с Android SDK Инструменты командной строки 1.0.0 (6200805) , в отличие от Android SDK 26.1.1 (4333796) ,
tools
иерархия каталогов была изменена. Ранее он был помещен прямо внутрьANDROID_HOME
, теперь он все еще называется какtools
(единственное, что вы получите после распаковки загруженного zip-файла commandlinetools ), но иначе вы должны поместить его в каталог, которыйcmdline-tools
вызывается самостоятельно. Названиеcmdline-tools
происходит от имени пакета, которое можно получить из команды перечисления пакетовsdkmanager --list
, выходные данные которой включаютcmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools
.Обтекание
tools
каталога внутриcmdline-tools
каталога сделает его работоспособным и поможет вам избавиться от раздражающего--sdk_root
аргумента. Но как насчет других частей?Ну, это все, что вам нужно изменить. Позвольте мне объяснить больше.
sdkmanager
живет внутриcmdline-tools/tools/bin
, тебе лучше установитьPATH
переменную средыcmdline-tools
не должен быть установлен какANDROID_HOME
. Потому что позже, при обновлении Android SDK или установке дополнительных пакетов, другие пакеты будут помещены вANDROID_HOME
, но не вcmdline-tools
.ANDROID_HOME
структура каталогов должна выглядеть , как показано ниже, включают в себя довольно много подкаталогов:build-tools
,cmdline-tools
,emulator
,licenses
,patcher
,platform-tools
,platforms
,system-images
. Вы можете легко указать, чтоbuild-tools
иcmdline-tools
братья и сестры, все сидят внутри родителяANDROID_HOME
.Позвольте мне кратко повторить:
ANDROID_HOME
(как и раньше)cmdline-tools
, который находится внутриANDROID_HOME
$ANDROID_HOME/cmdline-tools/tools/bin
в переменную окруженияPATH
, чтобы система знала, где найтиsdkmanager
источник
Для загрузки новых cmdline-tools с веб-сайта Android Developer требуется следующая структура каталогов.
источник
Получил такую же проблему, пришел сюда от Google. Согласно архиву AndroidStudio , сегодня вышел релиз 4.1. Я полагаю, это не случайно.
Это совершенно не связанное руководство содержит жесткую ссылку на более старую версию sdk-tools для linux . Вы можете изменить URL-адрес Windows или Mac для других ОС. Я буду использовать это как исправление на данный момент.
(это должен был быть комментарий, а не решение)
источник
Sdkmanager пытается определить путь android-sdk в зависимости от того, где он распакован, без использования переменных среды, таких как ANDROID_SDK_ROOT. Но это еще хуже, потому что у него есть жестко закодированная родительская папка с именем cmdline-tools, и если вы разархивируете commandlinetools внутри папки с другим именем, это не сработает, вынуждая нас использовать параметр sdk_root для правильной подачи внутренней переменной.
Таким образом, имея в виду, мы можем использовать следующий подход для решения этой проблемы.
Я предполагаю, что мы используем ОС Ubuntu, поэтому, если вы этого не сделаете, вам следует адаптировать некоторые из этих инструкций.
Установите Android-SDK.
После установки у вас будет папка с именем android-sdk в / usr / lib
Создайте папку с именем cdmline-tools внутри папки android-sdk
Распакуйте файл, который вы только что загрузили, в / usr / lib / android-sdk / cmdline-tools
Перейти к вам домой, директор и отредактируйте ваш .profile
Создайте переменную ANDROID_SDK_ROOT
Поместите папку sdkmanager в свой путь
Перезагрузить ваш профиль
Запустить
Вы должны увидеть версию, напечатанную в вашем терминале.
источник
Я нашел решение использовать новейшие инструменты командной строки, выполнив следующие действия:
1 - Извлечение инструментов командной строки в папку с такой структурой: например:
$HOME/Development/android/cmdline-tools/latest
(эта папка должна содержать lib , bin , note.txt и source.properties )2 - Определение ANDROID_HOME в качестве переменной среды:
3 - Загрузка в PATH :
источник
cmdline-tools
является обязательным, ноlatest
не обязательным.Я хотел бы поделиться своим опытом.
Сначала я пытаюсь объяснить, почему структура каталогов должна выглядеть так, как показано в этом ответе - https://stackoverflow.com/a/60460681/1758733 . https://stackoverflow.com/users/668455/tristan несколько раз спрашивал объяснения, поэтому надеюсь, что я проясню ситуацию следующим экспериментом:
Может возникнуть другая проблема - застрял в «.android / repositories.cfg не может быть загружен».
Другие вопросы и факты:
Подводя итог, можно написать следующий рецепт разработки с использованием Qt:
источник
На этой странице документации Unity 2018 также есть хорошее объяснение решения этой проблемы, включая такие моменты, как:
https://docs.unity3d.com/2018.4/Documentation/Manual/android-sdksetup.html
источник
Это случилось со мной при загрузке автономных инструментов командной строки (
commandlinetools-mac-6200805_latest
) на новом Mac.Основываясь на всех ответах здесь, я смог заставить это работать так
Документы для
--sdk_root
опции говорят "Использовать указанный корень SDK вместо SDK, содержащего этот инструмент ». Это заставило меня задуматься о том, что, несмотря на то, что инструмент поставляется автономно, он должен быть частью пакета, в котором также установлен SDK.источник
Первым требованием установки SDK (Любой метод) является установка Java и установка пути JAVA_HOME .
Затем инструментам командной строки SDK требуется путь установки, без которого он генерирует исключение NullPointerException.
Чтобы преодолеть это, просто укажите путь, по которому вы хотите установить SDK с аргументом "--sdk_root".
Например. sdkmanager.bat "платформы-инструменты" "платформы; android-" --sdk_root =
источник