Menurut saya, Android development adalah salah satu proses development yang berat: berat di pikiran dan perangkat. Paling tidak bagi saya, yang biasanya hanya develop aplikasi-aplikasi backend menggunakan bahasa pemrograman yang ringan seperti Golang/Typescript.
Banyak yang harus disiapkan bahkan sebelum proses development dimulai, seperti:
- Install JDK
- Install Android Studio
- Install Android emulator
- Install Flutter SDK
Sebelum mulai develop, laptopnya udah “engap” duluan. Laptop “engap” itu yang melatarbelakangi rasa penasaran saya dan akhirnya lahirlah artikel ini.
Akhirnya saya penasaran konsul ke AI (bukan Ahmad Imanudin), bisa tidak kalau misal instal program-program beratnya di server terus laptop saya cuma tinggal akses source code-nya. Kebetulan kan di markas juga ada server PVE yang spesifikasinya lumayan.
Ternyata bisa, dan gini caranya:
Kebutuhan
Sebelum mulai, pastikan server kamu memenuhi kriteria berikut:
- OS: Ubuntu 22.04 LTS atau distro Linux modern lainnya.
- KVM Support: Ini wajib. Karena kita akan menjalankan emulator, CPU server harus mendukung virtualisasi (VT-x atau AMD-V).
- RAM: Minimal 8GB (Android Emulator cukup makan memori).
- Akses SSH ke servernya.
- Akses Root/Sudo.
Langkah 1: Cek KVM
Langkah pertama adalah memastikan modul KVM aktif di server. Jalankan perintah:
kvm-ok
Jika belum ada, instal pendukungnya:
sudo apt update
sudo apt install -y cpu-checker qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
Tips Penting: Agar user kamu (non-root) bisa menjalankan emulator tanpa sudo, pastikan user kamu sudah masuk ke grup kvm dan libvirt dengan perintah ini:
sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER
(Catatan: Kamu mungkin perlu logout dan login SSH kembali agar perubahan grup ini aktif).
Langkah 2: Instalasi Java (OpenJDK)
Android SDK membutuhkan Java. Install versi OpenJDK 17 yang stabil untuk Flutter saat ini.
sudo apt install -y openjdk-17-jdk
Verifikasi dengan java -version.
Langkah 3: Setup Android Command Line Tools
Karena tidak pakai Android Studio (GUI), maka harus download cmdline-tools secara manual.
Buat direktori untuk Command Line Tools:
mkdir -p ~/android-sdk/cmdline-tools && cd ~/android-sdk/cmdline-tools
Download versi terbaru di Android Developer Website. Kemudian ekstrak hasil downloadnya, seperti contoh dibawah ini (sesuaikan linknya dengan yang paling baru):
wget -c [https://dl.google.com/android/repository/commandlinetools-linux-14742923_latest.zip](https://dl.google.com/android/repository/commandlinetools-linux-14742923_latest.zip)
unzip commandlinetools-linux-*.zip
mv cmdline-tools latest
Validasi, pastikan direktori sudah seperti ini:
# $ ls ~/android-sdk/cmdline-tools/latest/
# bin lib NOTICE.txt source.properties
Langkah 4: Konfigurasi Environment Variables
Tambahkan path berikut ke file ~/.bashrc atau ~/.zshrc:
Saya pakai bash, jadi:
vi ~/.bashrc
Paling bawah tambahkan:
export ANDROID_HOME=$HOME/android-sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$HOME/flutter/bin
Setelah itu jalankan perintah ini agar environment ter-update:
source ~/.bashrc
Langkah 5: Instalasi SDK Platform dan Build Tools
Gunakan command sdkmanager untuk menginstal komponen yang diperlukan. Di sini saya menggunakan API 36 dan Build Tools versi 34 (sesuaikan dengan kebutuhan/Flutter versi terbaru):
sdkmanager "platform-tools" "platforms;android-36" "build-tools;34.0.0"
sdkmanager "emulator" "system-images;android-36;google_apis;x86_64"
Terima semua lisensi:
sdkmanager --licenses
Langkah 6: Instalasi Flutter SDK
Clone Flutter langsung dari repo resmi:
cd ~
git clone [https://github.com/flutter/flutter.git](https://github.com/flutter/flutter.git) -b stable
Jalankan flutter doctor untuk mengecek status. Jika diminta lokasi Android SDK, arahkan dengan:
flutter config --android-sdk ~/android-sdk
Setujui semua flutter android license dengan:
flutter doctor --android-licenses
Pastikan konfigurasi Flutter sudah OK, terutama pada bagian Android toolchain.

Langkah 7: Membuat dan Menjalankan Android Emulator (Headless)
Inilah bagian intinya. Membuat Virtual Device (AVD) dan menjalankannya tanpa window/headless.
Jalankan perintah berikut untuk membuat AVD:
avdmanager create avd -n RemoteDevice -k "system-images;android-36;google_apis;x86_64" --device "pixel_9"
Jalankan emulator secara Headless di background dengan perintah berikut:
nohup emulator -avd RemoteDevice -no-window -gpu swiftshader_indirect -no-audio > /dev/null 2>&1 &
Tunggu beberapa saat, lalu jalankan perintah berikut untuk cek apakah device sudah terdeteksi:
adb devices
Outputnya akan ada list emulator yang sedang berjalan, seperti berikut:
# List of devices attached
# emulator-5554 device
Langkah 8: Koneksi ke Server
Tahap terakhir, yaitu konek dari laptop ke Server yang sudah di-setup. Pastikan di laptop sudah terinstall adb dan scrcpy, jika belum install terlebih dahulu:
# macOS
brew install --cask android-platform-tools
brew install scrcpy
# Linux (Debian/Ubuntu)
sudo apt install adb scrcpy
Setelah dipastikan semua kebutuhan terinstall, tahap selanjutnya yaitu tunnel port 5555 dari server ke localhost. Ganti IP dan user sesuai kondisi:
# jalankan pada laptop/local
# ssh -L 5555:localhost:5555 <user>@<ip-server>
# contoh:
ssh -L 5555:localhost:5555 [email protected]
Jika berhasil, selanjutnya buka terminal baru di laptop lokal, kemudian jalankan perintah berikut untuk koneksi ADB local ke tunnel yang sudah dibuat:
adb connect localhost:5555
adb devices -l
Jika berhasil maka akan muncul list emulator yang terkoneksi, seperti ini:
# $ adb devices -l
# List of devices attached
# localhost:5555 device product:sdk_gphone64_x86_64 model:sdk_gphone64_x86_64 device:emu64xa transport_id:3
Terakhir konek ke interface android dengan menggunakan perintah scrcpy:
scrcpy
Maka akan ada window baru yang isinya interface android emulator yang sudah dibuat seperti ini:

Langkah 9: Tips Workflow
- Screen/Tmux: Gunakan
tmuxatauscreenuntuk menjaga proses emulator tetap jalan di background meskipun logout dari SSH. - VS Code Remote SSH: Gunakan ekstensi “Remote – SSH” di VS Code di laptop, konek ke server yang sudah di-setup, dan kamu bisa coding Flutter di server berasa coding lokal!
- Performance: Karena berjalan di atas KVM, speed emulator ini bakal hampir sama dengan native, jauh lebih kencang dibanding emulator di dalam VM biasa (nested virtualization).
Kesimpulan
Setup headless Flutter di server Linux dengan KVM memberikan fleksibilitas tinggi, terutama bagi yang punya spek laptop terbatas atau butuh otomatisasi testing. Memang awalnya agak tricky, tapi jika sudah terbiasa bakal sangat membantu agar laptop tidak “engap”.
Selamat mencoba, the more you know!
