Как установить старую версию инструментов сборки Android из командной строки?

Я устанавливаю SDK для Android, чтобы создать автоматический сервер сборки. Я столкнулся с проблемой, когда многие проекты Android на основе Gradle, которыми я управляю, полагаются на разные версии инструментов для сборки. Некоторые из проектов по-прежнему требуют старой версии встроенных инструментов (например, v19.1.0).

Мой пакет android-sdk был загружен, когда только что выпущены средства сборки 20, так что единственная версия, доступная для загрузки через android update sdk -u --filter build-tools.

Я попытался вызвать android update sdk -u --filter build-tools-19.1.0, но это не сработало. Есть ли простой способ установить старую версию инструментов сборки Android из командной строки?

Примечание: установка через графический интерфейс невозможна

Ответ 1

Предполагая, что вы загрузили 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

Вы можете найти там ссылки на различные типы загружаемых материалов, например:

Чтобы вручную загрузить, например, версию 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

Ответ 2

То, что вы хотите, - это получить такую ​​же функциональность GUI менеджера SDK в командной строке.

Выполните эту команду для запроса всех доступных пакетов из репозитория. Запрос вернет пакеты с номером индекса слева.

[[email protected] ~]$ 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 для сужения поиска. Например:

[[email protected] ~]$ 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)

Наконец, установите желаемый пакет, указав его номер индекса в этой команде.

[[email protected] ~]$ 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 

Ответ 3

Отвечая на мой собственный вопрос, я только что нашел, что одним из лучших способов достижения моей цели является использование SDK manager Gradle плагин Jake Wharton.

Это так же просто, как добавление плагина 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)

Ответ 4

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