318

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

4

20 に答える 20

83

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

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

インストール済みで利用可能なパッケージを一覧表示します。

sdkmanager --list [options] \
      [--channel=channel_id] // Channels: 0 (stable), 1 (beta), 2 (dev), or 3 (canary)

channel オプションを使用して、チャネルから channel_id までのパッケージを含めます。たとえば、カナリア チャネルを指定して、すべてのチャネルからパッケージを一覧表示します。

パッケージをインストールします。

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.
于 2016-12-19T13:12:23.797 に答える
56

ADB Build-Tools は、コマンド 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
于 2014-04-04T11:49:53.753 に答える
22

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

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

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

優先バージョンをインストールするには

sdkmanager "build-tools;27.0.3"
于 2018-01-05T05:44:50.087 に答える
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}

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

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

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

于 2015-08-09T02:50:46.780 に答える
8

ただし、実行が遅すぎる

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

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

完了するまで実行しましたか?

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

例えば:

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

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

于 2013-08-01T20:42:14.627 に答える
7

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

何かのようなもの:

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

于 2017-01-31T19:49:16.767 に答える
4

私はちょうどこの問題を抱えていたので、利用可能なツールのリストを読んで解析することで、最終的に1行のbashダーティソリューションを書きました:

 tools/android update sdk -u -t $(android list sdk | grep 'Android SDK Build-tools' | sed 's/ *\([0-9]\+\)\-.*/\1/')
于 2015-01-16T10:14:47.813 に答える
4

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

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」を投げ続けます。
于 2016-03-28T12:03:27.530 に答える
2

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

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

https://stackoverflow.com/a/17863931/1104031投稿で「expect」ツールをダンブとして使用しました。python27android-sdk と,のみが必要です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)
于 2014-02-04T11:05:05.723 に答える
-1

Androidスタジオ全体をインストールせずにAndroid環境をセットアップするには:

  1. JDK をダウンロード (バージョン 8 以上)
  2. https://gradle.org/install/から gradle をダウンロードします。
  3. https://developer.android.com/studioからコマンド ライン ツールをダウンロードします。下にスクロールして、コマンド ライン ツールのみをダウンロードします。
  4. 必要な環境変数を設定する
  5. 必要な SDK ツールをダウンロードする
于 2021-03-09T07:22:16.190 に答える