--- title: 'AVD Manager' disqus: kyleAlien --- AVD Manager === ## OverView of Content 由於創建虛擬機需要 SDK 的配置,所以請先參考 [**SDK Manager**](https://hackmd.io/vADr7C_8SiKbgTvRAxG4KA?view) 在啟動則是使用 [**emulator**](https://hackmd.io/PDkynNEaRJiS9A8nHEy6MQ?view) 的指令 [TOC] ## 概述 1. AVD 全名為 **Android Virtual Device**,也就是虛擬機(模擬器),它的指令存放在 <SDK\>/tools/bin 資料夾下面,之後將這個路經加入到 .bashrc 中(環境變量) 2. 啟動會用到 emulator 指令,它的指令存放在 <SDK\>/emulator/emulator 資料夾下 >  查看如何使用,可以看到主要分為幾個大類,**^1^ `list`、^2^ `create`、^3^ `move`、^4^ `delect`** ```shell= avdmanager -h ``` >  ## 常用指令 ### AVD 虛擬機列表 - list * AVD 基本使用 | 指令 | 功能 | | -------- | -------- | | list | 存在的目標 or 虛擬機 (全部列出) | | list avd | 存在的 android 虛擬機 | | list target | 存在的目標 | | list device | 可創建的虛擬機 | 1. list avd ```shell= # 存在的 android 虛擬機 avdmanager list avd ``` >  2. list target:**會依照當前的 SDK platforms 顯示可創建的目標**() ```shell= # 存在的目標 avdmanager list target ``` >  ### 創建 AVD - create ```shell= # 查看 help 可以看到它的指令格式 avdmanager [global options] create avd [action options] ``` >  * 下面來說幾個較常使用到的 options,Goal 指令就自己參考囉 | Options | 功能 | | -------- | -------- | | -n --name | **必須**,Device 的成稱,當你啟動 avd 時會使用到 | | -a --snapshot | 將快照文件放在AVD中以啟用持久性 | | -c --sdcard | sdcard 大小,單位 **B(字節),KB(千字節),MB(兆字節),GB(千兆字節)或者TB(太字節** | | -p --path | 創建 AVD 的位置 | | -f --force | 強制創建,可以覆蓋同名的 Avd 裝置 | | -b --abi | ABI 就是跟每個不同的 CPU 溝通的語言,有 x86, x86_64, armeabi-v7a, arm64-v8a... | | -d --device | 裝置的 id | | -k --package | **system image for avd,需要透過 sdkmanager 下載**,eg. 'system-images;android-19;google_apis;x86' | 1. 透過 sdkmanager 查看當前有的 android 印象檔案 (images) ```shell= # 查看所有可用 & 已安裝列表 sdkmanager --list ``` >  2. 使用參數創建 ```shell= # 創建 avdmanager create avd -c 125M -n 'Arm64' -b arm64-v8a -d 8 -k 'system-images;android-24;google_apis;arm64-v8a' ``` :::info * 使用的 cpu 架構,需要查看自己 cpu 的架構 ```shell= # 目前用的是 ubuntu 系統 uname -p ``` 要依照當前裝置的 cpu 下載相對應的 system-image >  ::: 3. 查看創建後的裝置 ```shell= # 查看 list avdmanager list avd ``` >  * 簡單創建:我們可以使用 AVD 已經提供的模板+指定 package 就可以創建 1. 查看所有可創建的模板 ```shell= # 查看所有可創建的模板 avdmanager list ``` >  2. 下載指定 images ```shell= # 過濾 images 檔案 && 指定 cpu 指令集 sdkmanager --list | grep images | grep x86_64 sdkmanager --install 'system-images;android-29;default;x86_64' ``` >  3. 指定 name (-n)、package (-k) 創建模擬器 ```shell= avdmanager create avd --name 'myPhone' -k 'system-images;android-29;default;x86_64' ``` 4. 查看 avd 創建結果 ```shell= avdmanager list avd ``` >  ### 重新命名 - move ```shell= # 指令格式 avdmanager [global options] move avd [action options] ``` | Options | 功能 | | -------- | -------- | | -n --name | **必須**,用來指定需要改變的 avd 裝置 | | -p --path | 改變裝置路徑 | | -r --rename | 重新命名 | ```shell= # 改變名稱 vdmanager move avd -n test3 -r ARMv7a-1 ``` ### 移除 - delete * 刪除:若要刪除 avd 也可以使用指令刪除,刪除時必須指定 avd 名稱 ```shell= # 指令格式 avdmanager [global options] delete avd [action options] ``` | Options | 功能 | | -------- | -------- | | -n --name | **必須**,用來指定需要改變的 avd 裝置 | ```shell= # 查看當前所有的虛擬機 avdmanager list avd # 刪除指定名稱 avd, -n 使用名稱指定 # 刪除 test2 虛擬機 avdmanager delete avd -n test2 ``` ## avd 數據目錄 AVD數據目錄(也稱為內容目錄)特定於單獨的AVD實例,包含AVD的所有可修改數據。 默認位置如下,其中名稱是AVD名稱: * Mac OS X 和 Linux - ~/.android/avd/name.avd/ * Microsoft Windows XP - C:\Documents and Settings\user\.android\name.avd\ * Windows Vista 及更高版本 - C:\Users\user\.android\name.avd\ >  ### 啟動 * 必須使用到 emulator 指令,該指令在 <SDK\>/emulator/emulator/ 資料夾下 * 運行 AVD:必須透過 emulator 指令來運行,使用 -avd or @ ```shell= #1. 方法一,test 是我們上面創建的 AVD 環境 emulator -avd test4 #2. 方法二,使用 @ 符號 (功能同上) emulator @test4 ``` :::success 上面兩種方式都會佔用終端機,但只要在指令的最後加上 `&` 就不會佔用到終端機 > emulator -avd test4 & ::: ## 異常 ### Avdmanager - NoClassDefFoundError * Avdmanager 在執行時若發生 NoClassDefFoundError 錯誤,那請先移除當前的 openjdk 版本,並安裝支援的 jdk 版本 ([**參考**](https://askubuntu.com/questions/1025743/avdmanager-throws-exception-when-trying-to-run-it-from-bash)) ```shell= #Remove all previous JDK version : sudo apt-get autoremove openjdk* #Then install JDK 8 : sudo apt-get install openjdk-8-jdk ``` >  * 修正後就可以正常執行 avdmanager 指令 >  ## Appendix & FAQ :::info ::: ###### tags: `Android 工具`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up