Persyaratan
Headless API memungkinkan Anda mengontrol HideMyAndroid sepenuhnya melalui ADB atau alat otomasi apa pun — tanpa memerlukan UI aplikasi. Ini adalah fitur Premium.
- Akun Premium — Headless API hanya tersedia untuk pengguna Premium.
- Versi aplikasi 1.2.8 atau lebih baru. Semua yang ditambahkan sejak itu berupa kolom atau metode tambahan, jadi 1.2.8 tetap berfungsi — tetapi bagian yang lebih baru memerlukan build yang lebih baru:
hook_spoof_uptimememerlukan 1.3.4+,geodanprofile.duplicatememerlukan 1.4.5+, seluruh grup pencadangan / pemulihan memerlukan 1.5.3+, generator SIM & perangkat (simCountries,deviceTemplate,sim.countries,device.templates) memerlukan 1.5.9+,hook_sensor_gyroscopememerlukan 1.6.3+, danhook_sensor_lightmemerlukan 1.6.4+. Build lama mengabaikan kolom yang tidak dikenalnya dan tetap menjawabok=true— tetapi metode yang tidak dikenal lebih nyaring: memanggil grup pencadangan / pemulihan pada build sebelum 1.5.3, atausim.countries/device.templatessebelum 1.5.9, mengembalikanBAD_REQUESTdenganerror_message“Unknown method: …”. Bila sebuah pengaturan tampak tidak berpengaruh, periksaversionyang sedang berjalan lewat status — rilis terpaket melaporkannya dengan akurat, sedangkan build hasil kompilasi sendiri yang dibuat sebelum nomor versinya dinaikkan bisa saja sudah membawa sebuah fitur namun tetap melaporkan nomor yang lama. - Root + LSPosed — konfigurasi yang sama yang dibutuhkan HideMyAndroid. Lihat panduan instalasi.
- ADB yang terhubung ke perangkat Anda (
adb devicesakan menampilkannya). - Internet pada perangkat — hanya diperlukan saat Anda mengaktifkan proxy (diuji secara langsung).
⚠️ Izin VPN hanya diperlukan untuk profil yang memakai proxy. Mode headless tidak dapat memunculkan dialog persetujuan VPN sistem, jadi berikan izinnya sekali dari layar Headless API di aplikasi. Tanpa itu, mengaktifkan profil berproxy tetap mengaktifkan profilnya, tetapi proxy tidak akan terhubung dan panggilan mengembalikan
INTERNALyang menyatakan hal tersebut.
Autentikasi
Buka Pengaturan → Developer → Headless API di aplikasi dan aktifkan Enable. Kunci akan dibuat secara otomatis — ketuk Copy. Setiap permintaan mengirimkan kunci ini sebagai parameter token.
Jaga kerahasiaannya — siapa pun yang memiliki kunci dan akses ADB dapat mengontrol profil Anda. Regenerate akan menerbitkan kunci baru (kunci lama tidak akan berfungsi lagi); keluar dari aplikasi akan menghapusnya.
Sepanjang referensi ini, ganti <your_access_token> dengan kunci Anda dan <profile_id> dengan id yang dikembalikan oleh profile.create.
Membuat permintaan
Dua transport, dipilih berdasarkan apakah nilai mengandung tanda titik dua :
| Transport | Digunakan untuk | Perintah |
|---|---|---|
content call | Pembacaan, dan nilai tanpa : (name, gmails, nama paket, simCountries, id deviceTemplate bawaan) | adb shell content call |
am broadcast | Objek JSON (hookFlags, proxy, deviceMock, sim) dan id templat custom: — mengandung : | adb shell am broadcast |
content call memisahkan setiap --extra pada tanda titik dua, sehingga tidak dapat membawa JSON — itulah mengapa nilai JSON dikirim melalui broadcast.
Hanya tiga metode yang punya bentuk broadcast: HEADLESS_UPDATE (profile.update), HEADLESS_SET_ACTIVE, dan HEADLESS_DEACTIVATE. Tujuh belas sisanya — status, semua operasi baca (termasuk sim.countries dan device.templates), profile.create, profile.duplicate, profile.delete, panggilan aplikasi target, dan seluruh grup pencadangan / pemulihan — hanya lewat content call. Tidak ada HEADLESS_CREATE — atau HEADLESS_BACKUP — yang perlu dicari.
Broadcast bukan hanya untuk JSON. HEADLESS_UPDATE meneruskan tepat sembilan extra — name, hookFlags, proxy, geo, deviceMock, sim, gmails, dan sejak 1.5.9 simCountries serta deviceTemplate — sehingga name, gmails, dan simCountries bisa lewat kedua transport. Tabel di atas soal mana yang lebih praktis, bukan mana yang mungkin. Extra apa pun yang namanya tidak termasuk dalam sembilan itu akan dibuang tanpa kesalahan.
Respons. Sukses ditandai dengan ok=true (content call) atau result=0 (broadcast); kegagalan menambahkan error_code dan error_message. Lihat Kode error. Setiap metode juga menerima token. Klik operasi mana pun di bawah untuk memperluas parameter, permintaan, dan responnya.
Status
READ status Periksa apakah API siap digunakan content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token> Response ok=true
Bundle[{data={"premium":true,"featureEnabled":true,"freshnessOk":true,"activeProfileId":"a1b2c3d4-...","version":"1.5.9"}, ok=true}] Kolom: premium, featureEnabled, freshnessOk, activeProfileId (atau null), version. freshnessOk bernilai true bila aplikasi menyelesaikan validasi lisensi daring dalam 24 jam terakhir. Pemeriksaannya sendiri luring — permintaan headless tidak pernah menyentuh jaringan, ia hanya membaca hasil yang tersimpan, dan premium juga dibaca secara luring. Buka aplikasi setidaknya sekali sehari agar freshnessOk tetap true.
💡
statusadalah satu-satunya metode yang tetap menjawab saat lisensi kedaluwarsa atau basi — semua panggilan lain hanya mengembalikanLICENSE_EXPIREDatauLICENSE_STALE. Itulah cara membedakan keduanya ketika permintaan ditolak: bacapremiumuntuk melihat apakah Premium benar-benar habis, danfreshnessOkuntuk melihat apakah aplikasi sekadar perlu dibuka sekali.statustetap dibatasi olehFEATURE_DISABLEDdanUNAUTHORIZED, jadi API yang mati atau token yang salah tampak sama seperti di tempat lain.
Profil
READ profile.list Tampilkan semua profil content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.list --extra token:s:<your_access_token> Response ok=true
Bundle[{data=[{"id":"a1b2...","name":"Demo","isActive":true,"createdAt":1717000000000,"updatedAt":1717000500000}], ok=true}] READ profile.get Baca satu profil secara lengkap content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={"id":"a1b2...","name":"Demo","isActive":false,"hookFlags":{"hook_wifi":true,...},"proxy":{"enabled":false,...},"geo":{"source":"PROXY",...},"deviceMock":{"enabled":false,...},"sim":{"enabled":false,"simCards":[]},"gmails":[],"targetApps":["com.whatsapp"]}, ok=true}] CREATE profile.create Buat profil (mengembalikan id-nya) content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
name | string | required | Label untuk profil. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo Response ok=true
Bundle[{data={"id":"a1b2c3d4-..."}, ok=true}] Salin id ini sebagai <profile_id> untuk panggilan berikutnya.
CREATE profile.duplicate Klon profil dengan identitas baru content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil yang akan disalin. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.duplicate --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={"id":"e5f6a7b8-...","name":"Brave Falcon 42"}, ok=true}] ID baru dan nama yang dihasilkan dikembalikan bersamaan — profile.create hanya mengembalikan id, jadi jangan menganggap keduanya sama.
⚠️ Nama dibuatkan untuk Anda dan tidak dapat dipilih di dalam panggilan ini. Ganti nama salinannya dengan profile.update tepat setelahnya bila Anda ingin nama sendiri.
Apa saja yang ikut ke salinan
Mengklon profil persis seperti menu Duplicate di dalam aplikasi — memerlukan aplikasi 1.4.5+. Pengaturan ikut terbawa, tetapi setiap nilai penanda identitas dibuat ulang, sehingga salinannya punya sidik jari sendiri alih-alih menjadi kembaran aslinya. Tidak ada bentuk broadcast: broadcast sekali-kirim-lalu-lupakan tidak dapat menyerahkan id baru kepada Anda, padahal itulah inti panggilan ini.
| Apa | Di salinan |
|---|---|
Aplikasi target, hookFlags, proxy (termasuk geo yang sudah tervalidasi), geo, paket tersembunyi | Terbawa tanpa perubahan |
| Setiap penanda identitas perangkat — baik di tingkat profil maupun untuk tiap aplikasi di dalam profil | Diterbitkan ulang, sehingga salinannya punya sidik jari sendiri alih-alih menjadi kembaran aslinya |
deviceMock (bila aktif) | Digulirkan ke templat perangkat yang berbeda |
sim | Negara sama, nomor baru |
| Paket cadangan | Tidak disalin — cadangan dikunci ke {package}-{profileId}, jadi salinannya tidak memiliki satu pun dan mulai dari kosong |
| Akun Gmail virtual | Satu alamat baru bila profil sumber mengaktifkan hook_virtual_accounts; daftar kosong bila tidak |
| Nama | Dibuat otomatis dan dijamin unik, berbentuk Brave Falcon 42 — Anda tidak dapat memilihnya, itulah sebabnya nama tersebut dikembalikan kepada Anda |
| Status aktif | Selalu isActive: false — menduplikasi tidak pernah mengaktifkan |
Untuk mendapatkan nama Anda sendiri, duplikasi dahulu lalu ganti namanya pada panggilan kedua:
# 1. duplicate — the new id and its generated name come back together
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.duplicate --extra token:s:<your_access_token> --extra id:s:<source_profile_id>
# 2. rename the copy — profile.duplicate never takes a name of your own
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<new_profile_id> --extra name:s:"My Profile" UPDATE profile.update Ubah pengaturan profil content call / broadcast
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. |
name | string | optional | Label profil baru (content call). |
gmails | string[] | optional | Akun @gmail.com virtual (content call). |
hookFlags | object | optional | Sakelar spoofing aktif/nonaktif (broadcast). |
proxy | object | optional | Konfigurasi proxy (broadcast). |
geo | object | optional | Sumber lokasi — proxy atau kustom (broadcast). Memerlukan aplikasi 1.4.5+. |
deviceMock | object | optional | Spoofing model perangkat (broadcast). |
sim | object | optional | Spoofing SIM / operator (broadcast). |
simCountries | string[] | optional | Hasilkan kartu SIM dari 1–2 kode negara alih-alih menulis sim secara manual (kedua transport). Memerlukan aplikasi 1.5.9+ — lihat Generator SIM & perangkat. |
deviceTemplate | string | optional | Hasilkan deviceMock dari sebuah templat — random atau satu id dari device.templates (content call; broadcast untuk id custom:). Memerlukan aplikasi 1.5.9+. |
Request
content call — nilai biasa
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra name:s:"My Profile" broadcast — konfigurasi JSON
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e hookFlags '{"hook_wifi":false,"hook_nearby_bluetooth":false}' Response ok=true
Kedua cara mengembalikan profil yang telah diperbarui secara lengkap. Lihat Konfigurasi untuk setiap kolom JSON.
⚠️ hookFlags menggantikan seluruh set — flag yang Anda hilangkan akan kembali ke nilai defaultnya, yaitu ON untuk setiap flag kecuali hook_spoof_uptime yang defaultnya OFF. Jadi pembaruan yang tidak menyertakan hook_spoof_uptime diam-diam mematikannya kembali. Untuk mengubah beberapa flag dan mempertahankan yang lain, jalankan profile.get terlebih dahulu, edit peta lengkap, lalu kirim semuanya kembali.
DELETE profile.delete Hapus profil secara permanen content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.delete --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data={}, ok=true}] ⚠️ Menghapus profil juga menghapus cadangan data aplikasinya di /sdcard/HideMyAndroid_Backups/ — salin dulu keluar perangkat bila Anda masih membutuhkannya. Dan sejak 1.5.3, selama tugas pencadangan / pemulihan masih menahan slotnya, profile.delete menjawab BUSY — bahkan tugas yang sudah dibatalkan; ulangi sampai BUSY berhenti.
Aktivasi
Profil hanya melakukan spoofing setelah aktif, dan hanya satu profil yang pernah aktif. profile.setActive mengalihkan profil aktif — profil yang sebelumnya aktif akan dinonaktifkan untuk Anda, jadi tidak perlu memanggil profile.deactivate lebih dulu.
⚠️ Mengaktifkan akan menghapus data aplikasi target.
profile.setActivetidak sekadar memulai ulang aplikasi: ia menghentikan paksa setiap aplikasi target dan menghapus datanya, agar aplikasi itu hidup kembali dalam keadaan bersih dan benar-benar memakai identitas baru. Ini memang disengaja — tetapi artinya semua isi aplikasi tersebut hilang, termasuk sesi yang sudah masuk, Di dalam aplikasi, tindakan yang sama meminta konfirmasi terlebih dahulu dan mengarahkan Anda ke fitur Backup; panggilan headless tidak memunculkan dialog apa pun dan langsung dijalankan, jadi peringatan ini adalah satu-satunya yang Anda dapatkan. Secara headless, jaring pengamannya adalahbackup.start(1.5.3+) sebelum Anda berpindah. Dan sejak 1.5.3, selama tugas pencadangan / pemulihan masih menahan slotnya,profile.setActivedanprofile.deactivatemenjawabBUSY— bahkan untuk tugas yang sudah dibatalkan; ulangi sampaiBUSYberhenti.
ACTION profile.setActive Aktifkan profil — mulai spoofing content call / broadcast
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. Lewat broadcast, ia diterima baik sebagai id maupun profile_id. |
Request
content call — disarankan
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id> broadcast — untuk otomatisasi
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_SET_ACTIVE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> Response ok=true
Bundle[{data={"id":"a1b2...","isActive":true}, ok=true}] ACTION profile.deactivate Nonaktifkan profil aktif — hentikan spoofing content call / broadcast
Parameters
No parameters.
Request
content call — disarankan
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.deactivate --extra token:s:<your_access_token> broadcast — untuk otomatisasi
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_DEACTIVATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> Response ok=true
Bundle[{data={}, ok=true}] Tidak perlu id — ini akan menonaktifkan profil mana pun yang sedang aktif.
content call adalah bentuk yang sebaiknya dipilih: ia sinkron dan mencetak Bundle yang dikembalikan. Broadcast HEADLESS_SET_ACTIVE dan HEADLESS_DEACTIVATE melakukan tugas yang sama untuk perkakas otomatisasi seperti Tasker. Keduanya membalas sebagai ordered broadcast, yang selalu membawa data kembali: saat berhasil am broadcast mencetak result=0 dengan JSON hasil di data="…", dan saat gagal result=1 dengan data="{"error_code":…,"error_message":…}". Jadi keduanya tidak benar-benar sekali-kirim-lalu-lupakan — uraikan data= dan Anda memperoleh jawaban yang sama seperti dari content call. HEADLESS_SET_ACTIVE menerima id profil baik sebagai -e id maupun -e profile_id; HEADLESS_DEACTIVATE sama sekali tidak memerlukan id. Seperti biasa, sertakan -p com.wowsoftware.hidemyandroid.
Aplikasi target
Aplikasi target adalah aplikasi yang di-spoof oleh suatu profil.
READ profile.getApps Tampilkan aplikasi target dari suatu profil content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.getApps --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data=[{"packageName":"com.whatsapp"}], ok=true}] CREATE profile.addApp Tambahkan aplikasi target ke profil content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. |
packageName | string | required | Nama paket aplikasi. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp Response ok=true · updated app list
Bundle[{data=[{"packageName":"com.whatsapp"}], ok=true}] ⚠️ Menambahkan paket yang sama dua kali akan mengembalikan BAD_REQUEST.
DELETE profile.removeApp Hapus aplikasi target dari profil content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. |
packageName | string | required | Aplikasi yang akan dihapus. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.removeApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp Response ok=true · updated app list
Bundle[{data=[], ok=true}] ⚠️ Menghapus paket yang tidak ada di profil tetap berhasil dan tidak mengubah apa pun — itu bukan kesalahan. Ini sengaja berbeda dari addApp, yang mengembalikan BAD_REQUEST bila menambah duplikat.
Pencadangan & pemulihan
Baru di 1.5.3, grup ini menyalin data aplikasi sebuah profil ke dalam arsip di perangkat dan menuangkannya kembali nanti — tugas yang sama dengan Manage Backups di aplikasi, tanpa UI-nya. Keenam metodenya hanya lewat content call (tidak ada bentuk broadcast), dan kedua panggilan *.start bersifat asinkron: keduanya langsung menyerahkan jobId lalu terus bekerja di latar belakang — pantau backup.job untuk mengikutinya. Mencadangkan satu aplikasi saja bisa memakan waktu bermenit-menit.
⚠️ Satu tugas pada satu waktu.
*.startkedua saat satu tugas sedang berjalan mengembalikanBUSY, denganjobIdyang sedang berjalan dierror_message. Kedua panggilan*.startjuga mengharuskan profil yang dituju berstatus aktif — bila tidak,REQUIRES_ACTIVE_PROFILE, dan tidak ada flag untuk melewatinya. Empat metode lainnya bekerja pada profil mana pun. Dan seperti di seluruh headless API, tidak ada yang meminta konfirmasi — setiap panggilan langsung dijalankan.
ACTION backup.start Mulai tugas pencadangan untuk profil aktif content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil — harus profil yang sedang aktif. |
packages | string | optional | Nama-nama paket yang akan dicadangkan, dipisahkan koma (tanpa spasi). Lewatkan untuk mencadangkan semua aplikasi target profil. Setiap paket harus milik profil tersebut. |
Request
content call — semua aplikasi target
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.start --extra token:s:<your_access_token> --extra id:s:<profile_id> content call — hanya paket terpilih
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.start --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packages:s:com.twitter.android,com.facebook.katana Response ok=true · job accepted
Bundle[{data={"jobId":"f0e1d2c3-...","type":"backup","total":2,"packages":["com.twitter.android","com.facebook.katana"],"foregroundHeld":true}, ok=true}] Panggilan kembali begitu tugas diterima — ia tidak menunggu penyalinan selesai. total adalah jumlah aplikasi yang akan diproses tugas ini; pantau backup.job untuk mengikutinya. Untuk apa yang dijanjikan (dan tidak dijanjikan) foregroundHeld, lihat catatan di bawah.
⚠️ Pencadangan tidak pernah menghentikan paksa atau menghapus data aplikasi. Untuk membaca potret yang konsisten, ia menjeda aplikasi sebentar (SIGSTOP) selama mengarsipkan tiap komponen, lalu melanjutkannya kembali (SIGCONT) — aplikasi tetap berjalan dan tidak kehilangan apa pun. Mencadangkan paket yang sudah punya cadangan akan menggantikan arsip lamanya: satu cadangan per aplikasi per profil, tanpa riwayat.
ACTION restore.start Pulihkan data aplikasi yang dicadangkan ke profil aktif content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil — harus profil yang sedang aktif. Cadangan hanya dipulihkan ke profil yang membuatnya. |
packages | string | optional | Nama-nama paket yang akan dipulihkan, dipisahkan koma (tanpa spasi). Lewatkan untuk memulihkan semua aplikasi yang punya cadangan di profil ini — aplikasi tanpa cadangan dilewati tanpa suara. Sebutkan paket secara eksplisit dan perilakunya gagal-cepat: satu cadangan saja yang hilang menggagalkan seluruh panggilan dengan NO_BACKUP dan tidak ada yang dipulihkan. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method restore.start --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true · job accepted
Bundle[{data={"jobId":"09a8b7c6-...","type":"restore","total":1,"packages":["com.twitter.android"],"foregroundHeld":true}, ok=true}] Model tugasnya sama dengan backup.start — responsnya langsung dan kolom type berbunyi "restore". Pantau backup.job untuk mengikutinya; tidak ada restore.job terpisah.
⚠️ Pemulihan menghentikan paksa aplikasi target (am force-stop) dan tidak memulai ulangnya, lalu mengekstrak arsip di atas /data/data/<pkg> tanpa mengosongkan direktorinya lebih dulu — file yang dibuat aplikasi setelah pencadangan tetap selamat. Dan cadangan dikunci ke paket + profil — itulah sebabnya pemulihan lintas profil tidak ada: Anda tidak bisa menuangkan cadangan satu profil ke profil lain.
READ backup.job Pantau kemajuan dan hasil sebuah tugas content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
jobId | string | optional | Tugas yang akan diperiksa. Lewatkan untuk membaca tugas terbaru. |
Request
content call — tugas tertentu
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.job --extra token:s:<your_access_token> --extra jobId:s:<job_id> content call — tugas terbaru (tanpa jobId)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.job --extra token:s:<your_access_token> Response ok=true
# while it runs
Bundle[{data={"jobId":"f0e1d2c3-...","type":"backup","profileId":"a1b2...","state":"RUNNING","total":2,"done":0,"ok":0,"failed":0,"currentPackage":"com.twitter.android","currentComponent":"Internal Data","progress":0.31,"results":[],"error":null,"foregroundHeld":true,"startedAt":1712345678901,"finishedAt":null}, ok=true}]
# when it finishes — note: DONE even though one app failed
Bundle[{data={"jobId":"f0e1d2c3-...","type":"backup","profileId":"a1b2...","state":"DONE","total":2,"done":2,"ok":1,"failed":1,"currentPackage":null,"currentComponent":null,"progress":1.0,"results":[{"packageName":"com.twitter.android","ok":true,"error":null},{"packageName":"com.facebook.katana","ok":false,"error":"tar exited 2"}],"error":null,"foregroundHeld":true,"startedAt":1712345678901,"finishedAt":1712345699999}, ok=true}] Satu metode melayani kedua jenis tugas — type berbunyi "backup" atau "restore". state bernilai RUNNING, DONE, FAILED, atau CANCELLED; progress berjalan 0..1 untuk keseluruhan tugas; startedAt / finishedAt dalam milidetik epoch dan finishedAt tetap null selama tugas berjalan. DONE berarti tugas berjalan sampai akhir — bukan berarti setiap aplikasi berhasil — jadi selalu baca failed dan results[] (satu {packageName, ok, error} per aplikasi). currentComponent adalah nama tahap yang mudah dibaca ("Internal Data", "Device Encrypted Data", "External Data", "Media", "OBB", "Permissions", "SSAID") — sengaja tidak sama dengan string components[] di backup.list. Bekerja pada profil mana pun. Hanya lima tugas terbaru yang disimpan — jobId yang tidak dikenal atau lebih lama mengembalikan NOT_FOUND, begitu pula memantau sebelum satu pun tugas pernah berjalan.
ACTION backup.cancel Batalkan tugas yang sedang berjalan content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
jobId | string | optional | Tugas yang akan dibatalkan. Lewatkan untuk membatalkan tugas terbaru. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.cancel --extra token:s:<your_access_token> --extra jobId:s:<job_id> Response ok=true · job snapshot
Mengembalikan potret keadaan tugas setelah pembatalan — bentuknya sama dengan yang dikembalikan backup.job.
⚠️ Membatalkan di tengah pemrosesan sebuah aplikasi meninggalkan arsip aplikasi itu setengah jadi: aplikasinya tidak masuk ke daftar cadangan dan file sisanya berada dalam keadaan tak menentu. Jangan memulihkan darinya — backup.delete paketnya lalu cadangkan lagi. Dan potretnya langsung berubah menjadi CANCELLED (dengan finishedAt terisi), tetapi tar root di baliknya tidak dapat diputus di tengah file dan terus berjalan — jadi tugas masih bisa menahan slotnya setelah CANCELLED sudah tampil (lihat catatan di bawah).
READ backup.list Tampilkan cadangan tersimpan milik sebuah profil content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil — profil mana pun, tidak harus yang aktif. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.list --extra token:s:<your_access_token> --extra id:s:<profile_id> Response ok=true
Bundle[{data=[{"packageName":"com.twitter.android","appName":"X","timestamp":1712345678901,"totalSize":12345678,"components":["INTERNAL_DATA","EXTERNAL_DATA","OBB"]}], ok=true}] Satu entri per aplikasi yang dicadangkan. appName adalah nama tampilan yang direkam saat pencadangan (dibaca dari metadata.json arsipnya, bukan diturunkan dari paketnya). timestamp dalam milidetik epoch, totalSize dalam byte, dan components[] memakai nama enum: INTERNAL_DATA, DEVICE_ENCRYPTED, EXTERNAL_DATA, MEDIA, OBB, PERMISSIONS, SSAID.
DELETE backup.delete Hapus cadangan satu aplikasi dari sebuah profil content call
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. |
packageName | string | required | Aplikasi yang cadangannya akan dihapus. |
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.delete --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.twitter.android Response ok=true
Bundle[{data={}, ok=true}] Sinkron — tidak ada tugas yang dibuat; folder cadangan langsung dihapus di tempat. Menghapus cadangan yang memang tidak ada bukanlah kesalahan: panggilannya idempoten dan tetap mengembalikan ok=true dengan data={}. NOT_FOUND hanya berarti id profilnya tidak ada; packageName yang cacat mengembalikan BAD_REQUEST.
Bagaimana tugas berperilaku
DONEtidak berarti setiap aplikasi berhasil. Ia hanya berarti tugas berjalan sampai akhir. Sebuah aplikasi bisa gagal sementara tugasnya tetap selesaiDONE— selalu bacafaileddanresults[].- Aktivasi kini menunggu tugas. Selama sebuah tugas menahan slotnya,
profile.setActive,profile.deactivate, danprofile.deletemenjawabBUSY— bahkan untuk tugas yang sudah Anda batalkan, karenatarroot di baliknya tidak dapat dihentikan di tengah file, dan tidak ada kolom potret yang melaporkan slot itu. Tugas yang berakhir wajar diDONEatauFAILEDmembebaskan slotnya hampir seketika; setelah pembatalan, jangan anggapCANCELLEDsebagai “slot bebas” — cukup ulangi panggilannya sampaiBUSYberhenti. foregroundHeldadalah pengamatan, bukan janji. Ia melaporkan apakah sebuah foreground service sedang melindungi tugas agar tidak dimatikan oleh OS. Nilainya terukurtruepada API 36, tetapi bahkantruehanya berarti permintaan memulai service diterima — langkah promosi berikutnya masih bisa gagal diam-diam di sebagian perangkat. Untuk tugas yang panjang, jaga perangkat tetap terjaga alih-alih bergantung padanya.- Tempat cadangan disimpan.
/sdcard/HideMyAndroid_Backups/<packageName>-<profileId>/— satu folder per aplikasi per profil, berisi arsip.tar.gz(data.tar.gz,data_ext.tar.gz,media.tar.gz, …) ditambahmetadata.json, ditulis dengantarroot. Kunci{package}-{profileId}itulah yang membuat pemulihan hanya bisa ke profil yang sama. Cadangan yang dibuat secara headless juga muncul di layar Manage Backups aplikasi.
SIM & perangkat dari basis data bawaan
Baru di 1.5.9. Konfigurasi di bawah menunjukkan cara menulis blok sim atau deviceMock secara manual, kolom demi kolom. Grup ini memungkinkan Anda melewatinya: dua kunci profile.update tambahan — simCountries dan deviceTemplate — membuat aplikasi menghasilkan seluruh blok dari basis data operator dan perangkat yang sama dengan yang dipakai UI-nya sendiri, dan dua metode baca menampilkan daftar apa saja yang bisa dihasilkannya. Hasilnya disimpan ke dalam profil dengan enabled:true yang sudah ditetapkan, jadi tidak ada lagi yang perlu dikirim — baca kembali dengan profile.get.
⚠️ Satu cara per pengaturan, per panggilan.
simdansimCountriesdalam permintaan yang sama adalahBAD_REQUEST, begitu puladeviceMockbersamadeviceTemplate. Mencampur antar pengaturan tidak masalah —simCountriesberdampingan dengandeviceMockyang ditulis manual, atau kedua generator sekaligus, seperti pada contoh pertama di bawah. Panggilannya atomik: semuanya divalidasi sebelum ada yang disimpan, jadi id templat yang salah menggagalkan seluruh permintaan dansimCountriesyang dikirim bersamanya pun tidak diterapkan.
READ sim.countries Tampilkan negara-negara yang dikenal generator SIM content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method sim.countries --extra token:s:<your_access_token> Response ok=true
Bundle[{data=[{"code":"AF","country":"Afghanistan"},{"code":"AL","country":"Albania"},...,{"code":"GB","country":"United Kingdom"},...,{"code":"US","country":"United States"},...], ok=true}] Hanya negara dengan setidaknya satu operator di basis data yang ditampilkan, diurutkan berdasarkan nama. code adalah nilai ISO 3166-1 alpha-2 huruf kapital yang diharapkan simCountries; country adalah nama bahasa Inggris sebagaimana tersimpan ("United Kingdom", "United States").
READ device.templates Tampilkan templat perangkat — bawaan dan hasil impor content call
Parameters
No parameters.
Request
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method device.templates --extra token:s:<your_access_token> Response ok=true
Bundle[{data=[{"id":"asus|ASUS_AI2401|AI2401_A","manufacturer":"asus","label":"ROG Phone 8","isCustom":false},...,{"id":"custom:samsung|e3qxeea|SM-S928B","manufacturer":"samsung","label":"Galaxy S24 Ultra","isCustom":true}], ok=true}] Satu entri per templat. id adalah nilai yang diterima deviceTemplate — brand|product|model, dengan awalan custom: untuk templat yang Anda impor di aplikasi (isCustom true); label adalah nama pemasarannya (ROG Phone 8); manufacturer dipertahankan persis seperti ejaan OEM (asus, samsung, OnePlus), tidak dinormalkan. Lihat catatan transport di bawah untuk id custom:.
UPDATE profile.update Hasilkan kartu SIM dan/atau perangkat dari basis data content call / broadcast
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | required | ID profil. |
simCountries | string[] | optional | Larik JSON berisi 1–2 kode ISO alpha-2, mis. ["US","GB"] — satu per slot SIM, berurutan. content call atau broadcast. |
deviceTemplate | string | optional | random (atau string kosong) untuk templat acak, bawaan maupun hasil impor; atau satu id dari device.templates. Id bawaan: content call atau broadcast. Id custom: hanya lewat broadcast. |
Request
broadcast — kedua generator dalam satu panggilan (sebagaimana diuji)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e simCountries '["US","GB"]' -e deviceTemplate random content call — hanya simCountries, hanya slot 0 (tanda kutip tunggal wajib)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'simCountries:s:["US"]' content call — templat acak
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra deviceTemplate:s:random content call — satu templat bawaan tertentu (tanda kutip tunggal wajib: | adalah pipe shell)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'deviceTemplate:s:asus|ASUS_AI2401|AI2401_A' broadcast — templat hasil impor (custom:)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceTemplate 'custom:samsung|e3qxeea|SM-S928B' Response ok=true · full updated profile
Mengembalikan profil yang telah diperbarui secara lengkap, seperti profile.update mana pun — sim.simCards dan deviceMock yang dihasilkan langsung ada di dalam responsnya.
⚠️ Setiap panggilan mengundi nilai baru: mengulang simCountries yang sama memberikan nomor-nomor baru, dan deviceTemplate random bisa jatuh pada perangkat yang berbeda setiap kali. Kirim hanya kunci yang ingin Anda hasilkan ulang.
simCountries
- Format. Larik JSON berisi kode ISO 3166-1 alpha-2 —
["US","GB"], tidak membedakan huruf besar/kecil. Posisi menentukan slot: kode pertama mengisi slot0, kode kedua slot1. Apa pun yang bukan larik JSON, larik kosong, entri kosong, lebih dari dua entri, atau kode yang tidak tercantum disim.countriesmengembalikanBAD_REQUEST— kode ketiga ditolak, tidak pernah dibuang diam-diam seperti kartusimketiga. - Yang Anda dapatkan. Untuk setiap slot, aplikasi memilih satu operator dari negara tersebut dari basis datanya dan mengisi setiap kolom blok
simyang biasa ditulis manual:carrierName,countryIso,mcc,mnc,operatorCode,phoneNumberseluler E.164 yang valid dengan kode telepon negaranya (+1…untuk US),icciddanimsiyang berawalan MCC+MNC operator itu, sertanetworkTypeyang diundi acak dariLTE,NR 5G,WCDMA, danGSM. Lalu ia menetapkansim.enabledketruedan menyimpannya. - Ia menggantikan seluruh blok SIM. Seperti halnya
sim, hasilnya dinormalkan menjadi dua kartu:["US"]mengisi slot0dan membiarkan slot1kosong, apa pun isinya sebelumnya.
deviceTemplate
random(atau string kosong) — aplikasi mengundi satu templat dari semua yang dikenalnya, bawaan maupun hasil impor. Perhatikan perbedaan antara kosong dan tidak ada:-e deviceTemplate ""berarti acak, sedangkan tidak menyertakan kuncinya sama sekali membiarkan perangkat tidak tersentuh.- Id templat dari
device.templates— perangkat itu, setiap kali. Id bawaan berbentukbrand|product|model, mis.asus|ASUS_AI2401|AI2401_A; templat yang Anda impor di aplikasi memakai bentuk yang sama dengan awalancustom:, mis.custom:samsung|e3qxeea|SM-S928B. Id yang tidak ada dalam daftar mengembalikanBAD_REQUEST. - Yang Anda dapatkan. Setiap kolom
deviceMockterisi dari templat,deviceMock.enabledditetapkan ketrue, dan profil disimpan.
Transport yang mana
Aturan titik dua yang biasa tetap berlaku. sim.countries, device.templates, simCountries, dan id templat bawaan tidak mengandung :, sehingga content call dapat membawanya. Apit nilainya dengan tanda kutip tunggal setiap kali mengandung |, [, ], atau " — yaitu setiap larik simCountries dan setiap id templat. Tanpa tanda kutip, shell perangkat membaca | sebagai pipe dan gagal bahkan sebelum content dijalankan (sh: e3qxeea: not found, exit 127). Id kustom diawali custom:, dan titik dua tambahan itu merusak bentuk key:type:value dari --extra: alat content sendiri menolaknya dengan [ERROR] Binding not well formed dan permintaan tidak pernah sampai ke aplikasi — tidak ada BAD_REQUEST yang bisa ditangkap. Kirim id kustom lewat broadcast HEADLESS_UPDATE; tidak ada hal lain yang berubah pada panggilannya.
Konfigurasi
Ini adalah nilai yang Anda kirim dengan profile.update. Default saat profil dibuat:
| Pengaturan | Default | Untuk menggunakannya… |
|---|---|---|
| hookFlags (all 23) | ✅ ON — kecuali hook_spoof_uptime ❌ OFF | Sudah aktif. Kirim false hanya untuk yang ingin dinonaktifkan — dan true untuk hook_spoof_uptime, satu-satunya flag yang awalnya mati. |
| proxy | ❌ OFF | Sertakan "enabled":true |
| geo | PROXY | Kirim "source":"CUSTOM" beserta koordinat, countryCode, dan timezone untuk menetapkan lokasi tanpa proxy |
| deviceMock | ❌ OFF | Sertakan "enabled":true — atau kirim deviceTemplate sebagai gantinya dan biarkan aplikasi mengisinya (1.5.9+) |
| sim | ❌ OFF | Sertakan "enabled":true — atau kirim simCountries sebagai gantinya dan biarkan aplikasi mengisinya (1.5.9+) |
| gmails | empty | Kirim alamat-alamatnya (akun virtual aktif secara default) |
⚠️ Konfigurasi dengan
enabled:falsedisimpan tetapi tidak aktif — nilai disimpan agar Anda dapat mengaktifkannya nanti, tetapi tidak ada spoofing hinggaenabled:true.geoadalah pengecualian: ia tidak punya sakelarenabled. Flaghook_geo_*berlaku setiap kaligeomenghasilkan lokasi yang dapat dipakai — baik darisource: CUSTOM, maupun dari proxy yangenabled:truedan lulus uji langsungnya.
hookFlags
Default: ON untuk setiap flag kecuali hook_spoof_uptime, yang OFF. Peta berisi "flag": true|false. Pembaruan menggantikan seluruh peta, tetapi hanya peta yang benar-benar Anda kirim: pembaruan yang sama sekali tidak menyertakan extra hookFlags membiarkan semua flag apa adanya. Di dalam peta yang Anda kirim, setiap flag yang Anda hilangkan kembali ke nilai defaultnya masing-masing, sehingga 22 flag lainnya kembali ON sementara hook_spoof_uptime kembali OFF meski sebelumnya Anda aktifkan. Untuk mengubah beberapa flag dan mempertahankan yang lain, jalankan profile.get terlebih dahulu, edit peta lengkap, lalu kirim semuanya kembali.
| Flag | Fungsinya |
|---|---|
hook_hide_dev_opts | Sembunyikan Opsi Developer |
hook_hide_vpn | Sembunyikan VPN |
hook_hide_airplane_mode | Sembunyikan mode pesawat |
hook_hide_proxy | Sembunyikan pengaturan proxy sistem |
hook_hide_root | Sembunyikan root |
hook_hide_lsposed | Sembunyikan LSPosed |
hook_spoof_installer | Palsukan sumber instalasi |
hook_package_info | Palsukan info paket / tanda tangan |
hook_lan_scan_block | Blokir pemindaian LAN |
hook_identifiers_partly | Palsukan penanda identitas perangkat dasar |
hook_identifiers_fully | Palsukan seluruh rangkaian penanda identitas perangkat — mencakup semua yang ditangani hook_identifiers_partly |
hook_wifi | Palsukan detail jaringan Wi-Fi yang sedang terhubung |
hook_nearby_wifi | Palsukan hasil pemindaian Wi-Fi terdekat |
hook_nearby_bluetooth | Palsukan perangkat Bluetooth terdekat |
hook_realistic_sensor | Gunakan data sensor yang realistis |
hook_sensor_accelerometer | Palsukan akselerometer (memerlukan hook_realistic_sensor) |
hook_sensor_gyroscope | Palsukan giroskop (memerlukan hook_realistic_sensor). Memerlukan aplikasi 1.6.3+. |
hook_sensor_light | Palsukan sensor cahaya sekitar (memerlukan hook_realistic_sensor). Memerlukan aplikasi 1.6.4+. Preset lingkungan cahaya (Indoor, On the move, Outdoors, Night / dark) hanya bisa dipilih di aplikasi; profil yang dibuat lewat Headless API mulai dengan Indoor, dan pembaruan lewat Headless API tidak mengubah pilihan yang sudah ada. |
hook_spoof_uptime | Palsukan uptime perangkat — membuat perangkat tampak sudah berjalan lebih lama. Premium, eksperimental. Mati secara default — satu-satunya flag yang begitu. Memerlukan aplikasi 1.3.4+. |
hook_virtual_accounts | Aktifkan akun Google virtual (gmails memerlukan ini ON) |
hook_geo_gps | Palsukan lokasi GPS (memerlukan geo — dari proxy atau kustom) |
hook_geo_locale | Palsukan bahasa/wilayah (memerlukan geo — dari proxy atau kustom) |
hook_geo_timezone | Palsukan zona waktu (memerlukan geo — dari proxy atau kustom) |
proxy
Default: OFF. Dengan enabled:true, aplikasi terhubung melaluinya secara nyata, membaca lokasinya, dan mengisi countryCode/lat/lon/timezone. Uji langsung memakan waktu hingga ~8 detik; proxy yang gagal mengembalikan PROXY_INVALID dan tidak disimpan. Keempat kolom itu adalah keluaran — aplikasi yang menulisnya, jadi apa pun yang Anda kirim di sana akan ditimpa. Untuk menetapkan lokasi secara manual, gunakan geo dengan source: CUSTOM; cara itu tidak memerlukan proxy sama sekali. profile.get mengembalikan proxy beserta keempat kolom tersebut, tetapi tidak pernah menampilkan username atau password.
| Kolom | Tipe | Default | Arti / batasan |
|---|---|---|---|
host | string | "" | IP / hostname proxy |
port | int | 0 | Port — 1–65535, diperiksa hanya saat Anda mengaktifkan proxy |
protocol | string | HTTP | HTTP, SOCKS4, atau SOCKS5 |
username | string | "" | Autentikasi (opsional) — tidak pernah dikembalikan oleh profile.get |
password | string | "" | Autentikasi (opsional) — tidak pernah dikembalikan oleh profile.get |
countryCode | string | "" | Keluaran — kode negara 2 huruf, diisi dari uji langsung |
lat | double | 0 | Keluaran — diisi dari uji langsung |
lon | double | 0 | Keluaran — diisi dari uji langsung |
timezone | string | "" | Keluaran — nama IANA, diisi dari uji langsung |
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}' geo
Default: {"source":"PROXY"}. Memerlukan aplikasi 1.4.5+. Di sinilah lokasi sebuah profil berasal, dan ada dua sumber — pilih salah satu lewat source. PROXY memakai lokasi yang dibaca saat uji langsung proxy. CUSTOM membiarkan Anda menetapkan sendiri koordinat, zona waktu, dan wilayah, tanpa proxy sama sekali — jadi Anda bisa menempatkan profil di Tokyo sementara trafik dialirkan ke mana pun, atau tidak ke mana-mana. Ketiga flag hook_geo_* lalu mengaktifkan tiap bagian secara terpisah: GPS, wilayah + bahasa, dan zona waktu.
⚠️ Perhatikan nama kolomnya: geo menulisnya latitude/longitude, sedangkan proxy di atas memakai singkatan lat/lon. Keduanya objek yang berbeda, bukan alias — nama singkat di dalam payload geo hanya akan diabaikan.
| Kolom | Tipe | Default | Arti / batasan |
|---|---|---|---|
source | string | PROXY | Wajib. Persis PROXY atau CUSTOM — nilai yang hilang atau salah ketik mengembalikan BAD_REQUEST, tidak pernah diam-diam dianggap PROXY |
latitude | double | 0 | Wajib untuk CUSTOM — harus antara -90 dan 90; 0/0 dianggap belum diisi |
longitude | double | 0 | Wajib untuk CUSTOM — harus antara -180 dan 180; 0/0 dianggap belum diisi |
countryCode | string | "" | Wajib untuk CUSTOM — 2 huruf, mis. JP. Tidak peka huruf besar/kecil saat dikirim, selalu dikembalikan dalam huruf kapital |
timezone | string | "" | Wajib untuk CUSTOM — nama IANA, mis. Asia/Tokyo. Hanya diperiksa tidak kosong — lihat peringatan di bawah |
language | string | "" | Opsional — ISO 639-1 dua huruf seperti ja, bukan tag lengkap seperti ja-JP. Diturunkan dari countryCode bila dikosongkan, dan selalu disimpan dalam huruf kecil. Hanya CUSTOM yang dapat menetapkannya secara eksplisit; pada jalur PROXY nilainya selalu diturunkan |
⚠️
source: CUSTOMharus lengkap: sepasang koordinat yang bukan0/0dan berada dalam rentang,countryCodedua huruf, sertatimezone. Kurang satu saja, panggilan mengembalikanBAD_REQUEST— ia tidak jatuh kembali ke proxy. Aplikasi tidak pernah melakukan geocoding dan tidak pernah daring untuk mengisikannya bagi Anda. Jika tidak ada satu pun sumber yang dapat dipakai, tidak ada hook geo yang dimuat sama sekali dan lokasi asli akan terlihat.
🛑
timezoneadalah satu-satunya kolom yang sebenarnya tidak diperiksa. Ia hanya diuji agar tidak kosong — tidak pernah dicocokkan dengan basis data IANA. Salah ketik sepertiAsia/Tokyooakan diterima, mengembalikanok=true, dikembalikan apa adanya olehprofile.get, lalu diam-diam berubah menjadi GMT di perangkat. Tidak ada satu pun titik yang melaporkan kesalahan, jadi salin namanya persis. Koordinat justru sebaliknya — nilainya benar-benar diperiksa rentangnya dan yang keliru gagal dengan jelas lewatBAD_REQUEST.
CUSTOM — tetapkan lokasi secara manual, tanpa perlu proxy
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}' PROXY — ambil lokasi dari proxy (default)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"PROXY"}' deviceMock
Default: OFF. Berpura-pura perangkat adalah model yang berbeda. Atur "enabled":true beserta salah satu kolom berikut — semua string opsional (default kosong), masing-masing memetakan ke properti Build Android. Pada 1.5.9+ Anda dapat melewati blok ini sepenuhnya dan mengirim deviceTemplate sebagai gantinya — random mengundi satu perangkat dari basis data aplikasi sendiri, sedangkan id dari device.templates memilih perangkat tertentu — dan aplikasi mengisi setiap kolom serta mengaktifkannya untuk Anda.
| Kolom | Dipetakan ke | Contoh |
|---|---|---|
manufacturer | Build.MANUFACTURER | Samsung |
brand | Build.BRAND | samsung |
model | Build.MODEL | SM-S918B |
device | Build.DEVICE (nama kode) | dm3q |
product | Build.PRODUCT | dm3qxxx |
board | Build.BOARD | kalama |
hardware | Build.HARDWARE | qcom |
buildId | Build.ID | UP1A.231005.007 |
buildIncremental | Build.VERSION.INCREMENTAL | S918BXXU3CWK9 |
buildType | Build.TYPE | user |
buildTags | Build.TAGS | release-keys |
buildFingerprint | Build.FINGERPRINT | samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys |
deviceName | Nama perangkat yang ditampilkan | Galaxy S23 Ultra |
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}' Atau, pada 1.5.9+, biarkan aplikasi mengundi perangkat acak dari basis datanya — tanpa JSON sama sekali (random mengambil dari templat bawaan maupun hasil impor; ganti dengan id dari device.templates untuk memilih satu perangkat tertentu):
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra deviceTemplate:s:random sim
Default: OFF. Memalsukan SIM/operator. Atur "enabled":true dan sediakan hingga dua kartu di simCards. Daftarnya selalu dinormalkan menjadi tepat dua: kartu ketiga dibuang diam-diam — panggilan tetap mengembalikan ok=true — dan satu kartu akan dilengkapi kartu kedua yang kosong, itulah sebabnya profile.get selalu mengembalikan dua. Pada 1.5.9+ Anda dapat melewati blok ini sepenuhnya dan mengirim simCountries sebagai gantinya — aplikasi menghasilkan data operator sungguhan untuk setiap slot dan mengaktifkannya untuk Anda. Setiap kartu:
| Kolom | Tipe | Default | Arti / batasan |
|---|---|---|---|
slotIndex | int | 0 | Slot SIM — ditetapkan dari posisi kartu dalam larik (0, lalu 1); nilai yang Anda kirim diabaikan |
carrierName | string | "" | Nama operator (mis. AT&T) |
countryIso | string | "" | Kode negara ISO (mis. us) — disimpan huruf kecil. Perhatikan ini berlawanan dengan geo.countryCode, yang disimpan huruf kapital |
mcc | string | "" | Kode Negara Seluler / Mobile Country Code (mis. 310) |
mnc | string | "" | Kode Jaringan Seluler / Mobile Network Code (mis. 410) |
operatorCode | string | "" | Kode operator = mcc + mnc (mis. 310410) |
phoneNumber | string | "" | Nomor telepon |
iccid | string | "" | Nomor seri SIM (ICCID) |
imsi | string | "" | IMSI |
networkType | string | "" | Tipe jaringan — lihat nilai yang diterima di bawah; nilai yang tidak dikenali diabaikan tanpa suara |
networkType dipangkas spasinya lalu dicocokkan tanpa membedakan huruf besar/kecil, dan tiap generasi jaringan menerima lebih dari satu penulisan:
| Nilai | Juga diterima | Tingkatan jaringan |
|---|---|---|
NR 5G | NR, 5G | 5G |
LTE | 4G | 4G |
WCDMA | UMTS, 3G | 3G |
GSM | 2G | 2G |
⚠️ Apa pun di luar tabel ini akan menonaktifkan spoof tipe jaringan untuk kartu tersebut secara diam-diam — tanpa kesalahan, tanpa
BAD_REQUEST: nilainya sekadar disimpan dan tidak pernah dipakai. Perhatikan bahwaNR 5Gmemakai spasi:NR5Gtidak dikenali dan jatuh tepat ke lubang senyap itu.
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G"}]}' Atau, pada 1.5.9+, biarkan aplikasi membuat kedua kartu dari kode negara — tanpa JSON sama sekali (slot 0 mendapat kode pertama, slot 1 kode kedua; satu kode hanya mengisi slot 0):
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'simCountries:s:["US","GB"]' gmails
Default: kosong. Daftar akun Google virtual — hanya alamat @gmail.com yang diterima. Daftar baru menggantikan yang sebelumnya; [] menghapusnya. Tidak ada : di dalamnya, sehingga content call dapat digunakan:
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'gmails:s:["[email protected]","[email protected]"]' Contoh lengkap
Sebuah profil dari nol sampai aktif, selangkah demi selangkah. Langkah 5, 6, dan 7 masing-masing menawarkan beberapa cara menuju hasil yang sama — pilih satu per langkah; tab-nya berpindah di antara cara-cara itu. Setiap perintah ditampilkan dalam bentuk adb shell. Di bagian akhir, dua resep memadatkan seluruh urutan menjadi satu blok salin-dan-jalankan, dan Pemecahan masalah menyajikan hal yang sama sebagai skrip di perangkat.
Sekilas
- 01 Periksa apakah API siap
- 02 Buat profil
- 03 Tambahkan aplikasi target
- 04 Tambahkan akun Gmail virtual
- 05 Pilih identitas perangkat
- 06 Pilih kartu SIM
- 07 Jaringan dan lokasi
- 08 Atur flag hook
- 09 Cadangkan profil yang akan ditinggalkan
- 10 Aktifkan
- 11 Verifikasi
- 12 Nanti: klon, hentikan, hapus
Placeholder yang dipakai di bawah
<your_access_token>— kunci dari Pengaturan → Developer → Headless API<profile_id>— id yang dikembalikan langkah 2<active_profile_id>/<job_id>— hanya langkah 9, daristatusdanbackup.start
Satu pembacaan sebelum apa pun. Ia memberi tahu apakah Premium, sakelar fitur, dan kesegaran lisensi semuanya beres — tiga hal yang menjadi syarat setiap panggilan lain.
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token>
# expect "premium":true, "featureEnabled":true, "freshnessOk":true
# anything else: fix that first — see Status and Error codes above Semua yang lain bergantung pada id yang dikembalikan di sini. Profil baru dimulai dengan setiap flag hook ON (kecuali hook_spoof_uptime), tanpa aplikasi target, dan proxy, deviceMock, serta sim semuanya OFF.
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo
# → Bundle[{data={"id":"a1b2c3d4-..."}, ok=true}]
# copy that id — it is <profile_id> in every command below Hanya aplikasi dalam daftar ini yang di-spoof. Tambahkan satu per satu berdasarkan nama paket; yang tidak terdaftar tetap melihat perangkat asli.
# one call per app — the package name, not the display name
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.instagram.android
# check the list (adding the same package twice returns BAD_REQUEST)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.getApps --extra token:s:<your_access_token> --extra id:s:<profile_id> Alamat yang akan dilihat aplikasi target sebagai akun Google yang sudah masuk. Memerlukan hook_virtual_accounts, yang ON secara default. Lewati langkah ini dan aplikasi tidak melihat akun Google sama sekali.
# @gmail.com only; the list replaces the previous one, [] clears it
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'gmails:s:["[email protected]","[email protected]"]' Tiga cara menuju hasil yang sama — blok deviceMock dengan enabled:true. Biarkan aplikasi mengundi perangkat, sebutkan sebuah templat, atau tulis sendiri setiap kolomnya.
# 1.5.9+ — one call, no JSON: the app rolls a device from its database
# (built-in and imported templates alike) and switches deviceMock on for you
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra deviceTemplate:s:random # 1.5.9+ — first see what is available; "id" is what you send back
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method device.templates --extra token:s:<your_access_token>
# → [{"id":"asus|ASUS_AI2401|AI2401_A","manufacturer":"asus","label":"ROG Phone 8","isCustom":false}, ...]
# built-in id → content call works — single quotes are REQUIRED, | is a shell pipe
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'deviceTemplate:s:asus|ASUS_AI2401|AI2401_A'
# imported (custom:) id → broadcast ONLY; the extra colon breaks content call
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceTemplate 'custom:samsung|e3qxeea|SM-S928B' # any version — write every Build field yourself; "enabled":true is the switch
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}' A dan B memerlukan aplikasi 1.5.9+ dan tidak pernah boleh berada dalam panggilan yang sama dengan C. Menjalankannya satu demi satu tidak masalah — panggilan terakhir yang menang, dan A / B mengundi nilai baru setiap kali dijalankan.
Gagasan yang sama untuk sim: hasilkan kartunya dari kode negara, atau tulis sendiri kedua kartunya. Apa pun caranya, profil berakhir dengan tepat dua slot.
# 1.5.9+ — see which countries the generator knows ("code" is what you send)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method sim.countries --extra token:s:<your_access_token>
# → [{"code":"AF","country":"Afghanistan"}, ..., {"code":"GB","country":"United Kingdom"}, ..., {"code":"US","country":"United States"}, ...]
# two cards: slot 0 = US, slot 1 = GB — carrier, number, ICCID, IMSI all generated
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'simCountries:s:["US","GB"]'
# or a single card — slot 1 is left empty
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'simCountries:s:["US"]' # any version — two cards, every field yourself; a third card is dropped silently
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE","phoneNumber":"+12025550123","iccid":"8901410123456789012","imsi":"310410123456789"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G","phoneNumber":"+12025550456","iccid":"8901260987654321098","imsi":"310260987654321"}]}' # 1.5.9+ — device (step 5) and SIM (step 6) in ONE broadcast: validated together, saved together
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e simCountries '["US","GB"]' -e deviceTemplate random A dan C memerlukan aplikasi 1.5.9+. sim dan simCountries dalam satu panggilan adalah BAD_REQUEST. C bersifat atomik — id templat yang salah menggagalkan seluruh panggilan dan SIM-nya pun tidak diterapkan.
Ke mana lalu lintas pergi dan di mana perangkat mengaku berada adalah dua pengaturan terpisah. proxy mengarahkan lalu lintas dan, secara default, juga memasok lokasi; geo dengan source: CUSTOM menetapkan lokasi secara manual dan sama sekali tidak memerlukan proxy. Lewati langkah ini dan profil tetap memakai IP asli dan lokasi asli.
# the proxy is tested live (device needs internet, up to ~8s);
# one that fails returns PROXY_INVALID and is not saved
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}'
# with auth: add "username":"…","password":"…" — never echoed back by profile.get
# location follows the proxy by default; this line only matters if geo was CUSTOM before
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"PROXY"}' # no proxy at all — the location is yours; coordinates, countryCode and timezone are all required
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}'
# timezone is NOT validated: a typo silently becomes GMT — copy the IANA name exactly # traffic through the proxy, GPS / timezone / locale from your own values —
# a deliberate mismatch (IP in one country, GPS in another); geo.source decides what the hooks use
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}'
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}' Profil yang memakai proxy memerlukan persetujuan VPN sistem satu kali, yang diberikan dari layar Headless API di aplikasi — tanpa itu aktivasi tetap berhasil, tetapi proxy tidak akan terhubung dan panggilan mengembalikan INTERNAL.
Setiap flag kecuali hook_spoof_uptime sudah ON, jadi kebanyakan profil melewati langkah ini. Lakukan hanya untuk mematikan hook tertentu, atau menyalakan spoofing uptime. Karena pembaruan menggantikan seluruh peta, baca dulu lalu kirim kembali secara lengkap.
# every flag is already ON (except hook_spoof_uptime), so most profiles skip this step.
# an update REPLACES the whole map — read it first, then send it back complete:
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id>
# example: Wi-Fi + Bluetooth spoofing off, uptime spoofing on, everything else at its default
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e hookFlags '{"hook_hide_dev_opts":true,"hook_hide_vpn":true,"hook_hide_airplane_mode":true,"hook_hide_proxy":true,"hook_hide_root":true,"hook_hide_lsposed":true,"hook_spoof_installer":true,"hook_package_info":true,"hook_lan_scan_block":true,"hook_identifiers_partly":true,"hook_identifiers_fully":true,"hook_wifi":false,"hook_nearby_wifi":true,"hook_nearby_bluetooth":false,"hook_realistic_sensor":true,"hook_sensor_accelerometer":true,"hook_sensor_gyroscope":true,"hook_sensor_light":true,"hook_spoof_uptime":true,"hook_virtual_accounts":true,"hook_geo_gps":true,"hook_geo_locale":true,"hook_geo_timezone":true}' Satu-satunya jaring pengaman yang ada: mengaktifkan profil baru menghapus data aplikasi target. Jika profil yang aktif saat ini menyimpan sesi atau data yang layak dipertahankan, cadangkan sebelum Anda berpindah. Kedua panggilan *.start hanya bekerja pada profil aktif.
# activating wipes the target apps' data — if the CURRENTLY active profile has anything worth keeping, save it first
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token>
# → "activeProfileId" is the profile to back up
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.start --extra token:s:<your_access_token> --extra id:s:<active_profile_id>
# → {"jobId":"f0e1d2c3-...", "type":"backup", ...} — poll until "state" is DONE (or FAILED):
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method backup.job --extra token:s:<your_access_token> --extra jobId:s:<job_id>
# later, once that profile is active again, pour it back:
# adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method restore.start --extra token:s:<your_access_token> --extra id:s:<active_profile_id> Saat identitas mulai berlaku. Profil apa pun yang aktif sebelumnya dinonaktifkan untuk Anda — tidak perlu memanggil profile.deactivate lebih dulu.
# force-stops every target app, CLEARS ITS DATA, and brings it back with the new identity.
# no confirmation dialog — this comment is the only warning you get
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id>
# → Bundle[{data={"id":"a1b2...","isActive":true}, ok=true}]
# BUSY? a backup / restore job still holds the slot — retry until it stops Baca kembali profilnya dan pastikan apa yang akan dipakai hook: blok hasil generator atau tulisan manual dengan enabled:true, proxy beserta keluaran uji langsungnya, dan geo yang menunjuk ke sumber yang Anda pilih.
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id>
# → "isActive":true, "deviceMock":{"enabled":true,...}, "sim":{"enabled":true,"simCards":[...]}, "proxy":{...}, "geo":{...}
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method status --extra token:s:<your_access_token>
# → "activeProfileId":"<profile_id>" Profilnya sudah selesai. Inilah panggilan yang akan Anda butuhkan berikutnya.
# a second identity with the same settings — device re-rolled, SIM numbers regenerated, name generated
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.duplicate --extra token:s:<your_access_token> --extra id:s:<profile_id>
# stop spoofing (no id needed — it deactivates whichever profile is active)
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.deactivate --extra token:s:<your_access_token>
# delete the profile — its backups under /sdcard/HideMyAndroid_Backups/ go with it
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.delete --extra token:s:<your_access_token> --extra id:s:<profile_id> Dua resep lengkap
Langkah-langkah di atas, masing-masing dipadatkan menjadi satu blok salin-dan-jalankan. A adalah jalur terpendek pada 1.5.9+; B sepenuhnya menghindari generator dan proxy, dan berfungsi pada 1.4.5+. Ganti <profile_id> setelah perintah pertama pada keduanya.
Resep A — semuanya dihasilkan
Perangkat acak, kartu SIM untuk US + GB, lalu lintas dan lokasi melalui proxy. Tujuh perintah.
# Recipe A — everything generated (app 1.5.9+). The shortest path to a working profile.
# 1. create — copy the returned id into <profile_id> below
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo
# 2. target app
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp
# 3. virtual Gmail account
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'gmails:s:["[email protected]"]'
# 4. device + SIM in one call — a random device, slot 0 US, slot 1 GB (both enabled and saved)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e simCountries '["US","GB"]' -e deviceTemplate random
# 5. proxy — tested live (~8s); the location follows it
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}'
# 6. activate — clears the target app's data
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id>
# 7. verify
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id> Resep B — semuanya manual
Setiap kolom Build, setiap kolom SIM, dan lokasi ditulis oleh Anda; tanpa proxy, tanpa generator.
# Recipe B — everything by hand (app 1.4.5+). No generator, no proxy: you control every value.
# 1. create — copy the returned id into <profile_id> below
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.create --extra token:s:<your_access_token> --extra name:s:Demo
# 2. target app
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.addApp --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra packageName:s:com.whatsapp
# 3. virtual Gmail accounts
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.update --extra token:s:<your_access_token> --extra id:s:<profile_id> --extra 'gmails:s:["[email protected]","[email protected]"]'
# 4. device — every Build field yourself
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}'
# 5. SIM — two cards, every field yourself
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE","phoneNumber":"+12025550123","iccid":"8901410123456789012","imsi":"310410123456789"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G","phoneNumber":"+12025550456","iccid":"8901260987654321098","imsi":"310260987654321"}]}'
# 6. location — custom, no proxy (all four fields required; timezone is not validated)
adb shell am broadcast -a com.wowsoftware.hidemyandroid.HEADLESS_UPDATE -p com.wowsoftware.hidemyandroid -e token <your_access_token> -e id <profile_id> -e geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}'
# 7. activate — clears the target app's data
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.setActive --extra token:s:<your_access_token> --extra id:s:<profile_id>
# 8. verify
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.get --extra token:s:<your_access_token> --extra id:s:<profile_id> Kode error
Saat gagal, Anda akan mendapatkan ok=false dengan salah satu nilai error_code berikut (broadcast mengembalikan result=1):
| Kode | Arti | Solusi |
|---|---|---|
UNAUTHORIZED | Token hilang atau salah | Gunakan kunci Anda saat ini; regenerate jika tidak yakin |
FEATURE_DISABLED | Headless API dinonaktifkan | Aktifkan di Pengaturan → Developer → Headless API |
BAD_REQUEST | Parameter atau JSON tidak valid | Periksa kolom yang diperlukan, JSON yang valid, hanya gmail, tidak ada aplikasi duplikat, paket yang memang milik profil, kode negara / id templat yang tercantum di panggilan penemuannya — dan jangan pernah sim bersama simCountries atau deviceMock bersama deviceTemplate dalam satu panggilan |
NOT_FOUND | Profil, tugas, atau cadangan itu tidak ada | Konfirmasi id dengan profile.list, backup.job, atau backup.list |
BUSY | Tugas pencadangan / pemulihan masih menahan slotnya | error_message menyebutkan jobId yang sedang berjalan — tunggu tugasnya berakhir, lalu coba lagi; setelah pembatalan, slotnya bisa bertahan lebih lama daripada status CANCELLED, jadi ulangi sampai BUSY berhenti. Juga dikembalikan oleh profile.setActive / deactivate / delete selama sebuah tugas menahan slotnya |
REQUIRES_ACTIVE_PROFILE | backup.start / restore.start pada profil yang tidak aktif | Jalankan profile.setActive lebih dulu — tidak ada flag untuk melewatinya |
NO_BACKUP | restore.start tidak menemukan cadangan untuk aplikasi yang diminta (atau profilnya sama sekali tidak punya cadangan) | Periksa backup.list; jalankan backup.start terlebih dahulu |
PROXY_INVALID | Proxy gagal dalam uji langsung | Periksa host/port/protokol/autentikasi dan koneksi internet perangkat; tidak disimpan |
LICENSE_EXPIRED | Premium kedaluwarsa | Perbarui Premium |
LICENSE_STALE | Lisensi belum diperiksa secara online baru-baru ini | Buka aplikasi sekali untuk memvalidasi ulang (setidaknya setiap 24 jam untuk penggunaan terus-menerus) |
INTERNAL | Error internal (I/O atau root) | Coba lagi; pastikan root/LSPosed berfungsi dengan baik |
Tips & pemecahan masalah
- Broadcast tidak melakukan apa pun? Pastikan Anda menyertakan
-p com.wowsoftware.hidemyandroid— Android memblokir broadcast tanpanya. - Nilai terpotong setelah
:? Nilai tersebut mengandung tanda titik dua, sehinggacontent callmemotongnya. Kirim melalui broadcastHEADLESS_UPDATE. - Broadcast JSON tidak diterapkan (sering terjadi di Windows)? Di shell desktop dan shell perangkat, tanda kutip dalam JSON
am broadcast(hookFlags,proxy,deviceMock,sim) mudah terhapus, sehinggaamsalah membaca nilai tersebut (mungkin terlihat sebagai URI datadat=…) dan tidak ada yang berubah. Solusi yang andal adalah menjaga JSON di luar baris perintah — taruh seluruh alur kerja dalam file.sh(tanda kutip tunggal menjaga setiap JSON tetap utuh), lalu push dan jalankan di perangkat. Skrip berjalan di perangkat, sehingga dapat menangkap id profil baru dan menggunakannya kembali:bashkemudian push ke perangkat dan jalankan:# setup.sh — Recipe A from the full example as one runnable script (runs on the device) URI=content://com.wowsoftware.hidemyandroid.headless PKG=com.wowsoftware.hidemyandroid K=<your_access_token> # 1. create a profile and capture its id ID=$(content call --uri $URI --method profile.create --extra token:s:$K --extra name:s:Demo | grep -o '"id":"[^"]*"' | head -n1 | sed 's/.*"id":"//;s/"//') echo "profile id: $ID" # 2. add a target app content call --uri $URI --method profile.addApp --extra token:s:$K --extra id:s:$ID --extra packageName:s:com.facebook.katana # 3. add the virtual Gmail accounts content call --uri $URI --method profile.update --extra token:s:$K --extra id:s:$ID --extra 'gmails:s:["[email protected]","[email protected]"]' # 4. device + SIM generated from the database (1.5.9+): random device, slot 0 US, slot 1 GB am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e simCountries '["US","GB"]' -e deviceTemplate random # Recipe B alternative (any version) — write both blocks yourself instead: # am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e deviceMock '{"enabled":true,"manufacturer":"Samsung","brand":"samsung","model":"SM-S918B","device":"dm3q","product":"dm3qxxx","board":"kalama","hardware":"qcom","buildId":"UP1A.231005.007","buildIncremental":"S918BXXU3CWK9","buildType":"user","buildTags":"release-keys","buildFingerprint":"samsung/dm3qxxx/dm3q:14/UP1A.231005.007/S918BXXU3CWK9:user/release-keys","deviceName":"Galaxy S23 Ultra"}' # am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e sim '{"enabled":true,"simCards":[{"slotIndex":0,"carrierName":"AT&T","countryIso":"us","mcc":"310","mnc":"410","operatorCode":"310410","networkType":"LTE","phoneNumber":"+12025550123","iccid":"8901410123456789012","imsi":"310410123456789"},{"slotIndex":1,"carrierName":"T-Mobile","countryIso":"us","mcc":"310","mnc":"260","operatorCode":"310260","networkType":"NR 5G","phoneNumber":"+12025550456","iccid":"8901260987654321098","imsi":"310260987654321"}]}' # 5. enable + set the proxy (tested live, ~8s) — the location follows it am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e proxy '{"enabled":true,"host":"10.0.0.1","port":1080,"protocol":"SOCKS5"}' # Or skip the proxy and set the location yourself (use INSTEAD of the proxy line, not after it): # am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}' # 6. activate (restarts the target app and clears its data) content call --uri $URI --method profile.setActive --extra token:s:$K --extra id:s:$ID # 7. verify content call --uri $URI --method profile.get --extra token:s:$K --extra id:s:$IDbashPerintahadb push setup.sh /data/local/tmp/setup.sh adb shell sh /data/local/tmp/setup.shcontent callbiasa (tanpa JSON) dapat diketikkan langsung tanpa skrip. Di Git Bash, tambahkan awalanMSYS_NO_PATHCONV=1pada barisadbagar path di perangkat tidak ditulis ulang. - Perubahan tidak muncul? Aplikasi target harus restart — mengaktifkan profil akan melakukan ini secara otomatis, sekaligus menghapus data aplikasi tersebut pada langkah yang sama, sehingga ia hidup dengan identitas baru tanpa membawa apa pun dari sebelumnya.
PROXY_INVALIDuntuk proxy yang Anda percaya? Perangkat memerlukan internet untuk pengujian, dibatasi ~8 detik, sehingga proxy yang lambat dapat timeout.BUSYdari tugas yang sudah Anda batalkan?backup.cancelseketika mengubah tugas menjadiCANCELLED(dan mengisifinishedAt), tetapitaryang diluncurkannya tidak dapat diputus dan terus berjalan, sehingga slotnya tetap tertahan.backup.jobmenampilkanCANCELLEDsaat slotnya masih sibuk, dan tidak ada kolom yang melaporkan slot itu — jangan anggapCANCELLEDsebagai “slot bebas”; cukup ulangiprofile.setActive/deactivate/deletesampai tidak lagi mengembalikanBUSY. (Tugas yang berakhir wajar diDONEatauFAILEDmembebaskan slotnya hampir seketika.)Binding not well formeduntuk id templat yang Anda salin langsung daridevice.templates? Templat hasil impor memiliki id yang diawalicustom:, dan titik dua itu merusak bentukkey:type:valuedari--extra— alatcontentmencetak[ERROR] Binding not well formedbeserta teks penggunaannya dan permintaan tidak pernah sampai ke aplikasi. Kirim lewat broadcastHEADLESS_UPDATEsebagai gantinya (-e deviceTemplate 'custom:…'). Id bawaan (brand|product|model) tidak mengandung titik dua dan bekerja lewat kedua transport — tetapi apit dengan tanda kutip tunggal, atau shell membaca|sebagai pipe (sh: e3qxeea: not found) dan tidak ada yang terkirim sama sekali.