簡體   English   中英

如何從命令行安裝舊版本的 Android 構建工具?

[英]How to install old version of Android build tools from command line?

我正在安裝 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 安裝

假設您已經下載了適用於 linux 的 Android SDK,您有兩個選項可以從命令行進行更新。

使用android工具從 sdk 下載

除了使用 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]

示例:如果我想安裝 Android SDK 構建工具修訂版 23.0.1,我將輸入:

$ ./tools/android update sdk -u -a -t 7

手動下載

由於在執行android sdk list時並未列出每個包(尤其是舊包),因此您也可以手動下載內容。 您可以手動打開在android sdk list期間顯示的 XML 文件 - 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

旁注(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

平台工具: https : //dl.google.com/android/repository/platform-tools_r23.0.1-linux.zip

您想要的是能夠在命令行中獲得與 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 

回答我自己的問題,我剛剛發現實現我的目標的最佳方法之一是使用Jake Wharton 的 SDK 管理器 Gradle 插件

就像添加 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 環境中)

基於: 如何在命令行安裝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 $?
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM