web-dev-qa-db-ja.com

コマンドラインでAndroid SDK Build Toolsをインストールする方法?

コマンドラインから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が欲しいです。

282
Zhenguo Yang

デフォルトでは、コマンドラインのSDKマネージャはビルドツールをリストに含めません。彼らは "時代遅れ"のカテゴリにあります。利用可能なすべてのダウンロードを見るには、

Android list sdk --all

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

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

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

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

Androidアップデートsdk -u -a -t 1,2,3,4、..、n 

1,2、..、nは、上記のlistコマンドで一覧表示されたパッケージ番号です。

472
Nate

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

Android update sdk --filter ...

他の答えはあなたがフィルタオプションのためにインデックスの代わりに定数の文字列識別子を使うことができることを述べていません。これは、無人またはスクリプトによるインストールに役立ちます。 --filterオプションのman:

...これは '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 etc

138
robd

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上):

[email protected]:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/   
[email protected]:~/sdk/tools/bin$ ./sdkmanager "build-tools;25.0.2"  
done   
[email protected]:~/sdk/tools/bin$ ls ../../build-tools/  
25.0.0/ 25.0.2/

たとえば、すべての接続にHTTP(--no_https)を使用させるため、またはプロキシサーバー(--proxy_Host=addressおよび--proxy_port=port)を使用するために、さまざまな options を指定することもできます。

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

[email protected]:~/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.
65
Alex Lipov

ADB Build-Toolsは、コマンドAndroid update sdk --no-uiによって、自動的にはダウンロードされません。

だから(コンソールで)内蔵ツールタイプをインストールするために:

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
54
Flinbor

コマンドラインから関連するすべてのAndroid SDKをインストールしようとしたときに遭遇した素晴らしい情報源は、 this Dockerfileでした。 Dockerfileの中で、作者が他の対話なしでplatform toolsbuild toolsをインストールするための単一のコマンドを実行するのを見ることができます。 OPが出した場合、命令は以下のように適応されるでしょう。

echo y | $Android_HOME/tools/Android update sdk --all --filter build-tools-21.1.0 --no-ui
32
geoand

私はAndroid sdkの依存関係をコマンドラインでインストールするのに多大な時間を費やしただけで、ツールやオンラインに付属のドキュメントが非常に不足しているので、私がここで発見したことを投稿したいと思いました。

私はlinuxのためにAndroid sdk r24.4.1を使っています。利用可能なパッケージを一覧表示するために実行できるコマンドは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>

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

Android update sdk --no-ui --filterAndroid list sdkのパッケージ番号を使います

そして

Android update sdk -u -a -tAndroid list sdk --allのパッケージ番号を使います

言い換えれば - API 23.1 revision 3をインストールするには、次のどちらかを実行します。

Android update sdk --no-ui --filter 3

または

Android update sdk -u -a -t 29

クレイジーだけど、うまくいく。

21
lps

ほとんどの回答は、スーパーユーザー権限のないヘッドレス環境でアップデートを実行する必要があるという事実を無視しているように見えます。つまり、スクリプトは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の問題は、それが'y'でstdoutをあふれさせることであり、それらの文字を送信してから私が扱わなければならなかったバージョンへの遅延が事実上全くないということです。それは標準出力を「汚染」し、スクリプトは誤った入力について不平を言うことに失敗するでしょう。解決策は、'y'をstdoutに送信することを遅らせることです。それこそまさにwhile/sleepコンボが行うことです。

expectはいくつかのLinuxディストリビューションではデフォルトでは利用できず、私のCIスクリプトの一部としてそれをインストールする方法がなかったので、最も一般的な解決策を使用しなければなりませんでした。

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

20
i4niac

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

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

ビルドツールをインストールしたい場合は、利用可能なパッケージのリストから好みのバージョンをコピーしてください。

希望のバージョンをインストールするには

sdkmanager "build-tools;27.0.3"
10
Lasithds

ただし、実行が遅すぎる

はい、私は同じ問題を抱えています。ファイルのダウンロードの中には、非常に遅いものもあります(少なくとも、過去数日間にダウンロードされたものもあります)。あなたがすべてをダウンロードしたいならば、あなたはそれに関してすることができる多くはありません。

結果は、フォルダbuild-toolsには何もないということです、そして、私はantなしでコマンドラインからapkを構築したいので、aaptとapkbuilderが欲しいです。

あなたはそれを完成させましたか?

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

例えば:

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

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

8
Dan Dyer

私は私の依存関係をインストールするスクリプトを置くことを好みます

何かのようなもの:

#!/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

5

@ 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
Vinay Wadhwa

私はちょうどこの問題を抱えていた、それで私はついに利用可能なツールのリストを読んで、解析することによって1行bash汚い解決策を書いた:

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

Nateが https://stackoverflow.com/a/19416222/1104031 postで述べたように、ビルドツールはデフォルトで自動的にダウンロードできませんでした。

しかし私はあなたのためにすべてをする小さな道具を書きました

私は https://stackoverflow.com/a/17863931/1104031 postでdanbとして「expect」ツールを使用しました。 Android-sdkとpython27expectだけが必要です。

このスクリプトは、すべてのビルドツール、すべての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)
2

Developer.Android.comからAndroid SDKをダウンロードしてください(現在Windows OS用の149mbファイル)。 AndroidはsdkmanagerのGUIを削除しましたが、toolsフォルダの中にあるbinフォルダにsdkmanagerのコマンドラインバージョンがあります。

  1. Binフォルダの中にいるときは、shiftキーを押しながら右クリックして、ここでコマンドラインを開くを選択します。 Shift +右クリック>>コマンドラインをここで開く.
  2. コマンドラインが開いたら、sdkmanagerと入力してenterを押します。
  3. それからtype sdkmanager(space)、double hyphen(--)、type list sdkmanager --listを実行してください(これはSDKマネージャのすべてのパッケージをリストします)
  4. 「sdkmanager(space)」と入力してからパッケージ名を入力し、Enterキーを押します。例えば。 sdkmanager platform-tools(Enterキーを押す)使用許諾契約を読み込みます。オプションあり(y/n)同意するにはyを入力してください。そうすると、指定したパッケージがダウンロードされます。

詳細については公式文書に従ってください ここ

これが役に立つことを願っています。 :)

2

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

echo y | $Android_HOME/tools/Android update sdk --no-ui
1
Ting

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

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

1
Sylfo

やってみる

1. すべてのパッケージを一覧表示

Android list sdk --all

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

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