Android Инструменты командной строки sdkmanager всегда показывает: Предупреждение: не удалось создать настройки - PullRequest
66 голосов
/ 27 февраля 2020

Я использую новые инструменты командной строки 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

Ответы [ 12 ]

81 голосов
/ 28 февраля 2020

Это похоже на ошибку в том, как 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 больше не имеют этой проблемы. Это обновление требует времени и полосы пропускания и не является обязательным для обходного пути.

23 голосов
/ 12 апреля 2020

Вместо передачи аргумента --sdk_root для каждого отдельного выполнения команды давайте углубимся в реальную причину.

Начиная с Android Инструменты командной строки SDK 1.0.0 (6200805) , в отличие от Android SDK 26.1.1 (4333796) , иерархия каталогов tools была изменена. Ранее он был помещен прямо в ANDROID_HOME, теперь он по-прежнему называется tools (единственное, что вы получите после распаковки загруженного commandlinetools zip-файла), но иначе вы должны поместить его внутрь каталог под названием 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 (как и прежде)
  • Загрузите и распакуйте файл commandlinetools zip в каталог с именем cmdline-tools, который находится внутри ANDROID_HOME
  • Добавьте каталог $ANDROID_HOME/cmdline-tools/tools/bin к переменной окружения PATH, чтобы система знала, где найти sdkmanager
23 голосов
/ 09 марта 2020

Для тех, кто боролся с установкой Android Инструменты командной строки для Appium на Windows 10 / x64, просто сделайте следующее:

  1. Загрузите последние инструменты командной строки из android, то есть commandlinetools- win-6200805_latest.zip
  2. Распакуйте загруженный файл
  3. Создайте каталог для хранения инструментов командной строки где-нибудь на вашем диске, указав следующий путь: android / cmdline-tools / latest В основном, когда вы распаковываете эти инструменты линии Cmd, просто переименуйте каталог tools в latest и убедитесь, что вы поместили эту папку latest в android / cmdline-tools каталог где-то на вашем диске
  4. Создание ANDROID_HOME переменной среды для каталога, в котором хранится расположение каталога инструментов cmdline, например: C: \ YourLocationWhereYouStoreTheDirectory \ android \ cmdline-tools \ latest
  5. Создать новую запись в переменной среды Path как % ANDROID_HOME% \ bin
19 голосов
/ 29 февраля 2020

Для загрузки новых cmdline-tools с Android Веб-сайт разработчика требует соблюдения следующей структуры каталогов.

5 голосов
/ 11 апреля 2020

sdkmanager пытается определить путь android -sdk, основываясь на том, где он распакован, без использования переменных среды, таких как ANDROID_SDK_ ROOT. Но это еще хуже, потому что у него есть жестко закодированная родительская папка с именем cmdline-tools, и если вы разархивируете commandlinetools внутри папки с другим именем, это не сработает, заставляя нас использовать параметр sdk_ root для подачи внутренней переменной правильно.

Итак, имея в виду, мы можем использовать следующий подход для решения этой проблемы.

Я буду предполагать, что мы используем ОС Ubuntu, так что если вы этого не сделаете, вы должны адаптировать некоторые из этих инструкций.

  1. Установка Android -SDK.

    sudo apt install android-sdk
    

    После установки у вас будет папка android -sdk в / usr / lib

  2. Создайте папку с именем cdmline-tools внутри папки android -sdk

    sudo mkdir /usr/lib/android-sdk/cmdline-tools
    
  3. Загрузите zip-инструменты для командной строки Android отсюда (https://developer.android.com/studio?hl=en-419#downloads)
  4. Распакуйте файл, который вы только что скачали, внутри / usr / lib / android -sdk / cmdline-tools

    sudo unzip /path/for/commandlinetools-linux-6200805_latest.zip -d /usr/lib/android-sdk/cmdline-tools
    
  5. Go на домашний каталог и отредактируйте свой .profile

    nano .profile
    
  6. Создать ANDROID_ SDK_ ROOT переменная

    export ANDROID_SDK_ROOT=/usr/lib/android-sdk
    
  7. Поместите папку sdkmanager в свой путь

    export PATH=$ANDROID_SDK_ROOT/cmdline-tools/tools/bin:$PATH
    
  8. Сохранить и выйти
  9. Перезагрузить свой профиль

    . ~/.profile
    
  10. Выполнить

    sdkmanager --version
    

Вы должны увидеть версию, напечатанную на вашем терминале.

5 голосов
/ 28 февраля 2020

Получил ту же проблему, пришел сюда от Google. Согласно AndroidStudio Archive , сегодня был релиз 4.1. Полагаю, это не случайно.

В этом полностью не связанном руководстве имеется жесткая ссылка на более старую версию sdk-tools для linux. Вы можете изменить URL-адрес на windows или ма c для других ОС. Сейчас я буду использовать это как исправление.

(это должен был быть комментарий, а не решение)

4 голосов
/ 02 марта 2020

Я нашел решение использовать новейшие инструменты командной строки, выполнив следующие действия:

1 - Извлечение инструментов командной строки в папку с такой структурой: например: $HOME/Development/android/cmdline-tools/latest (эта папка должна содержать lib , bin , note.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"
3 голосов
/ 24 марта 2020

Я хотел бы поделиться своим опытом.

Сначала я пытаюсь объяснить, почему структура каталогов должна выглядеть так, как показано в этом ответе - { ссылка }. { ссылка } несколько раз просил объяснения, поэтому надеюсь, что я проясню ситуацию со следующим экспериментом:

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://stackoverflow.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
1 голос
/ 05 мая 2020

Я получил ту же ошибку. Сделав все решения, я не смог это исправить. Я решил эту проблему, прочитав: https://forum.unity.com/threads/android-build-not-working.844969/

Упростить ответ:

  1. Открытие sdkmanager.bat с помощью блокнота ++
  2. Изменение этой строки от

"%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% в конце

0 голосов
/ 20 апреля 2020

Первым требованием для установки SDK (Любой метод) является установка Java и настройка JAVA_HOME path.

Затем инструментам командной строки SDK необходимо путь установки, без которого он генерирует исключение NullPointerException.
Чтобы преодолеть это, просто пройдите путь, куда вы хотите установить SDK, с аргументом платформы "--sdk_ root"
Например. sdkmanager.bat " -tools "" платформы; android - "--sdk_root =

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...