---
title: 'SDK Manager'
disqus: kyleAlien
---
SDK Manager
===
## OverView of Content
[**SDK Manager 官方介紹**](https://developer.android.com/studio/command-line/sdkmanager)
若對指令有問題則使用 sdkmanager --help 就可以查看其他指令 & 格式,底下會先說幾個常使用的指令
[TOC]
## sdkmanager 概述
sdkmanager工具在 Android SDK 工具擴展(25.2.3及更高版本)中提供,並位於`<android_sdk>/tools/bin` 目錄下,若有需要可以把該連接放置到環境變數
> 
### 查看資訊 list
* 指令格式
```shell=
sdkmanager --list [options] \
[--channel=channel_id] // Channels: 0 (stable), 1 (beta), 2 (dev), or 3 (canary)
```
:::success
* **版本 channel 分類**
1. **Canary**(金絲雀):Bleeding Edge(一種最新、但並非完美的技術),大約週更,這是最早被發布的預覽版本,建議在安裝 Canary 版本時同時安裝一個 Stable or Beta 版本
2. **Dev**(開發版): 跟 Canary 的差異主要是有經過 **完整的測試**
3. **Beta**(Beta版): 基於穩定版的 Canary 版本,
4. **Stable**(穩定版): Android Developer 網站上獲得的穩定版本
:::
```shell=
# 列出所有 sdk 列表
sdkmanager --list
```
> 
:::info
* 若需要列出全部的穩定版(Stable) 請使用 `--channel=0` 或是 `完全移除 --channel` 指令
:::
:::warning
* JDK 版本造成的異常
這個錯誤是由於Java 9及更高版本中的模塊化系統所引起的,該系統導致某些類和庫在默認情況下無法訪問
```shell=
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>
```
1. 下載 JDK90 以下的版本,並切換預設版本為 JDK 使用
```shell=
# 下載 JDK 8
sudo apt install openjdk-8-jdk
# 並切換預設為 JDK 8
sudo update-alternatives --config java
```
:::
### 透過 sdkmanager 下載 Packages
* 指令格式 (Package)
```shell=
sdkmanager --install packages [options]
```
**==packages 代表了路徑==**,這些路徑可以使用 `--list` 查看
> Ex: build-tools;19.1.0
> 
1. 安裝 `build-tools`
```shell=
sdkmanager --install "build-tools;29.0.3"
```
> 
去 SDK `build-tools` 就可以看到新下載的 29.0.3
> 
2. 安裝 `NDK`
```shell=
sdkmanager --install 'ndk;20.1.5948944'
```
> 
3. 安裝 `emulator`
```shell=
sdkmanager --install emulator
```
> 
### 卸載 Package
* 指令格式
```shell=
sdkmanager --uninstall packages [options]
sdkmanager --uninstall --package_file=package_file [options]
```
解除安裝 `build-tools;29.0.1`
```shell=
sdkmanager --uninstall "build-tools;29.0.1"
```
> 
### 升級已安裝 Package
* 指令格式
```shell=
sdkmanager --update [options]
```
> 
### 其他設置 Options
* 上面有列出一對中括弧的 options,可以透過 `sdkmanager --help` 查找詳細用法
| Options 指令 | 說明 |
| -------- | -------- |
| -\-sdk_root=<path\> | 安裝到指定的 SDK 路徑而不是包含此工具的 SDK (用 SDK 來位另外一個 SDK 安裝東西) |
| -\-channel=<channel id\> | 如同上面在列 --list 相同,可以選擇 0(Stable), 1(Beta), 2(Dev), 3(Canary) 版本,**未設定則下載 stable** |
| -\-include_obsolete | 包含過期的版本,**配合 --list、--update 使用** |
| -\-no_https | 使用 http 下載 |
| -\-verbose | 列出詳細內容 |
| -\-proxy={http \\| socks} | 通過給定代理建立連結,用 http 指定一個高層級協議(如 HTTP 或 FTP)的代理,或用 socks 指定一個 SOCKS(V4 或 V5)代理 |
| -\-proxy_host={IP_address \\| DNS_address} | 使用代理的 IP & DNS 地址 |
| -\-proxy_port=<port_number\> | 要連結到的代理 Port 號 |
* 使用 verbose 列出下載細項
```shell=
# 下載 build tools 26.0.0
sdkmanager --install "build-tools;26.0.0" --verbose
```
> 
## Ubuntu - sdkmanager
### command 下載 Cmdline sdkmanager
* 到 [**Android 官方網站**](https://developer.android.com/studio?gclid=Cj0KCQjwpImTBhCmARIsAKr58cywedJ3OJ5nwLWSkEDZCmWOxI5NECEO7IqZjM8HzoUphUSHQe-4znQaAgFQEALw_wcB&gclsrc=aw.ds) 下載最新版本的 Cmdline sdkmanager
```shell=
# 下載官方提供的 SDKManager 包
wget https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
# 解壓縮 zip 包
unzip commandlinetools-linux-8092744_latest.zip
```
* 將 `sdkmanager/bin` 的路徑放置到所有人 (當然可以放到個人) 的環境變數中
```shell=
sudo vim /etc/profile
# -----------------------------------------------
# /etc/profile
export TOOLS_DIR=/home/alien/tools
export PATH=$ANDROID_CMD:$NDK:$EMULATOR:$PATH
# -----------------------------------------------
source /etc/profile
```
:::warning
* `cmdline-tools : could not determine` SDK root 錯誤!無法抓取到 SDK 的根目錄,解決辦法是
1. 在下載的好的 `cmdline-tools` 資料夾下創建 `lastest` 目錄
2. 將所有的檔案移動至 `lastest 目錄下`
> 
3. 再次執行 sdkmanager 就可以使用了 :+1:
:::
### 下載 NDK、Emulator
* 透過 sdkmanager --list 可以查看到當前發布的所有 sdk 檔案,其中就有包括 NDK、SDK、Emulator 等等
1. 下載 NDK
```shell=
sdkmanager --list | grep ndk
sdkmanager --install 'ndk;24.0.8215888'
```
2. 下載 Emulator
```shell=
sdkmanager --install emulator
```
* 將下載好的工具目錄設定到 `/etc/profile` 中的 PATH,之後就可以讓所有使用者都使用到
```shell=
export TOOLS_DIR=/home/alien/tools
export ANDROID_CMD=$TOOLS_DIR/android/cmdline-tools/lastest/bin
export NDK=$TOOLS_DIR/android/ndk/24.0.82.15888
export EMULATOR=$TOOLS_DIR/android/emulator
export PATH=$ANDROID_CMD:$NDK:$EMULATOR:$PATH
```
### 查看已下載 Packages
* 查看已下載 Packages `--list_installed`
```shell=
sdkmanager --list_installed
```
> 
## Appendix & FAQ
:::info
:::
###### tags: `Android 工具`