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: August 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+, dan seluruh grup pencadangan / pemulihan memerlukan 1.5.3+. 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 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)adb shell content call
am broadcast Objek JSON (hookFlags, proxy, deviceMock, sim) — 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. Lima belas sisanya — status, semua operasi baca, 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 tujuh extra — name, hookFlags, proxy, geo, deviceMock, sim, gmails — sehingga name dan gmails bisa lewat kedua transport. Tabel di atas soal mana yang lebih praktis, bukan mana yang mungkin. Extra apa pun yang namanya tidak termasuk dalam tujuh 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.3"}, 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).

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.

Konfigurasi

Ini adalah nilai yang Anda kirim dengan profile.update. Default saat profil dibuat:

Pengaturan Default Untuk menggunakannya…
hookFlags (all 21) ✅ 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
sim ❌ OFF Sertakan "enabled":true
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 20 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_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:

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"}'

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

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:["alice@gmail.com","bob@gmail.com"]'

Contoh lengkap

Pengaturan lengkap dari awal:

bash
# 1. create a profile — 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. add a 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. add the 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:["alice@gmail.com","bob@gmail.com"]'

# 4. enable + set the device mock
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. enable + set the SIM mock (two cards, full fields)
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. enable + set the proxy (tested live, ~8s)
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"}'

# 7. pick where the location comes from — geo has two sources, choose ONE
#    A) from the proxy you just set. This is the default, so the line is optional:
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"}'
#    B) or set it yourself — this needs no proxy at all. Use B *instead of* A, not after 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 geo '{"source":"CUSTOM","latitude":35.6812,"longitude":139.7671,"countryCode":"JP","timezone":"Asia/Tokyo","language":"ja"}'
#    geo and proxy are independent: setting one never rewrites the other, and only
#    geo.source decides which one feeds the hooks. So CUSTOM together with a proxy in
#    a different country means your IP says one place while your GPS says another.

# 8. activate (restarts the target app and clears its 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>

# 9. 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
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 — 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:["alice@gmail.com","bob@gmail.com"]'
    
    # 4. enable + set the device mock
    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"}'
    
    # 5. enable + set the SIM mock (two cards)
    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"}]}'
    
    # 6. enable + set the proxy (tested live, ~8s)
    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"}'
    
    # 7. pick where the location comes from — geo has two sources, choose ONE
    #    A) from the proxy you just set. This is the default, so the line is optional:
    am broadcast -a $PKG.HEADLESS_UPDATE -p $PKG -e token $K -e id $ID -e geo '{"source":"PROXY"}'
    #    B) or set it yourself — this needs no proxy at all. Use B *instead of* A, 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"}'
    #    geo and proxy are independent: setting one never rewrites the other, and only
    #    geo.source decides which one feeds the hooks. So CUSTOM together with a proxy in
    #    a different country means your IP says one place while your GPS says another.
    
    # 8. activate (restarts the target app and clears its data)
    content call --uri $URI --method profile.setActive --extra token:s:$K --extra id:s:$ID
    
    # 9. 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.)
Unduh