HideMyAndroid Headless API

Kontrol HideMyAndroid sepenuhnya dari ADB atau alat otomatisasi apa pun — buat, konfigurasi, dan aktifkan profil tanpa membuka aplikasi. Premium, aplikasi 1.2.8+.

Terakhir diperbarui: Agustus 2026

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_uptime memerlukan 1.3.4+, geo dan profile.duplicate memerlukan 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_gyroscope memerlukan 1.6.3+, dan hook_sensor_light memerlukan 1.6.4+. Build lama mengabaikan kolom yang tidak dikenalnya dan tetap menjawab ok=true — tetapi metode yang tidak dikenal lebih nyaring: memanggil grup pencadangan / pemulihan pada build sebelum 1.5.3, atau sim.countries / device.templates sebelum 1.5.9, mengembalikan BAD_REQUEST dengan error_message “Unknown method: …”. Bila sebuah pengaturan tampak tidak berpengaruh, periksa version yang 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 devices akan 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 INTERNAL yang 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

bash
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.

💡 status adalah satu-satunya metode yang tetap menjawab saat lisensi kedaluwarsa atau basi — semua panggilan lain hanya mengembalikan LICENSE_EXPIRED atau LICENSE_STALE. Itulah cara membedakan keduanya ketika permintaan ditolak: baca premium untuk melihat apakah Premium benar-benar habis, dan freshnessOk untuk melihat apakah aplikasi sekadar perlu dibuka sekali. status tetap dibatasi oleh FEATURE_DISABLED dan UNAUTHORIZED, 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

bash
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

bash
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

bash
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

bash
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:

bash
# 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

bash
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

bash
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

bash
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.setActive tidak 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 adalah backup.start (1.5.3+) sebelum Anda berpindah. Dan sejak 1.5.3, selama tugas pencadangan / pemulihan masih menahan slotnya, profile.setActive dan profile.deactivate menjawab BUSY — bahkan untuk tugas yang sudah dibatalkan; ulangi sampai BUSY berhenti.

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

bash
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

bash
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

bash
adb shell content call --uri content://com.wowsoftware.hidemyandroid.headless --method profile.deactivate --extra token:s:<your_access_token>

broadcast — untuk otomatisasi

bash
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

bash
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

bash
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

bash
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. *.start kedua saat satu tugas sedang berjalan mengembalikan BUSY, dengan jobId yang sedang berjalan di error_message. Kedua panggilan *.start juga 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

bash
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

bash
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

bash
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

bash
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)

bash
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

bash
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

bash
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

bash
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

  • DONE tidak berarti setiap aplikasi berhasil. Ia hanya berarti tugas berjalan sampai akhir. Sebuah aplikasi bisa gagal sementara tugasnya tetap selesai DONE — selalu baca failed dan results[].
  • Aktivasi kini menunggu tugas. Selama sebuah tugas menahan slotnya, profile.setActive, profile.deactivate, dan profile.delete menjawab BUSY — bahkan untuk tugas yang sudah Anda batalkan, karena tar root di baliknya tidak dapat dihentikan di tengah file, dan tidak ada kolom potret yang melaporkan slot itu. Tugas yang berakhir wajar di DONE atau FAILED membebaskan slotnya hampir seketika; setelah pembatalan, jangan anggap CANCELLED sebagai “slot bebas” — cukup ulangi panggilannya sampai BUSY berhenti.
  • foregroundHeld adalah pengamatan, bukan janji. Ia melaporkan apakah sebuah foreground service sedang melindungi tugas agar tidak dimatikan oleh OS. Nilainya terukur true pada API 36, tetapi bahkan true hanya 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, …) ditambah metadata.json, ditulis dengan tar root. 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. sim dan simCountries dalam permintaan yang sama adalah BAD_REQUEST, begitu pula deviceMock bersama deviceTemplate. Mencampur antar pengaturan tidak masalah — simCountries berdampingan dengan deviceMock yang 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 dan simCountries yang dikirim bersamanya pun tidak diterapkan.

READ sim.countries Tampilkan negara-negara yang dikenal generator SIM content call

Parameters

No parameters.

Request

bash
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

bash
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)

bash
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)

bash
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

bash
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)

bash
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:)

bash
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 slot 0, kode kedua slot 1. Apa pun yang bukan larik JSON, larik kosong, entri kosong, lebih dari dua entri, atau kode yang tidak tercantum di sim.countries mengembalikan BAD_REQUEST — kode ketiga ditolak, tidak pernah dibuang diam-diam seperti kartu sim ketiga.
  • Yang Anda dapatkan. Untuk setiap slot, aplikasi memilih satu operator dari negara tersebut dari basis datanya dan mengisi setiap kolom blok sim yang biasa ditulis manual: carrierName, countryIso, mcc, mnc, operatorCode, phoneNumber seluler E.164 yang valid dengan kode telepon negaranya (+1… untuk US), iccid dan imsi yang berawalan MCC+MNC operator itu, serta networkType yang diundi acak dari LTE, NR 5G, WCDMA, dan GSM. Lalu ia menetapkan sim.enabled ke true dan menyimpannya.
  • Ia menggantikan seluruh blok SIM. Seperti halnya sim, hasilnya dinormalkan menjadi dua kartu: ["US"] mengisi slot 0 dan membiarkan slot 1 kosong, 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 berbentuk brand|product|model, mis. asus|ASUS_AI2401|AI2401_A; templat yang Anda impor di aplikasi memakai bentuk yang sama dengan awalan custom:, mis. custom:samsung|e3qxeea|SM-S928B. Id yang tidak ada dalam daftar mengembalikan BAD_REQUEST.
  • Yang Anda dapatkan. Setiap kolom deviceMock terisi dari templat, deviceMock.enabled ditetapkan ke true, 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:false disimpan tetapi tidak aktif — nilai disimpan agar Anda dapat mengaktifkannya nanti, tetapi tidak ada spoofing hingga enabled:true. geo adalah pengecualian: ia tidak punya sakelar enabled. Flag hook_geo_* berlaku setiap kali geo menghasilkan lokasi yang dapat dipakai — baik dari source: CUSTOM, maupun dari proxy yang enabled:true dan 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 — 165535, 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
bash
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: CUSTOM harus lengkap: sepasang koordinat yang bukan 0/0 dan berada dalam rentang, countryCode dua huruf, serta timezone. Kurang satu saja, panggilan mengembalikan BAD_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.

🛑 timezone adalah satu-satunya kolom yang sebenarnya tidak diperiksa. Ia hanya diuji agar tidak kosong — tidak pernah dicocokkan dengan basis data IANA. Salah ketik seperti Asia/Tokyoo akan diterima, mengembalikan ok=true, dikembalikan apa adanya oleh profile.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 lewat BAD_REQUEST.

CUSTOM — tetapkan lokasi secara manual, tanpa perlu proxy

bash
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)

bash
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
bash
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):

bash
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 bahwa NR 5G memakai spasi: NR5G tidak dikenali dan jatuh tepat ke lubang senyap itu.

bash
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):

bash
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:

bash
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

  1. 01 Periksa apakah API siap
  2. 02 Buat profil
  3. 03 Tambahkan aplikasi target
  4. 04 Tambahkan akun Gmail virtual
  5. 05 Pilih identitas perangkat
  6. 06 Pilih kartu SIM
  7. 07 Jaringan dan lokasi
  8. 08 Atur flag hook
  9. 09 Cadangkan profil yang akan ditinggalkan
  10. 10 Aktifkan
  11. 11 Verifikasi
  12. 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, dari status dan backup.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.

bash
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.

bash
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.

bash
# 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.

bash
# @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.

bash
# 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
bash
# 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'
bash
# 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.

Pilih kartu SIM

pilih satu

Gagasan yang sama untuk sim: hasilkan kartunya dari kode negara, atau tulis sendiri kedua kartunya. Apa pun caranya, profil berakhir dengan tepat dua slot.

bash
# 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"]'
bash
# 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"}]}'
bash
# 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.

Jaringan dan lokasi

pilih satu

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.

bash
# 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"}'
bash
# 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
bash
# 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.

Atur flag hook

opsional

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.

bash
# 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}'

Cadangkan profil yang akan ditinggalkan

opsional aplikasi 1.5.3+

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.

bash
# 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.

bash
# 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.

bash
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.

bash
# 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.

A

Resep A — semuanya dihasilkan

Perangkat acak, kartu SIM untuk US + GB, lalu lintas dan lokasi melalui proxy. Tujuh perintah.

bash
# 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>
B

Resep B — semuanya manual

Setiap kolom Build, setiap kolom SIM, dan lokasi ditulis oleh Anda; tanpa proxy, tanpa generator.

bash
# 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, sehingga content call memotongnya. Kirim melalui broadcast HEADLESS_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, sehingga am salah membaca nilai tersebut (mungkin terlihat sebagai URI data dat=…) 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:
    bash
    # 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:$ID
    kemudian push ke perangkat dan jalankan:
    bash
    adb push setup.sh /data/local/tmp/setup.sh
    adb shell sh /data/local/tmp/setup.sh
    Perintah content call biasa (tanpa JSON) dapat diketikkan langsung tanpa skrip. Di Git Bash, tambahkan awalan MSYS_NO_PATHCONV=1 pada baris adb agar 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_INVALID untuk proxy yang Anda percaya? Perangkat memerlukan internet untuk pengujian, dibatasi ~8 detik, sehingga proxy yang lambat dapat timeout.
  • BUSY dari tugas yang sudah Anda batalkan? backup.cancel seketika mengubah tugas menjadi CANCELLED (dan mengisi finishedAt), tetapi tar yang diluncurkannya tidak dapat diputus dan terus berjalan, sehingga slotnya tetap tertahan. backup.job menampilkan CANCELLED saat slotnya masih sibuk, dan tidak ada kolom yang melaporkan slot itu — jangan anggap CANCELLED sebagai “slot bebas”; cukup ulangi profile.setActive / deactivate / delete sampai tidak lagi mengembalikan BUSY. (Tugas yang berakhir wajar di DONE atau FAILED membebaskan slotnya hampir seketika.)
  • Binding not well formed untuk id templat yang Anda salin langsung dari device.templates? Templat hasil impor memiliki id yang diawali custom:, dan titik dua itu merusak bentuk key:type:value dari --extra — alat content mencetak [ERROR] Binding not well formed beserta teks penggunaannya dan permintaan tidak pernah sampai ke aplikasi. Kirim lewat broadcast HEADLESS_UPDATE sebagai 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.
Unduh