Инструменты командной строки Android sdkmanager всегда показывает: Предупреждение: не удалось создать настройки
Я использую новые инструменты командной строки Android, потому что старый репозиторий sdk-tools для Android больше не доступен. Поэтому я изменил свой gitlab-ci, чтобы загрузить commandlintools. Но когда я пытаюсь запустить его, я получаю следующую ошибку:
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
25 ответов
Вместо передачи аргумента --sdk_root
для выполнения каждой отдельной команды давайте углубимся в реальную причину.
Начиная с Android SDK Command-line Tools 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
(как и раньше) - Загрузите и распакуйте zip-файл commandlinetools в каталог с именем
cmdline-tools
, который находится внутриANDROID_HOME
- Добавить каталог
$ANDROID_HOME/cmdline-tools/tools/bin
в переменную средыPATH
, чтобы система знала, где найтиsdkmanager
Похоже, это ошибка способа, которым sdkmanager находит папку установки SDK.
Обходной путь - установить флаг --sdk_root
. Вы можете переместить объявление ANDROID_HOME выше, а затем использовать его с последующими командами.
- export ANDROID_HOME=$PWD/android-sdk-linux
- yes | android-sdk-linux/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} --licenses
- android-sdk-linux/tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools" "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
Кроме того, команда принятия общей лицензии перемещена в первую команду, чтобы очистить echo y
части.
Как ни странно, если ты бежишь sdkmanager --sdk_root=${ANDROID_HOME} "tools"
он обновит инструменты с 3.6.0 до 26.1.1, и sdkmanager больше не имеет этой проблемы. Это обновление требует времени и пропускной способности и не обязательно с временным решением.
Для тех, кто боролся с установкой Android Command Line Tools для Appium в Windows 10/x64, выполните следующие действия:
- Загрузите последние инструменты командной строки с android, т.е. commandlinetools-win-6200805_latest.zip
- Разархивируйте загруженный файл
- Создайте каталог для хранения инструментов командной строки где-нибудь на вашем диске, указав следующий путь: android/cmdline-tools / latest В основном, когда вы распаковываете эти инструменты строки Cmd, просто переименуйте каталог инструментов в последний и убедитесь, что вы поместили эту последнюю папку в android / cmdline-tools каталог где-нибудь на вашем диске
- Создайте переменную среды ANDROID_HOME для каталога, в котором хранится расположение каталога инструментов cmdline, например:C: \ YourLocationWhereYouStoreTheDirectory\android\cmdline-tools\latest
- Создайте новую запись в переменной среды Path как %ANDROID_HOME%\bin
Sdkmanager пытается определить путь android-sdk на основе того, где он распакован, без использования переменных среды, таких как ANDROID_SDK_ROOT. Но становится еще хуже, потому что у нее есть жестко закодированная родительская папка с именем cmdline-tools, и если вы разархивируете commandlinetools внутри папки с другим именем, это не сработает, заставив нас использовать параметр sdk_root для правильной подачи внутренней переменной.
Итак, имея это в виду, мы можем использовать следующий подход для решения этой проблемы.
Я предполагаю, что мы используем ОС Ubuntu, поэтому, если это не так, вам следует адаптировать некоторые из этих инструкций.
Установите Android-SDK.
sudo apt install android-sdk
После установки у вас будет папка под названием android-sdk в /usr/lib.
Создайте папку cdmline-tools внутри папки android-sdk.
sudo mkdir /usr/lib/android-sdk/cmdline-tools
- Загрузите zip-архив с инструментами командной строки Android отсюда (https://developer.android.com/studio?hl=en-419)
Распакуйте файл, который вы только что скачали, в /usr/lib/android-sdk/cmdline-tools
sudo unzip /path/for/commandlinetools-linux-6200805_latest.zip -d /usr/lib/android-sdk/cmdline-tools
Перейдите в домашний каталог и отредактируйте свой.profile
nano .profile
Создайте переменную ANDROID_SDK_ROOT
export ANDROID_SDK_ROOT=/usr/lib/android-sdk
Поместите папку sdkmanager на свой путь
export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$PATH
- Сохранить и выйти
Обновите свой профиль
. ~/.profile
Бегать
sdkmanager --version
Вы должны увидеть версию, напечатанную в вашем терминале.
Для загрузки новых инструментов cmdline с веб-сайта разработчика Android требуется соблюдение следующей структуры каталогов.
Простое решение:
- Откройте меню инструментов Android Studio,
- SDK Manager В появившемся окне есть внутренние панели,
- Выберите панель инструментов SDK. Установите флажок Инструменты командной строки Android SDK.
- Нажмите кнопку Применить в нижней части окна.
Смешивая ответы Цзин Ли и caller9, это мой сценарий:
variables:
ANDROID_COMPILE_SDK: "29"
ANDROID_BUILD_TOOLS: "29.0.3"
ANDROID_SDK_TOOLS: "6200805"
before_script:
- apt-get update --yes
- apt-get install --yes wget tar unzip lib32stdc++6 lib32z1
- export ANDROID_HOME=${PWD}android-home
- install -d $ANDROID_HOME
- wget --output-document=$ANDROID_HOME/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
- pushd $ANDROID_HOME
- unzip -d cmdline-tools cmdline-tools.zip
- popd
- export PATH=$PATH:${ANDROID_HOME}/cmdline-tools/tools/bin/
- sdkmanager --version
- set +o pipefail
- yes | sdkmanager --sdk_root=${ANDROID_HOME} --licenses
- set -o pipefail
- sdkmanager --sdk_root=${ANDROID_HOME} "platforms;android-${ANDROID_COMPILE_SDK}"
- sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools"
- sdkmanager --sdk_root=${ANDROID_HOME} "build-tools;${ANDROID_BUILD_TOOLS}"
- export PATH=$PATH:${ANDROID_HOME}/platform-tools/
- chmod +x ./gradlew
[...]
Я нашел решение использовать последние инструменты командной строки, выполнив следующие действия:
1 - Извлечение инструментов командной строки в папку с такой структурой: например: $HOME/Development/android/cmdline-tools/latest
(эта папка должна содержать lib, bin, notice.txt и source.properties)
2 - Определение ANDROID_HOME как переменной среды:
ANDROID_HOME="$HOME/Development/android/cmdline-tools/latest"
3 - Загрузка по PATH:
PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/lib:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools"
У меня такая же ошибка. После выполнения всех решений я не смог это исправить. Я решил эту проблему, прочитав:https://forum.unity.com/threads/android-build-not-working.844969/
Упростите ответ:
- Открытие sdkmanager.bat с помощью блокнота ++
- Изменение этой строки с
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS%
к
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS% --sdk_root=%ANDROID_HOME%
(Примечание: добавление --sdk_root=%ANDROID_HOME%
в конце
Обобщая несколько полезных сообщений здесь, и для людей, которым нужен быстрый фрагмент, например, для подключения
Dockerfile
у меня работает следующий скрипт:
RUN mkdir -p /opt/android/cmdline-tools/latest \
&& cd /opt/android/cmdline-tools/latest \
&& wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip \
&& bsdtar --strip-components=1 -xvf commandlinetools-linux-6858069_latest.zip \
&& yes | bin/sdkmanager --licenses \
&& bin/sdkmanager "build-tools;29.0.2" "platforms;android-29" \
&& rm commandlinetools-linux-6858069_latest.zip
Это просто требует
bsdtar
для установки (обычно в популярных дистрибутивах). Установлены инструменты для платформы / сборки Android версии 29, и корень Android sdk будет расположен в
/opt/android
. Хотя эта установка работает для меня без предупреждений как таковая, у меня есть проблема при переустановке уже установленных пакетов или, возможно, при установке другой версии пакетов: она конфликтует с уже имеющимися пакетами и создает фиктивные каталоги в корне sdk с
-2
,
-3
суффиксы. Затем эти каталоги игнорируются, а предупреждения вроде
Observed package id 'emulator' in inconsistent location
печатаются, поэтому такое поведение определенно нежелательно. Если у вас есть исправление для этого, напишите об этом в комментариях или, если вы достаточно уверены, просто отредактируйте скрипт с точным исправлением.
Просто решил эту проблему с помощью IDE, для меня это выглядит довольно просто. (На самом деле это дубликат предыдущего ответа, но с изображением). Просто установите инструменты sdk, и все должно работать.
Получил ту же проблему, пришел сюда через Google. Согласно архиву AndroidStudio, сегодня вышла версия 4.1. Полагаю, это не совпадение.
Это совершенно не связанное с этим руководство содержит жесткую ссылку на более старую версию sdk-tools для Linux. Вы можете изменить URL-адрес на Windows или Mac для других ОС. Я использую это как исправление сейчас.
(это должен был быть комментарий, а не решение)
Это случилось со мной при загрузке автономных инструментов командной строки (commandlinetools-mac-6200805_latest
) на новом Mac.
Основываясь на всех ответах здесь, я смог заставить его работать вот так
# Define ANDROID_HOME, if not defined already
export ANDROID_HOME="~/Library/Android/sdk"
# Create the folder if missing
mkdir -p $ANDROID_HOME
# Let the tool know that it should use that SDK location.
sdkmanager --list --sdk_root=$ANDROID_HOME
Документы для --sdk_root
вариант: "Использовать указанный корень SDK вместо SDK, содержащего этот инструмент". Это заставило меня подумать, что, несмотря на то, что этот инструмент поставляется отдельно, ожидается, что он станет частью пакета, в котором также установлен SDK.
Хочу поделиться своим опытом.
Сначала я пытаюсь объяснить, почему структура каталогов должна выглядеть так, как показано в этом ответе - /questions/54222563/instrumentyi-komandnoj-stroki-android-sdkmanager-vsegda-pokazyivaet-preduprezhde/54222581#54222581. Tristan несколько раз просил объяснений, поэтому надеюсь, что я проясню ситуацию с помощью следующего эксперимента:
1. unpack cmdline-tools to any path, for example c:\Android\tools;
2. create a folder for SDK, let it be c:\Android\SDK;
3. install cmdline-tools (yes, we install cmdline-tools again =)):
c:\Android\tools\bin\sdkmanager --sdk_root=c:\Android\SDK "cmdline-tools;latest"
4. at this moment we can examine c:\Android\SDK and locate
the path c:\Android\SDK\cmdline-tools\latest. If we compare
this folder with the previous version c:\Android\tools we find out
that they are identical. The new installed c:\Android\SDK\cmdline-tools\latest\sdkmanager works
without --sdk_root argument so we could initially unpack cmdline-tools
to cmdline-tools\latest.
Можно столкнуться с другой проблемой - застрял на ".android/repositories.cfg не может быть загружен".
Прочие вопросы и факты:
1. QtCreator works with another sdkmanager that placed in SDK_ROOT/tools/bin
2. SDK_ROOT/tools/bin/sdkmanager works only with JDK 8
3. Java uses its own storage for certificates and it's not convinient usually.
Thus one may want to use Windows certificate store. Unfortunately Grandle has the
issue - https://stackru.com/a/59056537 - so use the following:
set JAVA_OPTS=-Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.trustStore=NUL
Подводя итог, можно составить следующий рецепт разработки с Qt:
1. download commandlinetools-win-6200805_latest.zip
2. extract cmdline-tools so there will be hierarchy
SDKROOT
- cmdline-tools
- latest
- bin
- sdkmanager.bat
- ...
- lib
- ...
3. install JDK 8. set JAVA_HOME=c:\path\to\java so that %JAVA_HOME%/bin/java.exe exists.
4. set JAVA_OPTS=-Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.trustStore=NUL
5. NDK may be downloaded manually or installed with sdkmanager
6. install required components:
SDKROOT\cmdline-tools\latest\bin\sdkmanager "tools" "build-tools;BUILD_TOOLS_VERSION" "platform-tools" "platforms;ANDROID_VERSION"
7. run qtcreator from console so JAVA_OPTS is taken into account (or set it globaly for windows user or even station)
8. tools -> options -> devices set paths to JDK 8, SDKROOT and NDK
На основе обновленных предложений @Jing Li. Вот моя версия gitlab-ci.yml
image: openjdk:8-jdk
variables:
ANDROID_COMPILE_SDK: "30"
ANDROID_BUILD_TOOLS: "29.0.2"
ANDROID_COMMAND_LINE_TOOLS: "6858069"
GRADLE_OPTS: "-Dorg.gradle.daemon=false"
before_script:
- export GRADLE_USER_HOME=$(pwd)/.gradle
- chmod +x ./gradlew
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
- mkdir -p android-sdk-linux/cmdline-tools
- export ANDROID_SDK_ROOT=$PWD/android-sdk-linux
- cd android-sdk-linux/cmdline-tools
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS}_latest.zip
- unzip android-sdk.zip
- rm android-sdk.zip
- mv cmdline-tools version
- echo y | version/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
- echo y | version/bin/sdkmanager "platform-tools" >/dev/null
- echo y | version/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
- export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools/
# temporarily disable checking for EPIPE error and use yes to accept all licenses
- set +o pipefail
- yes | version/bin/sdkmanager --licenses
- set -o pipefail
- cd ../../
- chmod +x ./gradlew
cache:
key: ${CI_PROJECT_ID}
paths:
- .gradle/
Инструменты Android SDK теперь находятся в следующем месте: " android_sdk / cmdline-tools / version / bin /";
Поэтому, чтобы решить эту проблему в Windows (то же самое можно воспроизвести в другой ОС), выполните следующие действия:
Внутри вашего
android_sdk
папку, создайте папку:cmdline-tools
и внутри него создайте еще одну папку:version
извлеките / поместите все ваши файлы "/bin /lib NOTICE и sources.properties" внутрь этогоversion
папка.Установлен
ANDROID_HOME
на вашandroid_sdk
папка.- Добавьте в свой системный путь:
android_sdk\cmdlineAndroidSDK\cmdline-tools\version\bin\
Точно так же поместите инструменты платформы Android SDK в свойandroid_sdk/platform-tools/
и добавить соответствующие PATH
к ENVIRONMENTAL VARIABLES
под System Variables
На этой странице документации Unity 2018 также есть хорошее объяснение решения этой проблемы, включая такие моменты, как:
- Установка Android SDK без Android Studio.
- Обходной путь для "Предупреждение: не удалось создать настройки" и "java.lang.IllegalArgumentException"
- Уловка для Android Studio версии 3.6 или новее.
- Предупреждение о Java 9 или новее, JDK должен быть версии 8.
https://docs.unity3d.com/2018.4/Documentation/Manual/android-sdksetup.html
Jing Li Вместо того, чтобы передавать аргумент --sdk_root для каждого отдельного выполнения команды, давайте углубимся в реальную причину.
Начиная с Android SDK Command-line Tools 1.0.0 (6200805), в отличие от Android SDK 26.1.1 (4333796), иерархия каталогов инструментов была изменена. Раньше он располагался прямо внутри ANDROID_HOME, теперь он по-прежнему называется tools (единственное, что вы получите после распаковки загруженного zip-файла commandlinetools), но, по-другому, вы должны поместить его в каталог под названием cmdline-tools самостоятельно. Название cmdline-tools происходит от имени пакета, из которого вы можете получить из списка пакетов команду sdkmanager --list, выходные данные которой включают cmdline-tools;1.0 | 1.0 | Инструменты командной строки Android SDK.
Помещение каталога tools в каталог cmdline-tools заставит его работать и поможет вам избавиться от надоедливого аргумента --sdk_root. А как насчет других частей?
Начиная с новых обновлений, есть некоторые изменения, которые не упомянуты в документации. После распаковки пакета инструментов командной строки самый верхний каталог, который вы получите, — это cmdline-tools. Переименуйте распакованный каталог из cmdline-tools в tools и поместите его в папку $C:/Android/cmdline-tools.
теперь это будет выглядеть как $C:/Android/cmdline-tools/tools
и он будет работать идеально.
Рабочее решение для Ubuntu с использованием Android Studio Вот рабочая процедура для Ubuntu и Debian, таких как linux:
- установите Android studio, как описано на их веб-сайте https://developer.android.com/studio/install
- запустить :
flutter config --android-studio-dir <location of android studio>
потомflutter config --android-sdk /home/user/Android/Sdk
(это расположение SDK по умолчанию) - добавьте корзину в свой PATH
PATH=$PATH:/home/user/Android/Sdk/tools/bin/
- После этого запустите:
flutter doctor --android-licenses
и принять все лицензии. Чтобы проверить, все ли в порядке, запустите Doctor в режиме verbos, как показано ниже:flutter doctor -v
Первым требованием для установки SDK (любым методом) является установка Java и установка пути JAVA_HOME.
Затем инструментам командной строки SDK нужен путь установки, без которого он генерирует исключение NullPointerException.
Чтобы решить эту проблему, просто укажите путь, по которому вы хотите установить SDK, с аргументом "--sdk_root",
например. sdkmanager.bat "платформа-инструменты" "платформы;android-" --sdk_root=
по состоянию на 7 марта 2023 года менеджер SDK заявляет: переместите исходное содержимое каталога cmdline-tools, включая каталог lib, каталог bin, файл NOTICE.txt и файл source.properties, во вновь созданный последний каталог. Теперь вы можете использовать инструменты командной строки из этого места.
Вот очень простое и простое решение, просто измените структуру папок, измените имя основной папки на последнее, затем создайте папку с именем cmdline-tools, создайте новую папку внутри cmdline с именем tools и поместите bin и другие данные в папку инструментов, чтобы она выглядела как этот пользователь\ последние\cmdline-tools\tools
Я много искал, но это сработало для меня
Если вы используете Linux и в то же время не хотите возиться со сложными обходными путями, я рекомендую вам загрузить и использовать версию sdkmanager для Snap.
Не забудьте использовать androidsdk
вместо того sdkmanager
в терминале.
Android Studio необходима при установке инструментов командной строки, даже если это не тот редактор, который вы используете для разработки приложений. Снимите флажок с вкладки устаревших пакетов и загрузите инструменты; это должно устранить проблему с лицензией, и вы сможете вернуться к своей любимой среде IDE (например, VS Code).