我使用新的 Android 命令行工具 ,因为Android的旧 sdk-tools 存储库不再可用。所以我改变了我的 gitlab-ci 来加载commandlintools. 但是当我尝试运行它时,我收到以下错误:
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 看起来像:
sdkmanager --version
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
--sdk_root让我们深入研究真正的原因,而不是为每个单独的命令执行传递参数。
--sdk_root
从 Android SDK Command-line Tools 1.0.0 (6200805) 开始,与 Android SDK 26.1.1 (4333796) 相比,tools目录层次结构发生了变化。以前它被放置在里面ANDROID_HOME(不推荐使用,我们将在ANDROID_SDK_ROOT本段的其余部分使用该术语),现在它仍然被命名为(解压下载的 commandlinetools zip 文件tools后你会得到的唯一东西),但不同的是,你必须将它放在您自己调用的目录中。该名称来自其包名称,您可以从列出包命令中获取,其输出包括. __cmdline-tools``cmdline-tools``sdkmanager --list``cmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools
tools
ANDROID_HOME
ANDROID_SDK_ROOT
cmdline-tools``cmdline-tools``sdkmanager --list``cmdline-tools;1.0 | 1.0 | Android SDK Command-line Tools
将目录包装tools在cmdline-tools目录中可以使其工作,并帮助您摆脱烦人的--sdk_root论点。但是其他部分呢?
cmdline-tools
好吧,这就是你必须改变的一切。让我再解释一下。
sdkmanager
cmdline-tools/tools/bin
PATH
build-tools
emulator
licenses
patcher
platform-tools
platforms
system-images
让我以简单的方式回顾一下:
$ANDROID_SDK_ROOT/cmdline-tools/tools/bin
!!更新!!
自构建以来,行为再次发生了变化6858069(Android SDK 命令行工具 3.0):
6858069
$ANDROID_SDK_ROOT/cmdline-tools
$ANDROID_SDK_ROOT/cmdline-tools/tools
NOTICE.txt bin lib source.properties
android_sdk/cmdline-tools/version/bin/
version
PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin
$ANDROID_SDK_ROOT/cmdline-tools/latest/bin