コマンドラインから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が欲しいです。
デフォルトでは、コマンドラインの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コマンドで一覧表示されたパッケージ番号です。
他の回答で述べたように、インストール済みパッケージを制限するために--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
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
)を使用するために、さまざまな options を指定することもできます。
利用可能なオプションを確認するには、--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.
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
コマンドラインから関連するすべてのAndroid SDKをインストールしようとしたときに遭遇した素晴らしい情報源は、 this Dockerfileでした。 Dockerfileの中で、作者が他の対話なしでplatform tools
とbuild tools
をインストールするための単一のコマンドを実行するのを見ることができます。 OPが出した場合、命令は以下のように適応されるでしょう。
echo y | $Android_HOME/tools/Android update sdk --all --filter build-tools-21.1.0 --no-ui
私は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 --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
クレイジーだけど、うまくいく。
ほとんどの回答は、スーパーユーザー権限のないヘッドレス環境でアップデートを実行する必要があるという事実を無視しているように見えます。つまり、スクリプトは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 )、興味があればここで詳細をチェックしてください。
sdkmanager
がインストールされている場合(私はMACを使用しています)
利用可能なパッケージを一覧表示するにはsdkmanager --list
を実行します。
ビルドツールをインストールしたい場合は、利用可能なパッケージのリストから好みのバージョンをコピーしてください。
希望のバージョンをインストールするには
sdkmanager "build-tools;27.0.3"
ただし、実行が遅すぎる
はい、私は同じ問題を抱えています。ファイルのダウンロードの中には、非常に遅いものもあります(少なくとも、過去数日間にダウンロードされたものもあります)。あなたがすべてをダウンロードしたいならば、あなたはそれに関してすることができる多くはありません。
結果は、フォルダbuild-toolsには何もないということです、そして、私はantなしでコマンドラインからapkを構築したいので、aaptとapkbuilderが欲しいです。
あなたはそれを完成させましたか?
できることの1つは、-t
スイッチを使用してダウンロードされているパッケージをフィルタリングすることです。
例えば:
tools/Android update sdk --no-ui -t platform-tool
私が先日これを試したとき、私はインストールされたビルドツールのバージョン18.0.0を手に入れました。何らかの理由で最新のバージョン18.0.1がこのフィルタに含まれていないため、それを取得する唯一の方法は--all
スイッチを使用してすべてをインストールすることでした。
私は私の依存関係をインストールするスクリプトを置くことを好みます
何かのようなもの:
#!/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
@ 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
コマンドの結果に含まれるビルドツールパッケージのインデックスである番号のコンマ区切りリストを取得します(古いパッケージは無視します)。私はちょうどこの問題を抱えていた、それで私はついに利用可能なツールのリストを読んで、解析することによって1行bash汚い解決策を書いた:
tools/Android update sdk -u -t $(Android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')
Nateが https://stackoverflow.com/a/19416222/1104031 postで述べたように、ビルドツールはデフォルトで自動的にダウンロードできませんでした。
しかし私はあなたのためにすべてをする小さな道具を書きました
私は https://stackoverflow.com/a/17863931/1104031 postで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)
Developer.Android.comからAndroid SDKをダウンロードしてください(現在Windows OS用の149mbファイル)。 AndroidはsdkmanagerのGUIを削除しましたが、toolsフォルダの中にあるbinフォルダにsdkmanagerのコマンドラインバージョンがあります。
sdkmanager
と入力してenterを押します。sdkmanager
(space)、double hyphen(--
)、type list sdkmanager --list
を実行してください(これはSDKマネージャのすべてのパッケージをリストします)詳細については公式文書に従ってください ここ
これが役に立つことを願っています。 :)
私はすべてを更新するためにこれを試してみました、そしてそれはうまくいきました!
echo y | $Android_HOME/tools/Android update sdk --no-ui
他の回答で述べたように、ビルドツールはインストールするために--all
フラグが必要です。すべてのパッケージをインストールしないようにするには、-t
フィルタフラグを使用することをお勧めしますが、すべてのビルドツールをフィルタ処理する方法はありません。
AOSPバグトラッカーには、これら2つのポイントに対する機能要求が既にあります。彼らに投票してください。これはいつか彼らに起こるかもしれません:
やってみる
1. すべてのパッケージを一覧表示
Android list sdk --all
2. 次のコマンドを使用してパッケージをインストールする
Android update sdk -u -a -t package1, package2, package3 //comma seperated packages obtained using list command