Menjalankan Android Emulator di Amazon EC2

4 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Android Emulator di Amazon EC2
Logo Android (Hak Cipta Google)

TeknoCerdas.com – Salam cerdas untuk kita semua. Untuk keperluan CI/CD melakukan deployment emulator Android pada cloud kadang diperlukan. AWS sendiri sudah memiliki layanan untuk itu yaitu AWS Device Farm, dan itu bukan emulator melainkan device asli. Provider lain yang cukup populer untuk layanan Android emulator di cloud adalah Genymotion. Namun kali ini kita akan mencoba untuk menjalankan Android Emulator di Amazon EC2 secara manual.

Pada uji coba kali ini kita akan menggunakan emulator Android 7.1 atau Nougat. Emulator ini akan dijalankan pada EC2 dengan tipe t3.medium dengan mode headless.

Arsitektur processor Android image yang akan digunakan adalah bertipe ARM. Hal ini karena pada EC2 selain tipe bare metal tidak memiliki fitur virtualisasi seperti KVM sehingga jika menggunakan Android x86 maka qemu akan berjalan emulasi diatas emulasi (nested virtualiazation) yang menyebabkan performa sangat lambat.

Daftar Isi

Persiapan Menjalankan Android Emulator di EC2

Berikut hal-hal yang perlu anda siapkan untuk dapat menjalankan Android Emulator di EC2.

  • Memiliki akun AWS yang aktif
  • Memiliki pemahaman dasar tentang Amazon EC2
  • Memiliki pemahaman dasar menjalankan Android Command Line Tools
  • Distribusi Linux yang digunakan adalah Ubuntu 20.04 LTS

Jika anda tidak memiliki prasyarat diatas silahkan lanjutkan membaca. Karena mungkin banyak informasi baru yang diperoleh meskipun tanpa mencoba langsung tutorial ini.

Buat EC2 Instance

Untuk keperluan ini buat EC2 instance baru dengan tipe t3.medium atau yang lebih tinggi. Kemudian untuk EBS storage gunakan minimal 32GB. Pastikan anda dapat mengakses instance lewat SSH.

Baca Juga
Membuat Amazon EC2 Instance dengan Terraform

Install Java Runtime Environment

Aplikasi Android dijalankan menggunakan Dalvik runtime yang merupakan turunan dari Java Runtime Environment (JRE). Sehingga untuk pengembangan aplikasi Android diperlukan Java Development Kit (JDK). Pada Ubuntu 20.04 paket Java dapat diinstall menggunakan default-jre. Kenapa tidak default-jdk? karena kita tidak sedang membangun aplikasi Android sehingga paket Java Runtime saja sudah cukup.

$ sudo apt install default-jre

Verifikasi dengan memanggil binary file dari java.

$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)

Download Android Command Line Tools

Kunjungi halaman https://developer.android.com/studio#command-tools untuk mendownload Android Command Line Tools.

$ mkdir ~/Downloads && cd Downloads
$ https://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip

Ekstrak command line tools ke suatu direktori contoh /opt/cmdline-tools/.

$ sudo mkdir -p /opt/android-sdk/cmdline-tools
$ sudo chown -R ubuntu:ubuntu /opt/android-sdk
$ unzip commandlinetools.zip -d /opt/android-sdk/cmdline-tools/

Sekarang harusnya terdapat direktori /opt/android-sdk/cmdline-tools/cmdline-tools. Rename subdirektori cmdline-tools kedua menjadi latest.

$ mv /opt/android-sdk/cmdline-tools/cmdline-tools /opt/android-sdk/cmdline-tools/latest
$ /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --version
4.0

Agar tidak perlu mengetikkan path lengkap maka latest/bin perlu dimasukkan ke PATH environment variable.

$ export ANDROID_SDK_ROOT=/opt/android-sdk
$ export PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$PATH

Mendownload System Image

Setiap Android Virtual Device (AVD) berasosiasi dengan sistem image atau paket SDK tertentu. Pada contoh ini kita akan mendownload paket SDK untuk Android Nougat dengan arsitektur ARM yang didalamnya sudah terdapat Google API services.

$ sdkmanager --list | grep ARM | awk '{print $1}'
...
system-images;android-24;default;arm64-v8a
system-images;android-24;default;armeabi-v7a
system-images;android-24;google_apis;arm64-v8a
system-images;android-25;android-wear-cn;armeabi-v7a
system-images;android-25;android-wear;armeabi-v7a
system-images;android-25;google_apis;arm64-v8a
system-images;android-25;google_apis;armeabi-v7a
system-images;android-S;google_apis;arm64-v8a
system-images;android-S;google_apis_playstore;arm64-v8a

SDK yang akan kita gunakan adalah android-25 dengan armeabi-v7a.

$ sdkmanager --install 'system-images;android-25;google_apis;armeabi-v7a'

Akan ada pertanyaan tentang lisensi, tekan y untuk menerima. Jalankan perintah berikut untuk melihat paket yang terinstall.

$ sdkmanager --list_installed
Installed packages:=====================] 100% Fetch remote repository...
  Path                                             | Version | Description                           | Location
  -------                                          | ------- | -------                               | -------
  patcher;v4                                       | 1       | SDK Patch Applier v4                  | patcher/v4/
  system-images;android-25;google_apis;armeabi-v7a | 18      | Google APIs ARM EABI v7a System Image | system-images/android-25/google_apis/armeabi-v7a/

Install juga beberapa paket berikut agar nantinya dapat menjalankan emulator.

$ sdkmanager --install emulator platform-tools
$ export PATH=$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools:$PATH

Membuat Android Virtual Device (AVD)

Virtual device yang akan kita buat berdasarkan sistem image anroid-25 ARM v7a dan memiliki storage 512 MB. Perintah berikut akan membuat AVD dengan nama teknocerdas.

$ avdmanager create avd \
-n teknocerdas -c 512M \
-k "system-images;android-25;google_apis;armeabi-v7a"

Lihat apakah sudah bisa digunakan dengan perintah list.

$ avdmanager list avd
Available Android Virtual Devices:
    Name: teknocerdas
    Path: /home/ubuntu/.android/avd/teknocerdas.avd
  Target: Google APIs (Google Inc.)
          Based on: Android 7.1.1 (Nougat) Tag/ABI: google_apis/armeabi-v7a
  Sdcard: 512 MB

Menjalankan Emulator Secara Headless

Sebelum menjalankan emulator buat sebuah direktori dengan nama platforms, tanpa direktori ini maka emulator tidak bisa berjalan.

$ mkdir /opt/android-sdk/platforms

Kemudan jalankan emulator dengan memanggil platform-tools/emulator. Disarankan untuk menjalankan perintah berikut pada tmux.

$ emulator -shell -show-kernel \
-gpu swiftshader_indirect -writable-system \
-no-audio -no-window -no-snapshot \
-avd teknocerdas

Opsi yang terpenting untuk headless adalah -no-window. Dengan opsi ini maka tidak ada GUI yang ditampilkan dan semua text based. Akan butuh waktu beberapa menit tapi harusnya tidak lama.

```
emulator: Android emulator version 30.6.5.0 (build_id 7324830) (CL:N/A)
emulator: WARNING: System image is writable
emulator: WARNING: encryption is off
emulator: feeding guest with passive gps data, in headless mode
cannot add library /opt/android-sdk/emulator/qemu/linux-x86_64/lib64/vulkan/libvulkan.so: failed
added library /opt/android-sdk/emulator/lib64/vulkan/libvulkan.so
cannot add library /opt/android-sdk/emulator/lib64/vulkan/libvulkan.so.1: full
emulator: INFO: GrpcServices.cpp:315: Started GRPC server at 127.0.0.1:8554, security: Local
emulator: INFO: EmulatorAdvertisement.cpp:93: Advertising in: /run/user/1000/avd/running/pid_8424.ini
emulator: Cold boot: requested by the user
....

Untuk menghentikan emulator cukup tekan CTRL+C. Status dari emulator dapat dilihat dari Android Debug Bridge (adb).

$ adb devices
List of devices attached
emulator-5554   device

Dapat terlihat bahwa terdapat sebuah emulator yang sedang berjalan. Untuk masuk ke Android shell dapat digunakan perintah adb shell.

$ adb shell

Cek versi Android yang berjalan dengan perintah getprop.

generic:/ $ getprop | grep version
[gsm.version.ril-impl]: [android reference-ril 1.0]
[ro.build.version.all_codenames]: [REL]
[ro.build.version.base_os]: []
[ro.build.version.codename]: [REL]
[ro.build.version.incremental]: [6695155]
[ro.build.version.preview_sdk]: [0]
[ro.build.version.release]: [7.1.1]
[ro.build.version.sdk]: [25]
[ro.build.version.security_patch]: [2018-01-01]
[ro.kernel.qemu.opengles.version]: [196608]

Dapat terlihat bahwa versi Android yang digunakan adalah Android 7.1.1. Dengan ADB dan Emulator yang sudah berjalan banyak hal yang bisa dilakukan seperti mengontrol process di emulator, menginstall APK dan banyak lagi.

Lalu bagaimana jika ingin melihat tampilan dari Android yang sedang berjalan di emulator? Kita dapat menginstall VNC server didalam Android itu sendiri atau menginstal memasang Window Manager pada Ubuntu sehingga bisa menampilkan GUI dan menjalankan emulator secara normal. Pembahasan ini akan dibahas pada artikel lainnya.