如何从命令行安装旧版Android构建工具?

时间:2014-09-24 12:20:56

标签: android android-sdk-tools build-tools

我正在安装android SDK来创建自动构建服务器。我遇到了一个问题,我管理的许多基于Gradle的Android项目依赖于不同的构建工具版本。一些项目仍然需要旧的构建工具版本(例如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构建工具的简单方法?

注意:无法通过GUI安装

4 个答案:

答案 0 :(得分:58)

假设您已经下载了适用于Linux的Android SDK,您可以从命令行进行更新。

使用sdk中的 android 工具下载

您可以选择在无头模式下运行,而不是使用GUI运行android sdk管理器。您只需指定-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列出了每个包(尤其是旧包),您也可以手动下载。您可以手动打开在android sdk list - https://dl.google.com/android/repository/repository-11.xml

期间显示的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

旁注(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)下载以下软件包:

构建工具:http://dl.google.com/android/repository/build-tools_r23.0.2-linux.zip

platform-tool:https://dl.google.com/android/repository/platform-tools_r23.0.1-linux.zip

答案 1 :(得分:7)

您想要的是能够在命令行中获得SDK Manager GUI的相同功能。

发出此命令以查询存储库中的所有可用包。 查询将返回左侧带索引号的包。

[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 

答案 2 :(得分:3)

回答我自己的问题,我刚刚发现实现目标的最好方法之一就是使用SDK manager Gradle plugin by Jake Wharton

它就像添加Gradle插件一样简单。任何所需的SDK包都将按需安装到local.properties中指定的SDK位置。

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环境中发生)

答案 3 :(得分:2)

基于:How to install Android SDK Build Tools on the command line?和其他人在这里是我的版本:

#!/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 $?
}