Как установить старую версию Android build tools из командной строки?
Я устанавливаю Android SDK для создания автоматического сервера сборки. Я попал в проблему, когда многие проекты Android на основе Gradle, которые я управляю, полагаются на разные версии инструментов сборки. Некоторые из проектов все еще требуют старой версии build-tools (например, 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 build tools из командной строки?
Примечание: установка через GUI невозможна
4 ответов
предполагая, что вы загрузили Android SDK для linux, у вас есть два варианта обновления из командной строки.
скачать с помощью android инструмент из sdk
вместо запуска Android sdk manager с графическим интерфейсом, у вас также есть возможность работать в безголовом режиме. Вам просто нужно указать -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
To скачать конкретные пакеты вам необходимо указать номер элемента, который вы хотите установить из списка в следующей команде:
$ ./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, вы также можете скачать все вручную. Вы можете вручную открыть файл XML, который отображается когда во время android sdk list - https://dl.google.com/android/repository/repository-11.xml
вы можете найти там ссылки на различные типы вещей для загрузки, e.g:
- ADK
- SDK Инструменты Инструменты
- http://dl.google.com/android/repository/platform-tools_rXX-linux_x86.zip
- http://dl.google.com/android/repository/platform-tools_rXX-windows.zip
- http://dl.google.com/android/repository/platform-tools_rXX-macosx.zip
- построить Инструменты
- платформ
To вручную загрузите, например, версию 19.0.1 build tools
$ 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
платформа-инструмент : https://dl.google.com/android/repository/platform-tools_r23.0.1-linux.zip
то, что вы хотите, чтобы иметь возможность получить ту же функциональность GUI SDK Manager в командной строке.
выполните эту команду для запроса всех доступных пакетов из репозитория. Запрос вернет пакеты с номером индекса слева.
[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
отвечая на мой собственный вопрос, я только что обнаружил, что один из лучших способов достичь моей цели-использовать SDK менеджер Gradle плагин Джейк Уортон.
это так же просто, как добавление плагина Gradle. Все необходимые пакеты SDK будут установлены по требованию в расположение SDK, указанное в local.properties.
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 Build Tools в командной строке? и другие, вот мой вариант:
#!/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\"//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 $?
}