CLOUSD
Buka akun
AI agent

Cara AI agent mengendalikan ponsel Android

Agent mengendalikan ponsel dengan sebuah loop: melihat layar, memutuskan, bertindak, lalu memeriksa. Cara kerja setiap langkahnya, apa yang ditambahkan MCP, dan kegagalan yang pasti dihadapi setiap pembuat agent.

Model bahasa tidak bisa mengetuk layar. Untuk mengendalikan ponsel Android, model membutuhkan harness yang mengubah layar menjadi sesuatu yang bisa dibaca model, dan mengubah keputusan model menjadi sentuhan dan penekanan tombol. Harness riset, alat pengujian, dan produk yang memesan atau membeli sesuatu untuk penggunanya semuanya memakai variasi dari loop yang sama.

Artikel ini membedah loop tersebut langkah demi langkah, lengkap dengan perintah ADB di baliknya, lalu membahas posisi MCP dan kegagalan yang muncul di setiap proyek nyata: popup, izin aplikasi, tanggal, daftar panjang, dan layar yang sama sekali tidak bisa dibaca agent.

Loop-nya

Setiap langkah agent di ponsel terdiri dari empat bagian:

  1. Observe. Tangkap layar saat ini: screenshot, pohon UI, atau keduanya.
  2. Decide. Kirim tujuan, riwayat singkat langkah sebelumnya, dan observasi terkini ke model. Model menjawab dengan satu aksi terstruktur: ketuk elemen ini, ketik teks ini, geser, tekan Back, buka aplikasi, tunggu, atau selesai dengan sebuah jawaban.
  3. Act. Harness mengubah aksi itu menjadi event input di ponsel.
  4. Check. Lakukan observasi lagi dan pastikan layar berubah sesuai maksud aksi tersebut.

Dalam kode, kerangkanya singkat:

steps = 0
while steps < max_steps:
    obs = phone.observe()              # screenshot + elements with text and bounds
    action = model.next_action(goal, history, obs)
    if action.kind == "done":
        return action.answer
    phone.act(action, seq=obs.seq)     # refuse if the screen changed since obs
    history.append((obs.summary, action))
    steps += 1

Pekerjaan beratnya tersembunyi di dalam observe dan act, serta pada apa yang Anda masukkan ke history. Jaga riwayat tetap ringkas: satu baris per langkah berisi aksi dan apa yang berubah sudah cukup. Screenshot penuh dari setiap langkah sebelumnya hanya menghabiskan konteks tanpa membantu model memutuskan.

Melihat layar: piksel dan pohon UI

Ada dua cara memperlihatkan layar kepada model, dan sebagian besar agent yang berhasil menggabungkan keduanya.

SumberYang diberikanKelemahannya
ScreenshotSemua yang terlihat, termasuk ikon dan gambar; butuh model visionTarget kecil, ikon yang mirip, koordinat yang presisi
Pohon UITeks, resource id, nama class, bounds, flag clickable; presisi dan murahGame dan gambar di canvas, sebagian WebView, custom view tanpa label aksesibilitas
Screenshot dengan elemen bernomorGambar untuk konteks plus id pasti untuk setiap targetLayar padat dengan elemen yang saling tumpang tindih

Dengan ADB biasa, bahan mentahnya terlihat seperti ini:

adb exec-out screencap -p > screen.png
adb shell uiautomator dump /sdcard/ui.xml && adb pull /sdcard/ui.xml

Hasil dump memuat setiap node beserta text, resource-id, content-desc, dan bounds-nya. Mengetuk titik tengah bounds sebuah node jauh lebih andal daripada meminta model vision menebak koordinat mentah. Satu catatan: UI dump menunggu layar diam, dan layar yang terus bergerak, seperti video yang sedang diputar atau timer yang berjalan, bisa membuatnya gagal. Harness sebaiknya beralih ke screenshot saat itu terjadi.

Bertindak: ketuk, teks, dan timing

Perintah input dasarnya:

adb shell input tap 540 1650
adb shell input swipe 540 1600 540 600 300
adb shell input text "hello%sworld"
adb shell input keyevent KEYCODE_BACK

Perhatikan %s di input text: artinya spasi, dan perintah ini tidak bisa menangani sebagian besar karakter non-ASCII. Harness yang butuh alfabet lain menaruh teks di clipboard lalu menempelkannya.

Tiga detail membedakan agent yang andal dari yang sering gagal:

  • Fokus sebelum mengetik. Ketuk kolomnya dulu, baru mengetik. Setelah itu keyboard menutupi kira-kira separuh bawah layar, jadi lakukan observasi lagi sebelum ketukan berikutnya.
  • Tunggu layar stabil, jangan sleep. Setelah sebuah aksi, tunggu sampai layar berhenti berubah, dengan batas beberapa detik. Sleep tetap entah membuang waktu atau bertindak sebelum halaman selesai dimuat.
  • Tolak aksi usang. Jika layar berubah setelah observasi yang dipakai model, aksinya bisa mengenai elemen yang salah. Harness yang baik memberi nomor urut pada setiap observasi dan menolak aksi yang dihitung dari observasi lama, sehingga agent dipaksa melihat ulang alih-alih menebak.

Posisi MCP

Model Context Protocol adalah cara standar untuk memberi model sejumlah alat (tools). Server MCP untuk ponsel menyediakan alat seperti menampilkan daftar perangkat, mengobservasi layar, dan bertindak di layar, sehingga klien MCP apa pun (Claude Code, Codex, Cursor, dan lainnya) bisa mengendalikan ponsel tanpa kode perekat khusus. Loop-nya tidak berubah; MCP hanya menstandarkan pemanggilannya.

Ada dua tingkat kendali. Di tingkat rendah, agent Anda memanggil observe dan act dan memutuskan setiap langkah sendiri. Di tingkat tinggi, agent menyerahkan tujuan kepada agent yang tinggal di samping ponsel: "buka aplikasinya, masukkan beras 2 kg ke keranjang, laporkan totalnya". Clousd mendukung kedua tingkat: observe dan act lewat REST API dan server MCP, serta Tugas, tempat Anda memberi ponsel tujuan dengan kalimat biasa lalu agent Clousd mengerjakan langkah-langkahnya dan mengembalikan jawabannya. Halaman agent menampilkan keduanya berdampingan.

Penyebab agent gagal

Dialog izin, permintaan "beri rating aplikasi ini", pemberitahuan update, tooltip, banner cookie di dalam WebView, dan dialog "aplikasi tidak merespons" muncul pada saat yang acak. Agent yang mengikuti rencana secara buta akan mengetuk hal yang salah. Tambahkan aturan di prompt: sebelum melanjutkan rencana, tutup setiap dialog yang bukan bagian dari tugas. Di setup pengujian, berikan izin lebih dulu dengan adb shell pm grant com.example.app android.permission.POST_NOTIFICATIONS.

Izin yang berbeda di tiap versi Android

Android 13 menambahkan izin runtime untuk notifikasi. Android 14 menambahkan akses foto sebagian, ketika pengguna memilih "Pilih foto" alih-alih mengizinkan semuanya. Lokasi punya pilihan "Saat aplikasi digunakan" dan "Hanya kali ini". Tugas yang sama menghasilkan dialog berbeda di versi yang berbeda, jadi uji agent di lebih dari satu versi.

Tanggal dan waktu

"Tambahkan rapat Selasa depan" bergantung pada jam dan zona waktu ponsel, sementara pemahaman model tentang "hari ini" berasal dari data latihnya. Masukkan tanggal, jam, dan zona waktu perangkat ke setiap observasi. Suite pengujian yang memeriksa hasil bertanggal butuh jam ponsel yang diatur sesuai harapan tugas.

Teks panjang dan daftar panjang

Mengetik beberapa paragraf menghabiskan jatah langkah. Menghitung item di daftar yang butuh lima kali scroll, atau mencari duplikat di dalamnya, menuntut agent mengingat apa yang sudah dilihatnya. Inilah tugas-tugas yang paling sering membuat agent gagal saat ini, dan hasil AndroidWorld di halaman benchmark kami merinci kegagalannya per jenis.

Layar yang tidak bisa dibaca agent

Aplikasi yang memasang flag secure pada jendela, umum di aplikasi bank dan layar kata sandi, tampil hitam di screenshot. Game yang menggambar di canvas tidak punya pohon UI. Rancang tugas dengan memperhitungkan batasan ini, jangan biarkan agent berputar-putar di layar kosong.

Status yang terbawa antar run

Sesi yang masih login, data cache, dan notifikasi dari run sebelumnya mengubah apa yang dilihat agent di run berikutnya. Untuk evaluasi, reset ponsel ke kondisi baru di antara run supaya setiap percobaan dimulai dengan cara yang sama.

Membangun evaluasi yang bermakna

  • Kumpulan tugas yang tetap, masing-masing dengan kondisi akhir yang bisa dicek dari luar: baris di database, sebuah file, activity teratas (adb shell dumpsys activity top).
  • Satu percobaan per tugas dengan jatah langkah yang tetap. Pengulangan menyembunyikan tingkat kegagalan yang sebenarnya.
  • Screenshot dan aksi untuk setiap langkah, supaya Anda bisa membaca kenapa sebuah tugas gagal.
  • Dua atau tiga model ponsel dan versi Android. Agent yang berhasil di satu ukuran layar sering gagal di ukuran lain.

Untuk pemeriksaan yang butuh lebih dari sekadar layar, ponsel yang sama bisa dijangkau lewat ADB melalui relay yang aman.

Siap menjalankan
cloud phone pertama Anda?

Coba gratis 30 menit

Tanpa kartu