我正在安装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安装
答案 0 :(得分:58)
假设您已经下载了适用于Linux的Android SDK,您可以从命令行进行更新。
使用sdk中的 android 工具下载
您可以选择在无头模式下运行,而不是使用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构建工具修订版23.0.1,我会输入:
$ ./tools/android update sdk -u -a -t 7
手动下载
由于并非android sdk list
列出了每个包(尤其是旧包),您也可以手动下载。您可以手动打开在android sdk list
- 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)下载以下软件包:
构建工具: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
答案 1 :(得分:7)
您想要的是能够在命令行中获得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
答案 2 :(得分:3)
回答我自己的问题,我刚刚发现实现目标的最好方法之一就是使用SDK 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 :(得分:2)
基于:How to install Android SDK Build Tools on the command line?和其他人在这里是我的版本:
#!/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 $?
}