Android 命令行工具 sdkmanager 总是显示:警告:无法创建设置

Posted

技术标签:

【中文标题】Android 命令行工具 sdkmanager 总是显示:警告:无法创建设置【英文标题】:Android Command line tools sdkmanager always shows: Warning: Could not create settings 【发布时间】:2020-06-11 21:30:04 【问题描述】:

我使用 new command line tools for android 是因为旧的 Android sdk-tools 存储库不再可用。所以我改变了我的 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

【问题讨论】:

【参考方案1】:

与其为每个单独的命令执行传递参数--sdk_root,不如深入研究真正的原因。

Android SDK 命令行工具 1.0.0 (6200805) 开始,与 Android SDK 26.1.1 (4333796) 相比,tools 目录层次结构已经变了。 以前它被放置在ANDROID_HOME 中(已弃用,我们将在本段的其余部分使用术语ANDROID_SDK_ROOT),现在它仍然命名为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_SDK_ROOT。因为以后更新Android SDK,或者安装更多包的时候,其他包会放在ANDROID_SDK_ROOT下,而不是cmdline-tools下。 最终的、完整的ANDROID_SDK_ROOT目录结构应该如下所示,由很多子目录组成:build-toolscmdline-toolsemulatorlicensespatcherplatform-toolsplatformssystem-images。您可以轻松指出 build-toolscmdline-tools 是兄弟姐妹,都位于父 ANDROID_SDK_ROOT 内。

让我简单回顾一下:

设置您的首选ANDROID_SDK_ROOT(就像以前一样) 下载commandlinetools zip 文件并将其解压缩到名为cmdline-tools 的目录中,该目录位于ANDROID_SDK_ROOT 中 将目录$ANDROID_SDK_ROOT/cmdline-tools/tools/bin追加到环境变量PATH中,让系统知道在哪里可以找到sdkmanager

!!更新!!

自构建 6858069(Android SDK 命令行工具 3.0)以来,行为再次发生了变化:

解压包后,最顶层的目录是cmdline-tools。 将解压后的目录从cmdline-tools重命名为tools,并放在$ANDROID_SDK_ROOT/cmdline-tools下,所以现在应该是:$ANDROID_SDK_ROOT/cmdline-tools/tools。在里面,你应该有:NOTICE.txt bin lib source.properties。实际上根据official Command-Line Tools doc,树形结构应该是android_sdk/cmdline-tools/version/bin/,但我查过,使用versiontools在这里没有区别。 对于你的环境变量PATH,我建议你这样设置:PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin,因为以后更新后,你会得到最新的sdkmanager放在$ANDROID_SDK_ROOT/cmdline-tools/latest/bin下,把它放在前面会优先级更高。

【讨论】:

这是正确答案。与其他答案不同,它保留了“工具”目录,这实际上是 zip 文件中的内容。 ANDROID_HOME 已弃用。我们应该迁移到 ANDROID_SDK_ROOT。来源:developer.android.com/studio/command-line/variables#envar 在撰写本文时,更新后有 3 个不同的 sdkmanager 二进制文件。 $ANDROID_SDK_ROOT/tools/bin/sdkmanager --version => 26.1.1 $ANDROID_SDK_ROOT/cmdline-tools/tools/bin/sdkmanager --version => 3.6.0 $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --version => 4.0.0 谢谢。将 tools 父目录重命名为 cmdline-tools 为我修复了它。无法相信 Android SDK 是多么脆弱 我很确定这是故意的 - Google 希望让这个过程尽可能地困难,以尝试将每个人迁移到庞大的工作室包。很高兴我们有 Stack Overflow 来解决这些烦恼。【参考方案2】:

这似乎是 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 不再有这个问题。此更新需要时间和带宽,并且对于变通方法并非完全必要。

【讨论】:

工作正常,现在我收到 ./gradlew assembleDebug 错误,但似乎这与 sdkmanager 无关。谢谢! 你能给我一个例子,我可以如何清理我的 echo y 吗?我不明白。 我已经更新了我原始回复中的 sn-p 以澄清删除 echo y 命令。 谢谢!很有帮助! 导出行和sdkmanager --sdk_root=$ANDROID_HOME "tools" 位为我做了 - 谢谢!【参考方案3】:

对于那些难以在 Windows 10/x64 上安装 Android 命令行工具 for Appium 的用户,只需执行以下操作:

    从 android 下载最新的命令行工具,即 commandlinetools-win-6200805_latest.zip 解压下载的文件 创建用于在磁盘上某处存储命令行工具的目录,包括以下路径:android/cmdline-tools/latest 基本上当您解压缩此命令行工具时,只需重命名 tools 目录到 latest 并确保将此 latest 文件夹放在磁盘上的 android/cmdline-tools 目录中 为存储 cmdline 工具目录位置的目录创建 ANDROID_HOME 环境变量,例如: C:\YourLocationWhereYouStoreTheDirectory\android\cmdline-tools\latest 在 Path 环境变量中创建新条目为 %ANDROID_HOME%\bin

【讨论】:

这个“android/cmdline-tools/latest”的需求从何而来?源代码 ?某处的一些文档? 原因在这个话题下描述:***.com/questions/60460429/… 在您引用的主题中,答案是“export ANDROID_HOME="/Users/darish/development/sdk/android"”没有“最新”,没有“cmdline-tools” @Tristan cmdline-tools 是必须的,但 latest 不是必需的。 cmdline-tools 的路径(或名称)来自 Android SDK 本身。您可以运行此命令sdkmanager --sdk_root=$ANDROID_HOME --list,其中结果包括“cmdline-tools;1.0 | 1.0 | Android SDK 命令行工具” 我不知道这背后的逻辑。但它有效:-)【参考方案4】:

sdkmanager 试图根据解包位置找出 android-sdk 路径,而不使用环境变量,例如 ANDROID_SDK_ROOT。但更糟糕的是,因为它有一个名为cmdline-tools硬编码父文件夹,如果你将命令行工具解压缩到另一个名称的文件夹中,它就不起作用,迫使我们使用参数@987654326 @ 正确输入内部变量。

因此,考虑到这一点,我们可以使用以下方法来解决这个问题。

我假设我们使用的是 Ubuntu 操作系统,所以如果你不是,你应该修改其中的一些说明。

    安装 Android-SDK。

     sudo apt install android-sdk
    

    安装后,您将在 /usr/lib 中有一个名为 android-sdk 的文件夹

    在 android-sdk 文件夹中创建一个名为 cdmline-tools 的文件夹

     sudo mkdir /usr/lib/android-sdk/cmdline-tools
    

    从这里下载 Android 命令行工具 zip (https://developer.android.com/studio?hl=en-419#downloads)

    在 /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
    

您应该会在终端中看到打印的版本。

【讨论】:

它就像一个魅力!再次感谢这个完整的解决方案 我仍然有“错误:无法找到或加载主类 java.se.ee”的错误 - 你能解释一下原因吗?我应该怎么做才能解决这个问题?你没有提到任何关于那的事情。干杯 我没有遇到这个问题,但也许这个答案可以帮助你。 try it 文件夹顺序和名称...非常重要! 我得到android-sdk : Depends: android-sdk-platform-tools (&gt;= 20) but it is not going to be installed,这有一个不会自动解决的依赖链【参考方案5】:

从 Android 开发者网站下载新的 cmdline-tools 需要遵守以下目录结构。

【讨论】:

为什么需要它?这是从哪里来的?源代码 ?文档? 我将 CI 设置为使用此结构,虽然它允许我运行 sdkmanager,但当我的项目使用 gradle 构建时,它不知道如何正确定位平台和许可证,一切都失败了。 @MattWolfe,这是因为某些工具只能识别旧的 SDK 工具 (now deprecated)【参考方案6】:

简单的解决方案:

    打开 Android Studio 工具菜单, SDK Manager 在出现的窗口中 上面有内板, 选择 SDK 工具面板勾选 Android SDK 命令行工具 选择靠近窗口底部的应用按钮

【讨论】:

本页最佳解决方案 简短而精确!【参考方案7】:

混合来自 Jing Li 和 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=$PWDandroid-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
[...]

【讨论】:

【参考方案8】:

按照这些步骤,我找到了使用最新命令行工具的解决方案:

1 - 将命令行工具提取到具有以下结构的文件夹中: 例如:$HOME/Development/android/cmdline-tools/latest (此文件夹必须包含 libbinnotice.txtsource.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"

【讨论】:

矛盾信息:“最新(此文件夹必须包含 lib、bin、...)”、ANDROID_HOME=".../latest" PATH="...$ANDROID_HOME/tools/lib lib 在工具中还是在 ANDROID_HOME 中? cmdline-tools 是必须的,但 latest 不是必需的。【参考方案9】:

遇到了同样的问题,由 Google 来到这里。 根据AndroidStudio Archive,今天是4.1的发布。 我想这不是巧合。

这个completely unrelated guide 有一个旧版本sdk-tools for linux 的硬链接。 对于其他操作系统,您可以将 url 更改为 windows 或 mac。我现在将其用作修补程序。

(这应该是评论而不是解决方案)

【讨论】:

链接不起作用,我已经尝试使用旧版本,但我在代码库中使用了新功能,所以我不能再使用旧版本了。所以这个解决方案对我不起作用。【参考方案10】:

在这里总结几篇有用的帖子,对于想要快速了解的人,例如插入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 这样的警告,所以这种行为绝对是不可取的。如果您对此有修复,请将其写在 cmets 中,或者,如果您有足够的信心,只需编辑带有确切修复的脚本。

【讨论】:

不错,只是bsdtar 不适合我,我改用unzip @Ibrahim.H 如果它是一个单行程序,则免费填写以共享命令行,并且它也会删除第一个目录 我用unzip没有任何选项,解压没有--strip-components这个参数,想模拟这个选项的可以试试这个:superuser.com/questions/518347/…【参考方案11】:

我遇到了同样的错误。完成所有解决方案后,我无法修复它。我通过阅读解决了这个问题: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%

【讨论】:

谢谢你,简单而且有效! :) 但现在你应该使用 --sdk_root=%ANDROID_SDK_ROOT% 代替。【参考方案12】:

我想分享我的经验。

首先我试图解释为什么目录结构必须看起来 这个答案中显示的方式 - https://***.com/a/60460681/1758733 。 https://***.com/users/668455/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.

可能会遇到另一个问题 - Stuck at ".android/repositories.cfg could not be loaded."

其他问题和事实:

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://***.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

【讨论】:

【参考方案13】:

我在新 Mac 上下载 standalone command line tools (commandlinetools-mac-6200805_latest) 时发生了这种情况。

根据这里的所有答案,我能够让它像这样工作

# 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 的捆绑包的一部分。

【讨论】:

只指定一个文件夹到--sdk_root 工作在fedora 29 x86_64 工作站上。例如./sdkmanager --version --sdk_root=/home/software/androidsdk 我仍然收到错误:$ andriod -bash: andriod: command not found【参考方案14】:

Android SDK 工具现在位于以下位置:“android_sdk/cmdline-tools/version/bin/”;

因此,要在 Windows 中解决此问题(同样可以在其他操作系统中复制),请执行以下操作:

    在您的 android_sdk 文件夹中,创建文件夹:cmdline-tools 并在其中创建另一个文件夹:version 提取/放入您的所有文件“/bin /lib NOTICE and sources.properties”文件其中version 文件夹。

    ANDROID_HOME 设置为您的android_sdk 文件夹。

    添加到您的系统路径:android_sdk\cmdlineAndroidSDK\cmdline-tools\version\bin\

同样,将您的 Android SDK 平台工具 放入您的 android_sdk/platform-tools/ 并在 System Variables 下添加相应的 PATHENVIRONMENTAL VARIABLES

【讨论】:

没有 .. 它的“android_sdk/cmdline-tools/tools/bin/” ?? 对我来说,“android_sdk/cmdline-tools/version/bin/”工作 100% 正确。并且在android studio网站上也提到过。【参考方案15】:

基于@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/

【讨论】:

【参考方案16】:

Unity 2018 文档中的此页面也很好地解释了如何解决此问题,包括以下几点:

    在没有 Android Studio 的情况下安装 Android SDK。 “警告:无法创建设置”和“java.lang.IllegalArgumentException”的解决方法 Android Studio 3.6 或更高版本的诀窍。 关于 Java 9 或更高版本的警告,JDK 必须是版本 8。

https://docs.unity3d.com/2018.4/Documentation/Manual/android-sdksetup.html

【讨论】:

这确实有效,所有其他答案都非常过时。【参考方案17】:

安装SDK(任何方法)的首要要求是安装Java并设置JAVA_HOME路径。 然后,SDK 命令行工具需要安装路径,没有它会抛出 NullPointerException。 要克服这个问题,只需使用参数“--sdk_root”例如 sdkmanager.bat "platform-tools" "platforms;android-" --sdk_root= 传递您要安装SDK 的路径

【讨论】:

【参考方案18】:

如果您在使用 Linux 的同时,又不想用复杂的解决方法弄乱自己的双手,我建议您下载并使用the Snap version of sdkmanager。

记得在终端中使用androidsdk 而不是sdkmanager

【讨论】:

【参考方案19】:

使用 Android Studio 的 Ubuntu 工作解决方案 这是 Ubuntu 和 Debian 之类的 linux 的工作过程:

    按照他们网站上的说明安装 Android Studio https://developer.android.com/studio/install 运行:flutter config --android-studio-dir &lt;location of android studio&gt; 然后flutter config --android-sdk /home/user/Android/Sdk(这是 SDK 的默认位置) 将 bin 添加到您的 PATH PATH=$PATH:/home/user/Android/Sdk/tools/bin/ 然后,运行:flutter doctor --android-licenses 并接受所有许可证 要检查一切是否正常,请以详细模式运行医生,如下所示:flutter doctor -v

【讨论】:

【参考方案20】:

刚刚用 IDE 解决了这个问题,对我来说看起来很简单。 (实际上这是重复的先前答案,但带有图片)。只需安装 sdk 工具,一切正常。

【讨论】:

【参考方案21】:

这是非常基本和简单的解决方案 只需更改文件夹结构 将主文件夹名称更改为最新 然后创建一个名为 cmdline-tools 的文件夹 在名为 tools 的 cmdline 中创建新文件夹,并将 bin 和其他数据放入 tools 文件夹中 所以它看起来像这样 user\latest\cmdline-tools\tools

我搜索了很多,但它对我有用

【讨论】:

【参考方案22】:

安装命令行工具时,Android Studio 是必需的,即使它不是您用来开发应用程序的编辑器。取消选中过时的软件包选项卡并下载工具就可以了;这应该可以清除许可证问题,您可以返回到您最喜欢的 IDE(例如 VS Code)。

【讨论】:

这不是我的问题的答案

以上是关于Android 命令行工具 sdkmanager 总是显示:警告:无法创建设置的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - SDK 管理器

无法在 Windows 10 中安装 sdkmanager

无法运行sdkmanager.bat,错误消息JAVA_HOME未设置

返回的工具/android 找不到 sdkmanager.jar

命令行创建Android模拟器

未找到 Android sdkmanager 工具