web-dev-qa-db-ja.com

古いバージョンのAndroidビルドツールをコマンドラインからインストールする方法は?

自動ビルドサーバーを作成するためにAndroid SDKをインストールしています。私が管理するGradleベースのAndroidプロジェクトの多くが異なるビルドツールバージョンに依存するという問題に遭遇しました。古いビルドツールバージョン(v19.1.0など)を必要とするプロジェクトもあります。

私のAndroid-sdkパッケージは、build-toolsバージョン20がリリースされたときにダウンロードされたため、Android update sdk -u --filter build-toolsからダウンロードできる唯一のバージョンです。

Android update sdk -u --filter build-tools-19.1.0を呼び出そうとしましたが、うまくいきませんでした。コマンドラインからAndroidビルドツールの古いバージョンを簡単にインストールする方法はありますか?

注:GUIを使用したインストールはできません

32
akhy

Android SDK for Linuxをダウンロードしたと仮定すると、コマンドラインから更新する2つのオプションがあります。

Android SDKからツールを使用してダウンロードする

GUIでAndroid SDKマネージャーを実行する代わりに、ヘッドレスモードで実行するオプションもあります。-u(または--no-ui)フラグを指定するだけです。 。

インストールまたはアップグレードに利用可能なパッケージをリストするには:

$ cd Android-sdk-linux
$ ./tools/Android list sdk --all
Refresh Sources:
  (...)
  Fetching URL: https://dl.google.com/Android/repository/repository-11.xml
  (...)
Packages available for installation or update: 166
   1- Android SDK Tools, revision 24.4.1
   2- Android SDK Tools, revision 25.0.9 rc10
   3- Android SDK Platform-tools, revision 23.1
   4- Android SDK Platform-tools, revision 24 rc1
   5- Android SDK Build-tools, revision 24 rc1
   6- Android SDK Build-tools, revision 23.0.2
   7- Android SDK Build-tools, revision 23.0.1
   8- Android SDK Build-tools, revision 23 (Obsolete)
  (...)
 162- Google Play Billing Library, revision 5
 163- Google Play Licensing Library, revision 2
 164- Android Auto API Simulators, revision 1
 165- Google Web Driver, revision 2
 166- Intel x86 Emulator Accelerator (HAXM installer), revision 6.0.1

特定のパッケージをダウンロードするには、次のコマンドのリストからインストールするアイテムの番号を指定する必要があります。

$ ./tools/Android update sdk -u -a -t [NO_OF_ITEM_TO_BE_INSTALLED]

例:andorid sdk build tools revision 23.0.1をインストールする場合、次のように入力します。

$ ./tools/Android update sdk -u -a -t 7

手動ダウンロード

Android sdk listを実行するとすべてのパッケージ(特に古いパッケージ)がリストされるわけではないため、手動でダウンロードすることもできます。 Android sdk list中に表示されるXMLファイルを手動で開くことができます- https://dl.google.com/Android/repository/repository-11.xml

ここには、ダウンロードするさまざまなタイプのリンクがあります。例:

手動でダウンロードするにはビルドツールのバージョン19.0.1

$ cd Android-sdk-linux/build-tools
$ wget http://dl.google.com/Android/repository/build-tools_r19.0.1-linux.Zip
$ unzip build-tools_r19.0.1-linux.Zip
$ mv Android-4.4.2 19.0.1
$ rm build-tools_r19.0.1-linux.Zip

サイドノート(ubuntu):

Debian/ubuntu 64ビットを実行している場合、aaptを実行するには追加のパッケージをインストールする必要があります。

Sudo apt-get install lib32stdc++6
Sudo apt-get install lib32z1

CentOs(RedHat)を実行している場合、aaptを実行するには、追加のパッケージをインストールする必要があります。

Sudo yum install zlib.i686 libstd++.i686

aaptの実行中に、GLIBC 2.14でエラーが発生し、ロケールGLIBCをアップグレードする必要がない場合。次に、sdkの次のパッケージ(build-tool、platform-tool)をダウンロードする必要があります。

build-tool: http://dl.google.com/Android/repository/build-tools_r23.0.2-linux.Zip

platform-tool: https://dl.google.com/Android/repository/platform-tools_r23.0.1-linux.Zip

60
wtekiela

必要なのは、コマンドラインでSDK Manager GUIと同じ機能を取得できるようにすることです。

このコマンドを発行して、リポジトリーから使用可能なすべてのパッケージを照会します。クエリは、左側にインデックス番号を持つパッケージを返します。

[rgulia@xinu ~]$ Android list sdk --all 
Refresh Sources:
  Fetching https://dl-ssl.google.com/Android/repository/addons_list-2.xml
  Validate XML
  Parse XML
  Fetched Add-ons List successfully
  …
  Validate XML: https://dl-ssl.google.com/Android/repository/sys-img/x86/addon-x86.xml
  Parse XML:    https://dl-ssl.google.com/Android/repository/sys-img/x86/addon-x86.xml
  Packages available for installation or update: 138
  1- Android SDK Tools, revision 24.1.2
  2- Android SDK Platform-tools, revision 22
  3- Android SDK Build-tools, revision 22.0.1
  4- Android SDK Build-tools, revision 22 (Obsolete)
  5- Android SDK Build-tools, revision 21.1.2
  ….

Grepコマンドを使用して、検索を絞り込むことができます。例えば:

[rgulia@xinu ~]$ Android list sdk --all | grep -i tools | grep 21
   5- Android SDK Build-tools, revision 21.1.2
   6- Android SDK Build-tools, revision 21.1.1 (Obsolete)
   7- Android SDK Build-tools, revision 21.1 (Obsolete)
   8- Android SDK Build-tools, revision 21.0.2 (Obsolete)
   9- Android SDK Build-tools, revision 21.0.1 (Obsolete)
  10- Android SDK Build-tools, revision 21 (Obsolete)

最後に、このコマンドでインデックス番号を指定して、目的のパッケージをインストールします。

[rgulia@xinu ~]$ Android update sdk -u -a -t 5

オプションには次の意味があります。

-u (--no-ui)  # Headless mode
-a (--all)    # Includes all packages, included the obsolete ones
-t (--filter) # in this example we have filtered by package index, i.e. 5 
7
rgulia

私自身の質問に答えて、私の目標を達成するための最良の方法の1つは、 Sake manager Gradle plugin by Jake Wharton を使用することであることがわかりました。

Gradleプラグインを追加するのと同じくらい簡単です。必要なSDKパッケージは、local.propertiesで指定されたSDKの場所にオンデマンドでインストールされます。

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath 'com.Android.tools.build:gradle:0.12.+'
    classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
  }
}

apply plugin: 'Android-sdk-manager'
apply plugin: 'com.Android.application'

このアプローチは、特にヘッドレスCI環境で非常に効果的です。 Android_HOMEがまだない場合に備えて、local.properties環境変数を追加することを忘れないでください(CI環境で発生する可能性が高い)

3
akhy

に基づいて: インストール方法AndroidコマンドラインでSDKビルドツール? その他のバージョンは私のバージョンです:

#!/bin/bash -e

installAndroidSdk() {
    local url=http://dl.google.com/Android/android-sdk_r24.3-linux.tgz

    Sudo apt-get install -y lib32stdc++6 lib32z1

    # Install Android SDK
    (
        cd /opt

        curl -o Android.tgz -sL $url

        tar xzf Android.tgz

        mv Android-sdk-linux/ Android

        rm Android.tgz

        echo "export Android_HOME=/opt/Android" > /etc/profile.d/Android.sh
        echo "export PATH=\$PATH:\$Android_HOME/tools:\$Android_HOME/platform-tools" >> /etc/profile.d/Android.sh
        source /etc/profile.d/Android.sh

        Android list sdk --all --extended > /tmp/Android-skds

        modules=( platform-tools build-tools-22.0.1 Android-22 )
        for module in ${modules[@]}; do
            moduleId=$(less /tmp/Android-skds | sed -n "s/id: \(.*\) or \"$module\"/\1/p")
            if [[ ! -z "$moduleId" ]]; then
                expect -c "
                    set timeout -1   ;
                    spawn Android update sdk -u -a -t $moduleId;
                    expect { 
                        \"Do you accept the license\" { exp_send \"y\r\" ; exp_continue }
                        eof
                    }
                "
            else
                echo "[WARNING] - $module was not installed."
            fi
        done

        echo "export PATH=\$PATH:\$Android_HOME/build-tools/22.0.1" | Sudo tee -a /etc/profile.d/Android.sh

        rm -f /tmp/Android-skds
        Sudo apt-get install -y Android-tools-adb
    )
    return $?
}
2
uthomas