Create and Launch Android Virtrual Device via Command

Create and Launch Android Virtrual Device via Command

Basic Infomation

  • OS: Ubuntu 16.4 LTS
  • Android System Image: android_24_armeabi-v7a

Introduction

正常步驟下,會使用Android Studio中的AVD(Android Virtrual Device) Manager管理與啓動Android emulator,
但有時需透過Terminal的方式達到相同的目的,例如自動化沙箱

Creating Android Virtrual Device

  1. 通過AVD Manager下載system image
    • 此步驟與使用AVD Manager創建emulator無異,一方面無法取得Google repo的system image的下載位置,另一方面是需要下載後的資料夾結構,所以直接使用AVD Manager下載system image,是最方便的做法
  2. 使用avdmanager建立emulator
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    android@android-pc:~$ cd Android/Sdk
    android@android-pc:~/Android/Sdk$ cd tools/bin
    android@android-pc:~/Android/Sdk/tools/bin$ ./avdmanager create avd -n android_24_v7a -k ""
    Error: Package path is not valid. Valid system image paths are:ository...
    system-images;android-24;default;armeabi-v7a
    null
    android@android-pc:~/Android/Sdk/tools/bin$ ./avdmanager create avd -n android_24_v7a -k "system-images;android-24;default;armeabi-v7a"
    android@android-pc:~/Android/Sdk/tools/bin$ ./avdmanager list avd
    Name: android_24_v7a
    Path: /home/android/.android/avd/android_24_v7a.avd
    Target:
    Based on: Android 7.0 (Nougat) Tag/ABI: default/armeabi-v7a
  • Android/Sdk: 爲本電腦的Androd Sdk放置處,此路徑是在Android studio安裝時自動選擇的,若爲自行安裝的Android Sdk,則進入對應的路徑
  • tools/bin: 在Android Sdk路徑下的tools/bin,爲avdmanager工具所在
  • ./avdmanager:
    • -n: Android emulator的名稱
    • -k: 若不知道要填什麼,可以先留空,avdmanager會出錯,然後列出可以使用system image
      • list avd: 列舉所有的Android emulator,確認emulator創建成功

Launching Android Virtrual Device

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
android@android-pc:~/Android/Sdk/tools/bin$ cd ..
android@android-pc:~/Android/Sdk/tools$ emulator -list-avds
android_24_v7a
android@android-pc:~/Android/Sdk/tools$ emulator -avd android_24_v7a
emulator: WARNING: encryption is off
libGL error: unable to load driver: radeonsi_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: radeonsi
libGL error: unable to load driver: swrast_dri.so
libGL error: failed to load driver: swrast
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 58
Current serial number in output stream: 59
android@android-pc:~/Android/Sdk/tools$ emulator -avd android_24_v7a -use-system-libs
  • emulator:
    • -list-avds: 列舉可用的AVD
    • 第一次啓動時出現so依賴錯誤,故新增下列參數後再次啓動
    • -use-system-libs: Use system libstdc++ instead of bundled one

Deleting Android Virtrual Device

1
2
android@android-pc:~/Android/Sdk/tools$ cd bin
android@android-pc:~/Android/Sdk/tools/bin$ ./avdmanager delete avd -n android_24_v7a
  • ./avdmanager:
    • -n: Android emulator的名稱

Adb Install Apk Error on AVD

  • INSTALL_FAILED_OLDER_SDK
    • Apk對安裝平臺的SDK版本做出最低限制
  • INSTALL_FAILED_NO_MATCHING_ABIS
    • Apk與安裝平臺的架構不同,例如將armeabi-v7a的Apk安裝在x86_64的平臺上
    • 所以雖然x86_64的Android emulator快arm很多,但不能安裝Apk就沒有意義了

Reference