Menguji aplikasi Android secara online berarti ponselnya berada di tempat lain. Anda menjangkaunya lewat jaringan, menginstal build, menonton layarnya di browser, dan mengambil log dengan adb seolah ada kabel yang tercolok. Jika dilakukan dengan benar, cara ini menggantikan sebagian besar fungsi laci berisi ponsel uji. Jika dilakukan asal-asalan, hasilnya hanyalah emulator lambat dengan langkah tambahan.
Panduan ini membawa satu build dari APK sampai log crash di tiga versi Android. Panduan ini memakai perintah yang saya jalankan setiap minggu, mencantumkan error instalasi yang akan Anda temui, dan diakhiri dengan situasi di mana ponsel fisik masih menjadi alat yang lebih tepat.
Siapkan build-nya
Mulailah dari build yang bisa diinstal lewat command line. Build debug sudah cukup untuk putaran pertama:
./gradlew assembleDebug ls app/build/outputs/apk/debug/
Dua pengecekan menghemat waktu nanti. Yang pertama adalah ABI. Jika aplikasi Anda membawa kode native, pastikan APK berisi library arm64-v8a. Ponsel yang dibangun dari model asli adalah arm64, dan berbeda dengan image emulator x86 di laptop Anda, ponsel ini tidak menerjemahkan kode yang dibuat untuk arsitektur lain.
unzip -l app/build/outputs/apk/debug/app-debug.apk | grep "lib/"
Yang kedua adalah flag testOnly. Saat Anda menekan Run di Android Studio, IDE menandai APK dengan android:testOnly="true", dan adb install biasa akan menolaknya. Build dari assembleDebug tidak membawa flag itu. Jika yang Anda punya hanya build dari IDE, instal dengan adb install -t.
Jika artefak rilis Anda berupa app bundle, ubah menjadi APK set untuk ponsel yang tersambung dengan bundletool:
bundletool build-apks --bundle=app-release.aab --output=app.apks --connected-device bundletool install-apks --apks=app.apks
Tanpa --ks, bundletool menandatangani dengan kunci debug. Itu tidak masalah untuk pengujian, tetapi hasilnya tidak bisa diinstal menimpa salinan yang ditandatangani dengan kunci rilis Anda.
Pilih tiga versi Android, bukan satu
Satu ponsel menyembunyikan sebagian besar bug kompatibilitas, karena Android mengubah perilaku dengan dua cara. Sebagian perubahan mengenai setiap aplikasi di rilis baru. Sebagian lainnya baru aktif saat Anda menaikkan targetSdkVersion. Tiga versi menangkap sebagian besar dari keduanya:
- Versi tertua yang masih Anda dukung, atau yang paling mendekatinya. Android 12 adalah batas bawah yang masuk akal untuk sebagian besar aplikasi di 2026.
- Versi dengan porsi terbesar di analitik Anda sendiri, sering 14 atau 15.
- Rilis terbaru, 16 atau 17, tempat perubahan yang bergantung pada target, seperti edge-to-edge yang diwajibkan dan predictive back, muncul lebih dulu.
Daftar lengkap perubahan antara setiap pasangan versi itu panjang. Testing aplikasi di berbagai versi Android memuat checklist per versi.
Langkah 1: buat ponselnya
Di layanan cloud phone, Anda memilih versi Android dan model, dan ponsel siap dalam sekitar satu menit. Beri nama setiap ponsel sesuai versinya, misalnya qa-12, qa-14, dan qa-16, supaya log dan screenshot tetap mudah dibaca seminggu kemudian. Jika Anda menjalankannya dari CI lewat skrip, perangkat pertama Anda menunjukkan langkah yang sama lewat API.
Pilih model yang benar-benar dimiliki pengguna Anda. Ponsel murah dengan panel 720p dan flagship 1440p merusak tata letak yang berbeda, jadi mencampur kerapatan layar di ketiga versi memberi cakupan lebih luas dengan waktu yang sama.
Langkah 2: instal build-nya
Ada tiga cara memasukkan APK ke ponsel: unggah di dasbor browser, kirim lewat REST API, atau jalankan adb install lewat relay ADB. Panduan aplikasi membahas dua cara pertama. Untuk adb, aktifkan relay untuk alamat IP Anda seperti dijelaskan di dokumentasi ADB, lalu sambungkan:
adb connect HOST:PORT adb -s HOST:PORT install -r app-debug.apk
Kegagalan instalasi hampir selalu salah satu dari lima ini, dan string error-nya memberi tahu yang mana:
| Error | Penyebab | Perbaikan |
|---|---|---|
INSTALL_FAILED_NO_MATCHING_ABIS | tidak ada library native untuk ABI ponsel | tambahkan arm64-v8a ke abiFilters |
INSTALL_FAILED_TEST_ONLY | APK dibuat lewat tombol Run di IDE | adb install -t, atau build dengan Gradle |
INSTALL_FAILED_UPDATE_INCOMPATIBLE | sudah terpasang salinan yang ditandatangani kunci lain | adb uninstall salinan lama dulu |
INSTALL_FAILED_DEPRECATED_SDK_VERSION | target di bawah API 23 di Android 14, di bawah 24 di 15 ke atas | naikkan targetSdkVersion |
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED | komponen dengan intent filter tidak punya android:exported di 12 ke atas | deklarasikan exported di setiap komponen seperti itu |
Langkah 3: jalankan smoke test yang bisa diulang
Jalankan putaran yang sama dengan cara yang sama di setiap versi, supaya perbedaan yang Anda lihat adalah perbedaan Android, bukan perbedaan cara Anda mengetuk. Putaran saya mencakup enam hal:
- Cold start.
am start -WmencetakTotalTimedalam milidetik. Bandingkan antarversi, bukan dengan flagship fisik. - Pertama kali dibuka. Instal tanpa
-g, supaya setiap permintaan izin runtime muncul seperti yang dilihat pengguna baru. - Ke latar belakang lalu kembali. Tekan Home, buka dua aplikasi lain, lalu kembali.
- Kematian proses. Dengan aplikasi di latar belakang,
am killmengakhiri proses seperti yang dilakukan sistem saat memori menipis. Kembali ke aplikasi harus memulihkan layar beserta statusnya. - Konfigurasi. Mode gelap, font yang lebih besar, ukuran tampilan yang berbeda.
- Navigasi kembali. Gestur kembali dari setiap layar utama.
Perintahnya, dengan S berisi alamat perangkat:
S=HOST:PORT adb -s $S shell am force-stop com.example.app adb -s $S shell am start -W -n com.example.app/.MainActivity adb -s $S shell input keyevent KEYCODE_HOME adb -s $S shell am kill com.example.app adb -s $S shell cmd uimode night yes adb -s $S shell settings put system font_scale 1.3 adb -s $S shell wm density 560 adb -s $S shell wm density reset
Kembalikan skala font dengan settings put system font_scale 1.0 dan mode gelap dengan cmd uimode night no sebelum putaran berikutnya, atau reset ponselnya.
Langkah 4: baca log-nya
Bersihkan buffer sebelum setiap skenario, lalu baca hanya proses Anda sendiri:
adb -s $S logcat -c adb -s $S shell am start -W -n com.example.app/.MainActivity adb -s $S logcat -d --pid=$(adb -s $S shell pidof -s com.example.app)
Pid berubah setiap kali proses dimulai ulang, jadi crash saat startup tidak akan muncul di bawah pid yang baru. Baca buffer crash sebagai gantinya. Buffer ini menyimpan crash Java dan native untuk setiap proses:
adb -s $S logcat -d -b crash adb -s $S logcat -d AndroidRuntime:E "*:S"
Untuk ANR, logcat hanya memberi judulnya. adb bugreport report.zip mengumpulkan trace thread dari saat itu beserta status sistem. Butuh satu atau dua menit, dan file inilah yang dilampirkan ke tiket.
Letakkan ketiga log berdampingan. Peringatan yang hanya muncul di versi terbaru biasanya perubahan yang bergantung pada target. Crash di ketiga versi adalah masalah di kode Anda.
Langkah 5: reset di antara run
pm clear menghapus data aplikasi Anda dan membiarkan sisanya: aplikasi lain, pengaturan yang Anda ubah, akun Google. Untuk perbandingan yang bersih antar suite, reset ponsel ke kondisi baru, dan pakai pm clear untuk pengulangan cepat di dalam satu suite.
Setelah putarannya stabil, tempatnya di CI. Halaman testing aplikasi menunjukkan langkah yang sama sebagai panggilan API. Instrumentation test hanyalah perintah adb biasa, jadi bisa dijalankan di perangkat apa pun yang bisa dijangkau adb:
adb -s $S shell am instrument -w -e class com.example.LoginTest \ com.example.app.test/androidx.test.runner.AndroidJUnitRunner
Batas pengujian online
Jujurlah tentang apa yang tidak bisa diberitahukan ponsel di data center:
- Kualitas kamera, autofokus, pergeseran GPS yang nyata, dan sensor biometrik.
- Performa grafis. Android tervirtualisasi merender lewat driver yang diterjemahkan atau driver software, jadi waktu frame dan jumlah jank tidak bisa dipindahkan ke ponsel fisik.
- Konsumsi baterai dan thermal throttling.
- Software vendor. Pengoptimal baterai dan pengaturan autostart di beberapa merek menghentikan pekerjaan latar belakang dengan cara yang tidak dilakukan Android standar.
- Radio: pembayaran NFC, pairing Bluetooth, fitur operator.
Simpan dua atau tiga ponsel fisik untuk pengecekan itu dan jalankan matriks yang luas secara online.
Cara gratis untuk memulai
"Testing di perangkat asli online gratis" biasanya berarti salah satu dari tiga hal. Android Emulator di mesin Anda sendiri tidak berbiaya dan merupakan tempat yang tepat untuk loop edit dan run. Device cloud publik menawarkan kuota gratis kecil untuk ponsel fisik, kebanyakan untuk run otomatis. Layanan cloud phone biasanya menawarkan trial: Clousd memberi 30 menit pertama gratis tanpa kartu, cukup untuk menginstal build dan menjalankan smoke test pertama, lihat trial gratis.


