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

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 $?
}