Как установить старую версию 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 $?
}