コマンドラインでAndroid SDKビルドツールをインストールする方法


292

コマンドラインからAndroid開発環境をセットアップしたいのですが、次の問題が発生します。

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz

ファイルを抽出した後、実行します

tools/android update sdk --no-ui

ただし、実行には遅すぎる

Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml

結果は、フォルダーbuild-toolsには何も含まれず、antなしでコマンドラインからapkをビルドしたいので、aaptとapkbuilderが必要です。

回答:


479

デフォルトでは、コマンドラインのSDK Managerにはリストにビルドツールが含まれていません。彼らは「時代遅れ」のカテゴリーにあります。利用可能なすべてのダウンロードを表示するには、

android list sdk --all

そして、コマンドラインからそのリストにあるパッケージの1つを取得するには、次のコマンドを使用します。

android update sdk -u -a -t <package no.>

ここで、-uは--no-uiを表し、-aは--allを表し、-tは--filterを表します。

複数のパッケージをインストールする必要がある場合は、次のようにします。

android update sdk -u -a -t 1,2,3,4、..、n 

ここで、1,2、..、nは、上記のlistコマンドでリストされたパッケージ番号です。


4
18.1.1のようなビルドツールがない場合、これはコマンドラインを使用してインストールする正しい方法です。
クレイ

19
それはちょっとひどいです、彼らは公式のヒントで--allオプションに言及しませんでした。ありがとうございました。
Alexander Malakhov 2013年

4
@DanielJonkerはい、そうです。"yes"をコマンドにエコーします。つまり、yesをエコーし​​ます。android update sdk --all --filter tools --no-ui --force> / dev / null
nsg

4
echo "yes"に短縮できますがecho "y"、それでもすべての場合に機能するわけではありません。フィルターと特定のパッケージによっては、複数のy / nライセンスプロンプトが表示される場合があります。echo "y"最初のプロンプトにのみ応答し、残りには応答しません。yesこれまでのところ成功していませんが、コマンドで動作するようにしています。
i4niac 14

3
@AlexanderMalakhovホストOSにユーティリティがある場合は、それを使用するのが最善の選択肢です。最初に期待を調べましたが、私の場合、AWSクラウドで実行されている特定のLinuxディストリビューションでスクリプトを実行する必要があります。そのディストリビューションにはインストールが期待されておらず、ビルドプランの一部としてインストールするための十分な権限がありません。見回した後、私が見つけた最良の解決策は<pre> <code>#ヘッドレスサーバーでAndroid SDKを更新するFILTER = tool、platform、android-20(sleep 5 && while [1]; do sleep 1; echo y; done )\ | android update sdk --no-ui --all \ --filter $ {FILTER} </ code> </ pre>
i4niac 2014

140

他の回答で述べたように--filter、インストールされたパッケージを制限するオプションを使用できます。

android update sdk --filter ...

他の回答では、フィルターオプションにインデックス(変更される)の代わりに定数文字列識別子を使用できることについては触れられていません。これは、無人またはスクリプトによるインストールに役立ちます。--filterオプションの男:

...これは、「list sdk --extended」によって返された識別子も受け入れます。

android list sdk --all --extended

Packages available for installation or update: 97
----------
id: 1 or "tools"
     Type: Tool
     Desc: Android SDK Tools, revision 22.6.2
----------
id: 2 or "platform-tools"
     Type: PlatformTool
     Desc: Android SDK Platform-tools, revision 19.0.1
----------
id: 3 or "build-tools-19.0.3"
     Type: BuildTool
     Desc: Android SDK Build-tools, revision 19.0.3

次に、文字列IDをフィルターオプションとして使用して、必要なバージョンを正確に指定できます。

android update sdk --filter tools,platform-tools,build-tools-19.0.3


27
--extendedオプションの+ 1。CIスクリプトに何をインストールするかを明確にします。
nhaarman 2014年

16
android update--allオプションも必要になります。それ以外の場合は、使用方法のヘルプが表示されます。例:(android update sdk --no-ui --all --filter build-tools-21.1.0および+1 --extendedなどのエイリアスを表示できるオプションの場合build-tools-21.1.0
Petrus Repo

1
--filter--extendedオプションの男はどこですか?
Ciro Santilli郝海东冠状病六四事件法轮功

2
固定されていない数字よりも文字列を使用する方がはるかに良いことに同意します。
wisbucky 2016

1
--extendedスクリプトを記述して、SDKリソース自体を更新できるContinuous Integration Serverで使用できるように、そのオプションを探していました。いいヒント!
Osayilgan

73

Android SDK Toolsパッケージのバージョン25.2.3以降には、新しいツールsdkmanagerが含まれています。これにより、コマンドラインからビルドツールをインストールするこのタスクが簡略化されます。
にありますandroid_sdk/tools/binたフォルダ。

使用法(ドキュメントから):

sdkmanager packages [options]

packages引数は、(例えば、引用符に包まれたSDK形式のパス、です"build-tools;25.0.0""platforms;android-25")。スペースで区切られた複数のパッケージパスを渡すことができますが、それぞれを独自の引用符で囲む必要があります。

使用例(私のMacで):

alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/   
alex@mbpro:~/sdk/tools/bin$ ./sdkmanager "build-tools;25.0.2"  
done   
alex@mbpro:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/ 25.0.2/

また、さまざまなオプションを指定して、たとえば、すべての接続でHTTPを使用するように強制し--no_httpsたり()、プロキシサーバーを使用したりできます(--proxy_host=addressおよび--proxy_port=port)。

使用可能なオプションを確認するには、--helpフラグを使用します。私のマシン(Mac)では、出力は次のようになります。

alex@mbpro:~/sdk/tools/bin$ ./sdkmanager --help
Usage: 
  sdkmanager [--uninstall] [<common args>] \
    [--package_file <package-file>] [<packages>...]
  sdkmanager --update [<common args>]
  sdkmanager --list [<common args>]

In its first form, installs, or uninstalls, or updates packages.
    <package> is a sdk-style path (e.g. "build-tools;23.0.0" or 
             "platforms;android-23").
    <package-file> is a text file where each line is a sdk-style path
                   of a package to install or uninstall.
    Multiple --package_file arguments may be specified in combination
     with explicit paths.
In its second form (with --update), currently installed packages are
    updated to the latest version.
In its third form, all installed and available packages are printed out.

Common Arguments:
    --sdk_root=<sdkRootPath>: Use the specified SDK root instead of the SDK containing this tool
    --channel=<channelId>: Include packages in channels up to <channelId>.
                           Common channels are:
                           0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary).

    --include_obsolete: With --list, show obsolete packages in the
                        package listing. With --update, update obsolete
                        packages as well as non-obsolete.
    --no_https: Force all connections to use http rather than https.
    --proxy=<http | socks>: Connect via a proxy of the given type.
    --proxy_host=<IP or DNS address>: IP or DNS address of the proxy to use.
    --proxy_port=<port #>: Proxy port to connect to.

* If the env var REPO_OS_OVERRIDE is set to "windows",
  "macosx", or "linux", packages will be downloaded for that OS.

1
他の誰かがWarning: Unknown argument --package_file
ulidtko 2017年

3
@ulidtko使用法のドキュメントにバグがあります。正しい方法は、等号を追加することです--package_file=packages.txt
Alex Lipov 2017年

残念ながら、それはインストールのタスクを単純化しません。すべてのAndroidプログラマーがGUIなしでLinuxでプログラミングを行うわけではありません。私たちの一部はWindowsでそれを行い、他のすべてのWindowsアプリケーションのように実行するUIを好みます。これは前進ではなく後退しています
AaA

2
@AaA コマンドラインからインストールするタスクを簡素化します。OPは、コマンドラインソリューションを探していると明確に述べているため、コメントはこのコンテキストとは無関係です。
Alex Lipov

55

ADBビルドツールはコマンドandroid update sdk --no-uiによって自動的にダウンロードされません

したがって、(コンソールで)Buil-Toolタイプをインストールする場合:

android list sdk --all

アイテムの前にリストされている番号を覚えて、次を実行します。

android update sdk -u --all --filter <number>

コマンドは/ YourFolder / android-sdk-linux / toolsに入力する必要があります

また、リモートフォルダー(sshによって開かれたサーバーなど)の場合は、次のように入力します。

**./android** list sdk --all
**./android** update sdk -u --all --filter <number>

ターミナルに入力するADBパッケージの簡単なリスト:

android list sdk

すべてのパッケージをインストールする場合:

android update sdk --no-ui

またはフィルターを使用する(カンマはセパレーター):

android update sdk --no-ui --filter 3,5,8,14

古い非推奨のSDKでは、-allを使用する必要があります。たとえばandroid update sdk --no-ui --all --filter 27 to install platform-8
fluke

GUIを使用しているときにSDKインストーラーがクラッシュし続けたため、コマンドラインに切り替える必要があったので、これは本当に役に立ちました。ありがとう。
Yvonne Aburrow 2017年

32

コマンドラインから関連するすべてのAndroid SDKをインストールしようとしているときに出会った素晴らしい情報源は、この Dockerfileでした。Dockerfile内には、著者がインストールするには、単一のコマンド実行していることがわかりますplatform toolsし、build tools他の相互作用なしに。OPが提示した場合、コマンドは次のように適合されます。

echo y | $ANDROID_HOME/tools/android update sdk --all --filter build-tools-21.1.0 --no-ui

すべてのパッケージが必要ない場合はどうなりますか?21.1.0が欲しいだけです。
IgorGanapolsky 2016年

@IgorGanapolskyおそらく--allフラグなしで試してみるべきでしょう
geoおよび'15年

21

コマンドラインを介してandroid sdk依存関係をインストールするのに時間がかかりました。ツールとオンラインに付属するドキュメントが非常に不足しているため、ここで発見したことを投稿したいと思いました。

android sdk r24.4.1ために働いていlinuxます。使用可能なパッケージをリストするために実行できる2つのコマンドがあります。

android list sdk

そしてより包括的な:

android list sdk --all

特定のパッケージのパッケージ番号は、上記のコマンドごとに異なります。たとえば、前者はパッケージをパッケージ API 23.1 revision 3として#3リストし、後者はそれをとしてリストします#29

現在、androidコマンドを使用してインストールする方法は2つあります。

tools/android update sdk --no-ui --filter <package number>

そして

tools/android update sdk -u -a -t <package number>

各インストールコマンドがパッケージをパラメーターとして使用できることを考えると、どのパッケージ番号を使用しますか?多くのオンライン検索と試行錯誤の後、私はそれを発見しました

android update sdk --no-ui --filter からのパッケージ番号を使用します android list sdk

そして

android update sdk -u -a -t からのパッケージ番号を使用します android list sdk --all

つまり、インストールAPI 23.1 revision 3するには、次のいずれかを実行できます。

android update sdk --no-ui --filter 3

または

android update sdk -u -a -t 29

クレイジーですが、動作します。


1
-aの短縮バージョンです--all。そのため、そのパッケージ番号を使用しています。(-uのために短い--no-ui-tの略である--filter。)
darthmaim

Ipsの言うことを信じています。Googleは、usage()テキストを最新の状態に維持しないことで知られています。
not2qubit 2016年

私が実行したubuntuでは:$ echo y | $ ANDROID_HOME / tools / android update sdk -u -a -t 27 Android 8にアップデートされたことを確認する方法は?
Ashish Karpe、

$ ANDROID_HOME / tools / androidリストターゲット| grep "ベースのAndroid"ベースのAndroid 4.0.3(APIレベル15)ベースのAndroid 4.1.2(APIレベル16)ベースのAndroid 4.2.2(APIレベル17)ベースのAndroid 4.3.1(APIレベル18) Android 4.4.2(APIレベル19)ベースAndroid 4.4.2(APIレベル19)ベースAndroid 5.0.1(APIレベル21)ベースAndroid 5.1.1(APIレベル22)ベースAndroid 6.0(APIベースレベル23)Android 7.0ベース(APIレベル24)
Ashish Karpe

実行時の原因:$ ANDROID_HOME / tools / android list sdkインストールまたは更新に使用できるパッケージ:1 1- SDK Platform Android 8.1.0、API 27、リビジョン1
Ashish Karpe

20

ほとんどの回答は、スーパーユーザー権限のないヘッドレス環境で更新を実行する必要がある場合があるという事実を無視しているようです。つまり、スクリプトはすべての回答に応答する必要があります。 y/nライセンスプロンプトに自動的する必要があります。

これがトリックを行う例です。

FILTER=tool,platform,android-20,build-tools-20.0.0,android-19,android-19.0.1

( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \
    | android update sdk --no-ui --all \
    --filter ${FILTER}

どれだけ多くのプロンプトが表示されても、それらすべてに答えられます。このwhile/sleepループは、yesコマンドのシミュレーションのように見えますが、実際にはほぼそうです。の問題yesは、それがstdoutで溢れ'y'、それらの文字を送信する間に実質的に遅延がなく、私が処理しなければならないバージョンには、いかなる種類のタイムアウトオプションもなかったことです。それはstdoutを「汚染」し、スクリプトは正しくない入力について不平を言うことに失敗します。解決策は、'y'stdoutへの送信の間に遅延を置くwhile/sleepことです。それがまさにコンボが行うことです。

expect 一部のLinuxディストリビューションではデフォルトで使用できず、CIスクリプトの一部としてインストールする方法がなかったため、最も一般的なソリューションを使用する必要があり、単純なbashスクリプトよりも一般的なものはありませんでした。

実際、私はそれについてブログを書きました(NSBogan)。興味があれば、ここで詳細を確認してください。


--allは、可能なすべてのSDKをインストールします。特定のフィルターに限定する場合は、理想的ではありません。
IgorGanapolsky 2016年

17

sdkmanagerインストールした場合(私はMACを使用しています)

実行sdkmanager --listして利用可能なパッケージを一覧表示します。

ビルドツールをインストールする場合は、利用可能なパッケージのリストから優先バージョンをコピーします。

優先バージョンをインストールするには、次を実行します

sdkmanager "build-tools;27.0.3"

1
ありがとう。できます!コマンド「android」は、Android-sdkの最新バージョンでは非推奨になりました。/tools/binディレクトリの./sdkmanagerを使用する必要があります
JLavoie

8

ただし、実行には遅すぎる

はい、同じ問題が発生しました。一部のファイルのダウンロードは非常に遅い(または少なくとも過去2日間である)。すべてをダウンロードしたい場合、それについてできることは多くありません。

結果は、フォルダーbuild-toolsには何も含まれず、antなしでコマンドラインからapkをビルドしたいので、aaptとapkbuilderが必要です。

完全に実行させましたか?

あなたができることの一つは、-tスイッチを使用してダウンロードされているパッケージをフィルタリングすることです。

例えば:

tools/android update sdk --no-ui -t platform-tool

先日試したところ、ビルドツールのバージョン18.0.0がインストールされました。何らかの理由で最新バージョン18.0.1はこのフィルターに含まれておらず、それを取得する唯一の方法は、--allスイッチですべてをインストールすることでした。


2
これを実行して、使用可能なフィルターを取得します。 "android update sdk -h" ...更新を、[プラットフォーム、システムイメージ、ツール、プラットフォームのコンマ区切りリストの形式で、指定したタイプのパッケージに制限するフィルター] -tool、doc、sample、source]。これは、「list sdk --extended」によって返された識別子も受け入れます。
aleb 2013年

6

依存関係をインストールするスクリプトを配置したい

何かのようなもの:

#!/usr/bin/env bash
#
# Install JUST the required dependencies for the project.
# May be used for ci or other team members.
#

for I in android-25 \
         build-tools-25.0.2  \
         tool \
         extra-android-m2repository \
         extra-android-support \
         extra-google-google_play_services \
         extra-google-m2repository;

 do echo y | android update sdk --no-ui --all --filter $I ; done

https://github.com/caipivara/android-scripts/blob/master/install-android-dependencies.sh


ありがとう、たくさんの時間を節約してください。
utzcoz 2017年

4

私はこの問題を抱えていたので、最終的に、利用可能なツールのリストを読み取って解析することにより、1行のbashダーティソリューションを作成しました。

 tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')

私はプロジェクトをサービスを再生するように切り替えました。それは、ビルドツールだけではなく、はるかに多くのライセンスを要求したため、このソリューションは非常に制限されています。
nurettin 2016

バージョンが進化するにつれて時間とともに変化する可能性のあるインデックスよりもはるかに確定的に感じられます...
Augustin Riedinger 2017

4

@ i4niacと@AurélienLambertの回答に触発され、これが私が思いついたものです

csv_update_numbers=$(./android list sdk --all | grep 'Android SDK Build-tools' | grep -v 'Obsolete' | sed 's/\(.*\)\- A.*/\1/'|sed '/^$/d'|sed -e 's/^[ \t]*//'| tr '\n' ',')
csv_update_numbers_without_trailing_comma=${csv_update_numbers%?}

( sleep 5 && while [ 1 ]; do sleep 1; echo y; done ) \
    | ./android update sdk --all -u -t $csv_update_numbers_without_trailing_comma

説明

  • android list sdk --allコマンドの結果のビルドツールパッケージのインデックスである番号のコンマ区切りリストを取得します(廃止されたパッケージは無視されます)。
  • ライセンスを受け入れるために、数ミリ秒ごとに端末に「y」を投げ続けます。

4

android SDKをdeveloper.android.comからダウンロードします(現在、Windows OS用の149mbファイルです)。Androidはsdkmanager GUIを削除しましたが、toolsフォルダー内にあるbinフォルダーにコマンドラインバージョンのsdkmanagerがあることは注目に値します。

  1. binフォルダー内で、Shiftキーを押しながら右クリックして、ここでコマンドラインを開くを選択します。Shift +右クリック>>ここでコマンドラインを開きます。
  2. コマンドラインが開いたら、sdkmanagerEnterキーを押して入力します。
  3. 次に、タイプsdkmanager(スペース)、ダブルハイフン(--)、タイプリストを実行します sdkmanager --list (これにより、SDKマネージャーのすべてのパッケージがリストされます)
  4. sdkmanager(スペース)を入力してからパッケージ名を入力し、Enterキーを押します。例えば。sdkmanager platform-tools(Enterキーを押す)ライセンス契約を読み込みます。オプションあり(y / n)。yを入力して同意すると、指定したパッケージがダウンロードされます。

詳細については、こちらの公式ドキュメントに従ってください

これがお役に立てば幸いです。:)


4

「android」コマンドは廃止されました。

コマンドラインツールの場合は、tools / bin / sdkmanagerおよびtools / bin / avdmanagerを使用します

Android Studioが必要ない場合は、基本的なAndroidコマンドラインツールをdeveloper.android.comのセクション「コマンドラインツールのみ」からダウンロードできます。

CLIからは次のようになります。

curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

または

wget --output-document sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip

その後、アーカイブをターゲットフォルダに解凍します

unzip sdk-tools-linux.zip

これで、必要なものすべてをインストールできます...

./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'

コマンドを使用して、パッケージの完全なリストを取得できます ./tools/bin/sdkmanager --list

一部のパッケージでは、使用許諾契約への同意が必要です。これをインタラクティブに受け入れるか、次のように入力ストリームに単に「y」を渡すことができます(この場合は2つの合意)。

echo -ne "y\ny" | ./tools/bin/sdkmanager --install 'system-images;android-29;default;x86_64'

そしてもちろん、便宜上、ANDROID_HOMEANDROID_SDK_ROOT(〜/ .profileまたは〜/ .bash_profileでの実行を含む)などの変数をエクスポートするか、PATHにパッチを適用できます変数にます-これはすべて自由に行うことができます。

スクリプトの例:

mkdir /opt/android-sdk
cd /opt/android-sdk
curl --output sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux.zip
echo -ne "y" | ./tools/bin/sdkmanager --install 'build-tools;29.0.2' 'platform-tools' 'platforms;android-29' 'tools'

要件: カール(またはwget)と解凍

トラブルシューティング:

あなたが見るならばWarning: Could not create settings、あなたが持っている必要がありますtools内のディレクトリcmdline-toolsANDROID_HOME(この正確な名前を持つ必要があれば、それを作成)内のディレクトリを参照してくださいAndroidのコマンドラインツールは、常にショーをsdkmanager:警告:設定を作成できませんでした。


2

ネイトがhttps://stackoverflow.com/a/19416222/1104031で言ったように、ビルドツールはデフォルトでは自動的にダウンロードできませんでした投稿で。

しかし、私はあなたのためにすべてを作る小さなツールを書きました

https://stackoverflow.com/a/17863931/1104031の投稿では、danbとして「expect」ツールを使用しました。必要なのは、android-sdkとpython27、だけですexpect

このスクリプトは、すべてのビルドツール、すべてのSDK、および自動ビルドに必要なすべてをインストールします。

import subprocess,re,sys

w = subprocess.check_output(["android", "list", "sdk", "--all"])
lines = w.split("\n")
tools = filter(lambda x: "Build-tools" in x, lines)
filters = []
for tool in tools:
  m = re.search("^\s+([0-9]+)-", tool)
  tool_no = m.group(1)
  filters.append(tool_no)

if len(filters) == 0:
  raise Exception("Not found build tools")


filters.extend(['extra', 'platform', 'platform-tool', 'tool'])

filter = ",".join(filters)

expect= '''set timeout -1;
spawn android update sdk --no-ui --all --filter %s;
expect {
  "Do you accept the license" { exp_send "y\\r" ; exp_continue }
  eof
}''' % (filter)

print expect

ret = subprocess.call(["expect", "-c", expect])
sys.exit(ret)

いかがecho "yes" | ./android update sdk --no-https --no-ui --filter 1,6ですか?
schemacs

1
私が間違っている場合は修正してください。ただし、このスクリプトは実行されるたびにすべてを再ダウンロードするようです。私は-uパラメータを試しましたが、うまくいかなかったようです:/
gbero

1

他の応答で述べたように、ビルドツールには--allフラグをインストールする必要があります。また、-tすべてのパッケージのインストールを回避するためにフィルターフラグを使用することをお勧めしますが、すべてのビルドツールをフィルターする方法はありません。

AOSPバグトラッカーには、これらの2つのポイントに対する機能リクエストがすでにあります。彼らに自由に投票してください、これはいつか彼らに起こるかもしれません:


1

私はすべてを更新するためにこれを試しました、そしてそれはうまくいきました!

echo y | $ANDROID_HOME/tools/android update sdk --no-ui

0

試す

1.すべてのパッケージをリストする

android list sdk --all

2.次のコマンドを使用してパッケージをインストールします

android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command 

-1

android update sdk

このコマンドは、SDKツール、ビルドツール、SDKプラットフォームツールのすべての最新リリースを更新してインストールします。

それは私にとって仕事です。

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