【问题标题】:Android Command line tools sdkmanager always shows: Warning: Could not create settingsAndroid 命令行工具 sdkmanager 总是显示:警告:无法创建设置
【发布时间】: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

【问题讨论】:

    标签: android gitlab-ci android-build android-sdk-manager android-studio-3.6


    【解决方案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 的用户,只需执行以下操作:

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

    【讨论】:

    • 这个“android/cmdline-tools/latest”的需求从何而来?源代码 ?某处的一些文档?
    • 原因在这个话题下描述:stackoverflow.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 操作系统,所以如果你不是,你应该修改其中的一些说明。

    1. 安装 Android-SDK。

       sudo apt install android-sdk
      

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

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

       sudo mkdir /usr/lib/android-sdk/cmdline-tools
      
    3. 从这里下载 Android 命令行工具 zip (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. 转到您的主目录并编辑您的 .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
      

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

    【讨论】:

    • 它就像一个魅力!再次感谢这个完整的解决方案
    • 我仍然有“错误:无法找到或加载主类 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】:

    简单的解决方案:

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

    【讨论】:

    • 本页最佳解决方案
    • 简短而精确!
    【解决方案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=${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
    [...]
    

    【讨论】:

      【解决方案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/

      简化答案:

      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%

      【讨论】:

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

      我想分享我的经验。

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

      【讨论】:

        【解决方案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 中解决此问题(同样可以在其他操作系统中复制),请执行以下操作:

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

        2. ANDROID_HOME 设置为您的android_sdk 文件夹。

        3. 添加到您的系统路径: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 文档中的此页面也很好地解释了如何解决此问题,包括以下几点:

          1. 在没有 Android Studio 的情况下安装 Android SDK。
          2. “警告:无法创建设置”和“java.lang.IllegalArgumentException”的解决方法
          3. Android Studio 3.6 或更高版本的诀窍。
          4. 关于 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 的工作过程:

              1. 按照他们网站上的说明安装 Android Studio https://developer.android.com/studio/install
              2. 运行:flutter config --android-studio-dir &lt;location of android studio&gt; 然后flutter config --android-sdk /home/user/Android/Sdk(这是 SDK 的默认位置)
              3. 将 bin 添加到您的 PATH PATH=$PATH:/home/user/Android/Sdk/tools/bin/
              4. 然后,运行: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)。

                    【讨论】:

                    • 这不是我的问题的答案
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-02-27
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-02-04
                    • 2016-01-29
                    • 1970-01-01
                    • 2023-03-26
                    相关资源
                    最近更新 更多