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

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

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