1. ホーム
  2. android

[解決済み】Android コマンドラインツール sdkmanager が常に表示されます。警告。設定を作成できませんでした

2022-04-14 19:46:48

質問

私は 新しい コマンドラインツール アンドロイド用 というのも、古い 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

解決方法は?

引数を渡す代わりに --sdk_root を実行するたびに、本当の原因を深堀りしてみましょう。

出発点 Android SDK コマンドラインツール 1.0.0 (6200805) とは対照的に Android SDK 26.1.1 (4333796) は、その tools ディレクトリの階層が変更されました。 以前は ANDROID_HOME (これは非推奨です。 ANDROID_SDK_ROOT という名前になっていますが、今はまだ tools (ダウンロードしたものを解凍して得られるのは コマンドラインツール というディレクトリに配置する必要があります。 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-tools , cmdline-tools , emulator , licenses , patcher , platform-tools , platforms , system-images . を簡単に指摘することができます。 build-toolscmdline-tools は兄弟であり、すべて親である ANDROID_SDK_ROOT .

わかりやすくおさらいしておきましょう。

  • お好みの ANDROID_SDK_ROOT (前と同じように)
  • をダウンロードし、解凍してください。 コマンドラインツール という名前のディレクトリにzipファイルをコピーします。 cmdline-tools の中にある。 ANDROID_SDK_ROOT
  • ディレクトリを追加する $ANDROID_SDK_ROOT/cmdline-tools/tools/bin を環境変数 PATH がどこにあるか分かるようにします。 sdkmanager

!!!アップデイト!!!

ビルド後、再び動作が変更になりました 6858069 (Android SDK Command-line Tools 3.0)。

  • パッケージを解凍すると、一番上にあるディレクトリが cmdline-tools .
  • から解凍したディレクトリの名前を変更します。 cmdline-tools から tools の下に配置します。 $ANDROID_SDK_ROOT/cmdline-tools というようになります。 $ANDROID_SDK_ROOT/cmdline-tools/tools . そしてその内側には NOTICE.txt bin lib source.properties . 実際には コマンドラインツール公式ドキュメント ツリー構造は次のようになります。 android_sdk/cmdline-tools/version/bin/ しかし、私が確認したところ version または tools は、ここでは違いはありません。
  • 環境変数について 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 前に置くと優先順位が高くなります。