Как установить старую версию инструментов сборки Android из командной строки?
Я устанавливаю Android SDK для создания автоматизированного сервера сборки. Я попал в проблему, когда многие Android-проекты на базе Gradle, которыми я управляю, полагаются на разные версии инструментов сборки. Некоторые из проектов все еще требуют старой версии build-tools (например, v19.1.0).
Мой пакет android-sdk был загружен, когда только что вышла версия 20 build-tools, так что это единственная версия, доступная для загрузки через android update sdk -u --filter build-tools
,
Я пытался вызвать android update sdk -u --filter build-tools-19.1.0
но это не сработало. Есть ли простой способ установить старую версию инструментов сборки Android из командной строки?
Примечание: установка через 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
Чтобы загрузить определенные пакеты, вам нужно указать номер элемента, который вы хотите установить, из списка в следующей команде:
$ ./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
Вы также можете загрузить вещи вручную. Вы можете вручную открыть файл XML, который отображается при android sdk list
- https://dl.google.com/android/repository/repository-11.xml
Вы можете найти там ссылки на различные типы загружаемых материалов, например:
- ADK
- SDK Инструменты
- Инструменты платформы
- Инструменты сборки
- платформы
Чтобы вручную загрузить, например, версию 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
Примечание (убунту):
Если вы используете Debian/ Ubuntu 64-bit, чтобы запустить 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
инструмент платформы: https://dl.google.com/android/repository/platform-tools_r23.0.1-linux.zip
Вам нужно иметь возможность получить те же функциональные возможности графического интерфейса 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\"/\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 $?
}