--- 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.