自動ビルドサーバーを作成するために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を使用したインストールはできません
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
必要なのは、コマンドラインで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
私自身の質問に答えて、私の目標を達成するための最良の方法の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環境で発生する可能性が高い)
に基づいて: インストール方法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 $?
}