Androidコマンドラインツールのsdkmanagerが常に表示する:警告:設定を作成できませんでした


64

Androidの古い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

回答:


80

これは、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でこの問題は発生しなくなります。この更新には時間と帯域幅が必要であり、回避策では必ずしも必要ではありません。


1
正常に動作しましたが、。/ gradlew AssembleDebugでエラーが発生しましたが、これはsdkmanagerとは何の関係もないようです。ありがとうございました!
kaulex

1
エコーyをクリーンアップする方法の例を教えてください。わかりません。
kaulex

1
echo yコマンドの削除を明確にするために、元の応答のスニペットを更新しました。
caller9

1
ありがとうございました!とても役に立ちます!
kaulex

2
輸出ラインとそれからsdkmanager --sdk_root=${ANDROID_HOME} "tools"私のために少しそれをやった-ありがとう!
gattsbr

23

Windows 10 / x64でのAppium用のAndroidコマンドラインツールのインストールに苦労した人は、次のようにしてください。

  1. Androidから最新のコマンドラインツールをダウンロードしますie commandlinetools-win-6200805_latest.zip
  2. ダウンロードしたファイルを解凍します
  3. コマンドラインツールをディスクのどこかに格納するためのディレクトリを作成し、次のパスを含めます。android / cmdline-tools / latest基本的に、このCmdラインツールを解凍するときは、ツールディレクトリの名前を最新に変更し、この最新の フォルダーをandroid / cmdlineに配置してください。 -toolsディレクトリがディスクのどこかにある
  4. C:\ YourLocationWhereYouStoreTheDirectory \ android \ cmdline-tools \ latestのようなcmdlineツールディレクトリの場所を格納するディレクトリのANDROID_HOME環境変数を 作成します。
  5. %ANDROID_HOME%\ binとしてPath環境変数に新しいエントリを作成します

2
この「android / cmdline-tools / latest」の必要性はどこから来たのですか?ソースコード ?どこかでドキュメントが必要ですか?
トリスタン

1
その理由は、このトピックで説明されていますstackoverflow.com/questions/60460429/...
ArturS

あなたが参照しているトピックでは、答えは「export ANDROID_HOME = "/ Users / darish / development / sdk / android"」「最新」、「cmdline-tools」なし
Tristan

1
@Tristan cmdline-toolsは必須ですが、必須ではlatestありません。のパス(または名前)cmdline-toolsは、Android SDK自体から取得されます。このコマンドを実行するとsdkmanager --sdk_root=${ANDROID_HOME} --list、結果に「cmdline-tools; 1.0 | 1.0 | Android SDK Command-line Tools」が含まれます
Jing Li

これの背後にあるロジックがわかりません。しかし、動作します:-)
Soorya

19

Androidデベロッパーウェブサイトから新しいcmdline-toolsをダウンロードするには、次のディレクトリ構造を尊重する必要があります。


2
なぜそれが必要なのですか?これはどこから来たのですか?ソースコード ?ドク?
トリスタン

1
この構造を使用するようにCIをセットアップしましたが、sdkmanagerを実行することはできますが、gradleを使用してプロジェクトをビルドすると、プラットフォームとライセンスを適切に見つける方法がわからず、すべてが失敗します。
マットウルフ

18

--sdk_rootコマンドを1回実行するたびに引数を渡すのではなく、実際の原因を詳しく見てみましょう。

始まってAndroidのSDKコマンドラインツール1.0.0(6200805)とは対照的に、AndroidのSDK 26.1.1(4333796) toolsディレクトリ階層が変更されました。以前は内に配置されていましたがANDROID_HOME、今でもtools(ダウンロードされたcommandlinetools zipファイルを解凍した後に取得される唯一のもの)という名前が付けられていますがcmdline-tools、独自に呼び出されるディレクトリ内に配置する必要があります。名前cmdline-toolsは、そのパッケージ名に由来します。ここでsdkmanager --list、packagesコマンドのリストから取得できます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-toolscmdline-toolsemulatorlicensespatcherplatform-toolsplatformssystem-images。あなたは簡単にそれを指摘することができますbuild-toolscmdline-tools、親の内部のすべての座り込みを兄弟ですANDROID_HOME

簡単にまとめます。

  • 好みを設定しますANDROID_HOME(以前と同じように)
  • commandlinetoolsの zipファイルをダウンロードして、cmdline-tools内部にあるというディレクトリに解凍します。ANDROID_HOME
  • ディレクトリ$ANDROID_HOME/cmdline-tools/tools/binを環境変数に追加しPATHて、システムが検索場所を認識できるようにしますsdkmanager

これが正解です。他の回答とは異なり、これは実際にはzipファイルにある「tools」ディレクトリを保持します。
SystemParadox

どうもありがとう、あなたは私の質問に答えました:)
R-obert

「実際に」問題を解決する素晴らしい答え!
mohamnag

5

同じ問題を得て、Googleがここに来ました。AndroidStudio Archiveによると、本日は4.1のリリースでした。それは偶然ではないと思います。

この完全に無関係なガイドには、古いバージョンのsdk-tools for linuxのハードリンクがあります。他のOSでは、URLをWindowsまたはMacに変更できます。今のところ、これをホットフィックスとして使用します。

(それは解決策ではなくコメントであるはずでした)


リンクが機能していません。以前のバージョンを使用してみましたが、コードベースで新しい機能を使用しているため、古いバージョンは使用できません。したがって、この解決策は私にはうまくいきません。
kaulex

5

sdkmanagerは、ANDROID_SDK_ROOTなどの環境変数を使用せずに、解凍された場所に基づいてandroid-sdkパスを見つけようとします。しかし、さらに悪化します。cmdline-toolsという名前のハードコーディングされた親フォルダーがあり、別の名前のフォルダー内でcommandlinetoolsを解凍した場合、それは機能せず、パラメーターsdk_rootを使用して内部変数を正しくフィードする必要があります。

したがって、それを念頭に置いて、次のアプローチを使用してこれを解決できます。

私たちはUbuntu OSを使用していると仮定します。そうでない場合は、その手順のいくつかを適応させる必要があります。

  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

端末に印刷されたバージョンが表示されます。


1
それは魅力のように働きました!この完全なソリューションに再び感謝
ビビアン

4

次の手順に従って最新のコマンドラインツールを使用するための解決策を見つけました。

1-コマンドラインツールを次の構造のフォルダーに抽出します。例:($HOME/Development/android/cmdline-tools/latest このフォルダーには、libbinnotice.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"

矛盾する情報:「最新(このフォルダーにはlib、bin、...が含まれている必要があります)」、ANDROID_HOME = "... / latest" PATH = "... $ ANDROID_HOME / tools / lib
Tristan

libはツールまたはANDROID_HOMEにありますか?
トリスタン

これは受け入れられる答えであるはずです
Shivam Jha

cmdline-toolslatest必須ですが、必須ではありません。
Jing Li

3

私の経験を共有したいと思います。

最初に、なぜディレクトリ構造がこの回答に示されているように見える必要があるのか​​を説明しようとします-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.

別の問題が発生する可能性があります - 「.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

0

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


0

これは、新しいMacにスタンドアロンのコマンドラインツール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もインストールされているバンドルの一部であることが期待されていると思いました。


0

SDK(任意の方法)をインストールするための最初の要件は、JavaのインストールとJAVA_HOMEパスの設定です。

次に、SDKコマンドラインツールには、NullPointerExceptionをスローしないインストールパスが必要です。
これを克服するには、引数「--sdk_root」でSDKをインストールするパスを渡します
sdkmanager.bat "platform-tools" "platforms; android-" --sdk_root =

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.