2017年6月24日 星期六

列出 sdkmanager 可安裝套件的完整名稱

在前文“安裝 Android SDK 供『所有用戶』開發 Android APP”中,有提及用
[root@Core-i7 ~]# /opt/android-sdk/tools/bin/sdkmanager <套件名> [<套件名>]
安裝 Android SDK 的開發套件。不過,在查詢套件名稱時
[root@Core-i7 ~]# /opt/android-sdk/tools/bin/sdkmanager --list
Installed packages:
  Path                                                  | Version | Description   | Location
  -------                                                 | -------   | -------            | -------
  add-ons;addon-g..._apis-google-15 | 3        | Google APIs | add-ons/addon-g...apis-google-15/
  add-ons;addon-g..._apis-google-18 | 4        | Google APIs | add-ons/addon-g...apis-google-18/
 ..........
Available Packages:
  Path                                                  | Version   | Description
  -------                                                 | -------     | -------
  add-ons;addon-g..._apis-google-15 | 3            | Google APIs
  add-ons;addon-g..._apis-google-16 | 4            | Google APIs
  add-ons;addon-g..._apis-google-17 | 4            | Google APIs
  add-ons;addon-g..._apis-google-18 | 4            | Google APIs
  add-ons;addon-g..._apis-google-19 | 20          | Google APIs
  add-ons;addon-g..._apis-google-21 | 1            | Google APIs
 ..........
如標示為紅色的套件名稱,其中的『. . .』在安裝時卻不知該填入哪些字。想安裝也會因為不知完整名稱,而出現找不到套件名稱的錯誤訊息。
[root@Core-i7 ~]# /opt/android-sdk/tools/bin/sdkmanager "add-ons;addon-g..._apis-google-15"
Warning: Failed to find package add-ons;addon-g..._apis-google-15
[root@Core-i7 ~]# /opt/android-sdk/tools/bin/sdkmanager add-ons\;addon-g..._apis-google-15
Warning: Failed to find package add-ons;addon-g..._apis-google-15
上例中,兩個安裝命令是等效的,都是因『. . .』而無法安裝。看來,如何得知完整的套件名稱,變成用「命令列』安裝的必要條件。
  經過幾週來搜尋,發現 sdkmanager 有個隱藏參數『--verbose』,可以列出完整的套件名稱。在 sdkmanager 下『--list』參數以顯示套件名稱時,同時再加上『--verbose』這個隱藏參數。
[root@Core-i7 ~]# /opt/android-sdk/tools/bin/sdkmanager --list --verbose
Info: Parsing /home/opt/android-sdk/add-ons/addon-google_apis-google-19/package.xml
Info: Parsing /home/opt/android-sdk/add-ons/addon-google_apis-google-23/package.xml
 ..........
Info: Parsing /home/opt/android-sdk/tools/package.xml
Installed packages:
--------------------------------------
add-ons;addon-google_apis-google-15
    Description:        Google APIs
    Version:              3
    Installed Location: /home/opt/android-sdk/add-ons/addon-google_apis-google-15

add-ons;addon-google_apis-google-16
    Description:        Google APIs
    Version:              4
    Installed Location: /home/opt/android-sdk/add-ons/addon-google_apis-google-16
 ..........
上例中紅色標記的文字就是套件的完整名稱。不過,顯示出來的訊息太多,不容易找到到需要套件名稱,用 grep 命令過濾這些非套件名的訊息,只顯示套件名稱。
[root@Core-i7 ~]# /opt/android-sdk/tools/bin/sdkmanager --list --verbose | grep Available -A 1000 | grep ^[a-z]
add-ons;addon-google_apis-google-15
add-ons;addon-google_apis-google-16
add-ons;addon-google_apis-google-17
 ..........
system-images;android-26;android-tv;x86
system-images;android-26;android-wear;x86
system-images;android-26;google_apis;x86
system-images;android-26;google_apis_playstore;x86
tools
done
在上例中列出了所有套件的完整名稱,而 done 是命令結束的訊息不是套件名稱,其中『 | grep Available -A 1000 | grep ^[a-z]』是將訊息經過兩次過濾的命令,只留下『可安裝』及『套件名』,其它不相干的資訊都濾除掉。

已測試版本:

  • Android SDK: 26, 25
  • Fedora: 25, 24, 22

參考資料:

1 則留言:

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)