【Android SDK】在命令列管理Android SDK

panpf發表於2019-04-15

應用場景

雖然 Android Studio 給我們提供了視覺化頁面來管理 SDK,但還是會有在命令列管理 SDK 的需求,比如在遠端管理 Jenkins 打包伺服器上的 SDK

歷史

在 SDK tools 25.2.3 版本以前 SDK 管理命令是 android,在 tools 目錄下,這時候是和其它功能共用 android 命令

從 25.2.3 開始就提供了 sdkmanager 命令專門來管理 SDK

由於 android 命令已經是過去式,這裡就不再闡述了,給出以下參考連結

參考:

sdkmanager

sdkmanager 命令專門用來管理 SDK,位於 tools/bin/ 目錄下,官方雖然提供了使用文件,但是不夠詳細,一些特殊的場景沒有給出解決辦法

參考:

列出所有已安裝、可安裝、可更新的包

$ sdkmanager --list
複製程式碼

結果如下(做了簡化,僅供參考)

Installed packages:
  Path                              | Version | Description                       | Location
  -------                           | ------- | -------                           | -------
  add-ons;addon-g..._apis-google-22 | 1.0.0   | Google APIs, Android 22           | add-ons/addon-g...apis-google-22/
  build-tools;25.0.2                | 25.0.2  | Android SDK Build-Tools 25.0.2    | build-tools/25.0.2/
  docs                              | 1       | Documentation for Android SDK     | docs/
  emulator                          | 26.0.0  | Android Emulator                  | emulator/
  extras;android;m2repository       | 47.0.0  | Android Support Repository        | extras/android/m2repository/
  extras;google;m2repository        | 55      | Google Repository                 | extras/google/m2repository/
  extras;m2reposi...ut-solver;1.0.2 | 1       | Solver for ConstraintLayout 1.0.2 | extras/m2reposi...t-solver/1.0.2/
  extras;m2reposi...nt-layout;1.0.2 | 1       | ConstraintLayout for Android 1... | extras/m2reposi...t-layout/1.0.2/
  patcher;v1                        | 1       | SDK Patch Applier v1              | patcher/v1/
  patcher;v4                        | 1       | SDK Patch Applier v4              | patcher/v4/
  platform-tools                    | 25.0.5  | Android SDK Platform-Tools        | platform-tools/
  platforms;android-25              | 3       | Android SDK Platform 25, rev 3    | platforms/android-25/
  sources;android-25                | 1       | Sources for Android 25            | sources/android-25/
  system-images;a...gle_apis;x86_64 | 4       | Google APIs Intel x86 Atom_64 ... | system-images/a...le_apis/x86_64/
  tools                             | 26.0.2  | Android SDK Tools                 | tools/

Available Packages:
  Path                              | Version      | Description
  -------                           | -------      | -------
  add-ons;addon-g..._apis-google-24 | 1            | Google APIs
  add-ons;addon-g...e_gdk-google-19 | 11           | Glass Development Kit Preview
  build-tools;26.0.0                | 26.0.0       | Android SDK Build-Tools 26
  cmake;3.6.4111459                 | 3.6.4111459  | CMake 3.6.4111459
  docs                              | 1            | Documentation for Android SDK
  emulator                          | 26.0.3       | Android Emulator
  extras;android;gapid;1            | 1.0.3        | GPU Debugging tools
  extras;android;gapid;3            | 3.1.0        | GPU Debugging tools
  extras;android;m2repository       | 47.0.0       | Android Support Repository
  extras;google;auto                | 1.1          | Android Auto Desktop Head Unit...
  extras;google;g...e_play_services | 42           | Google Play services
  extras;google;instantapps         | 1.0.0        | Instant Apps Development SDK
  extras;google;m2repository        | 55           | Google Repository
  extras;google;m...t_apk_expansion | 1            | Google Play APK Expansion library
  extras;google;market_licensing    | 1            | Google Play Licensing Library
  extras;google;play_billing        | 5            | Google Play Billing Library
  extras;google;simulators          | 1            | Android Auto API Simulators
  extras;google;webdriver           | 2            | Google Web Driver
  extras;intel;Ha...ecution_Manager | 6.1.1        | Intel x86 Emulator Accelerator...
  extras;m2reposi...ut-solver;1.0.0 | 1            | Solver for ConstraintLayout 1.0.0
  extras;m2reposi...er;1.0.0-alpha4 | 1            | com.android.support.constraint...
  extras;m2reposi...ut-solver;1.0.2 | 1            | Solver for ConstraintLayout 1.0.2
  extras;m2reposi...nt-layout;1.0.0 | 1            | ConstraintLayout for Android 1...
  extras;m2reposi...out;1.0.0-beta5 | 1            | ConstraintLayout for Android 1...
  extras;m2reposi...nt-layout;1.0.2 | 1            | ConstraintLayout for Android 1...
  lldb;2.3                          | 2.3.3614996  | LLDB 2.3
  ndk-bundle                        | 15.1.4119039 | NDK
  patcher;v4                        | 1            | SDK Patch Applier v4
  platform-tools                    | 26.0.0       | Android SDK Platform-Tools
  platforms;android-26              | 1            | Android SDK Platform 26
  sources;android-25                | 1            | Sources for Android 25
  system-images;a...s_playstore;x86 | 4            | Google Play Intel x86 Atom Sys...
  tools                             | 26.0.2       | Android SDK Tools

Available Updates:
  ID                                          | Installed | Available
  -------                                     | -------   | -------
  emulator                                    | 26.0.0    | 26.0.3
  platform-tools                              | 25.0.5    | 26.0.0
  system-images;android-25;google_apis;x86_64 | 4         | 6
done
複製程式碼

安裝

$ sdkmanager "platforms;android-26"
複製程式碼

雙引號裡面的就是Path那一列顯示的值,同理要安裝其他的包就使用對應的Path

更新

$ sdkmanager "system-images;android-25;google_apis;x86_64"
複製程式碼

更新和安裝是一樣的寫法,sdkmanager 會自動下載最新版替換已安裝的版本

一次更新全部可更新的包

$ sdkmanager --update
複製程式碼

刪除

$ sdkmanager --uninstall "sources;android-25"
複製程式碼

同意許可

我們在使用視覺化頁面安裝或更新的時候會有一個讓我們接受許可的步驟,在命令列也是有的,只需輸入"y"確認即可

你還可以通過 --licnses 引數一次檢視全部可接受的許可並輸入"y"接受,如下:

$ sdkmanager --licenses
6 of 6 SDK package licenses not accepted.
Review licenses that have not been accepted (y/N)?
複製程式碼

有多少個許可就需要輸入多少次"y"

有一種特殊的情況,當我們將這些命令寫在一個指令碼檔案裡去執行的時候許可會被自動拒絕,那麼我們怎麼才能在指令碼里需要許可的時候自動接受呢,如下:

$ yes | sdkmanager "platforms;android-26"
複製程式碼

--licnses 引數可以使用

$ yes | sdkmanager --licenses
複製程式碼

Path無效

細看上面 --list 的輸出結果就能發現,有一些 Path 由於過長,輸出的時候中間用 "..." 給替代了,這樣 的Path 是無法使用的,這時候需要加上 --verbose 引數輸出完整的 Path

$ sdkmanager --list --verbose
複製程式碼

結果如下(做了簡化,僅供參考):

Available Packages:
--------------------------------------
add-ons;addon-google_apis-google-24
    Description:        Google APIs
    Version:            1

add-ons;addon-google_gdk-google-19
    Description:        Glass Development Kit Preview
    Version:            11

build-tools;26.0.0
    Description:        Android SDK Build-Tools 26
    Version:            26.0.0

extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2
    Description:        ConstraintLayout for Android 1.0.2
    Version:            1
    Dependencies:
        extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2

sources;android-25
    Description:        Sources for Android 25
    Version:            1

system-images;android-26;google_apis_playstore;x86
    Description:        Google Play Intel x86 Atom System Image
    Version:            4
    Dependencies:
        patcher;v4

tools
    Description:        Android SDK Tools
    Version:            26.0.2
    Dependencies:
        patcher;v4
        emulator
        platform-tools Revision 20

Available Updates:
--------------------------------------
emulator
    Local Version:  26.0.0
    Remote Version: 26.0.3
system-images;android-25;google_apis;x86_64
    Local Version:  4
    Remote Version: 6
done
複製程式碼

使用代理

早些時候 SDK 裡的包都存在dl-ssl.google.com 上,國內無法訪問,需要配置代理訪問國內的映象

現如今 SDK 裡的包都存在 dl.google.com 上,國內可以直接訪問

但可能還是會有需要代理的需求,如下配置即可:

$ sdkmanager --list --proxy-host mirrors.neusoft.edu.cn --proxy-port 80 -s
複製程式碼

相關文章