Saya memiliki sebuah smartphone yaitu Infinix Note 40 Pro. Artikel ini bukan review untuk HP ini melainkan untuk mencari tahu cara kerja dari satu fitur HP ini, yaitu fitur Active Halo.
Sebelum mulai mencari tahu lebih dalam, fitur Active Halo adalah fitur dimana saat ada notifikasi, musik, ngecas, game, dll suatu LED dibelakang smartphone saya akan menyala. Sayangnya, dari yang saya cari-cari fitur ini gak bisa nyala beda warna per tiap aplikasi. Contohnya WhatsApp berwarna hijau, Discord berwarna ungu. Dalam seri ini saya berharap bisa membuat sesuatu agar bisa sedikit "customize" fitur ini (Tapi mungkin harapan ini ketinggian) dan juga belajar tentang android.
Untuk sekedar info, saya ingin membuat ini sebagai sebuah seri di mana saya menceritakan pengalaman saya untuk mencari cara kerja dari fitur ini. Saya tidak terlalu tahu tentang cara reverse-engineering Android, jadi kalau ada beberapa bagian yang terlihat membingungkan kemungkinan besar saya juga agak bingung. Artikel ini juga mungkin sangat teknis, jadi siap-siap!
Untuk setup, saya memakai scrcpy untuk melihat smartphone dan terminal untuk menjalankan perintah-perintah ADB
Pertama-tama saya mulai dari cari-cari di log android dengan logcat. Singkatnya, log adalah sebuah file yang berisi sesuatu yang terjadi dengan sistem dan cukup berguna untuk debug aplikasi dan mengetahui hal lain.
Untuk melihat log bisa dengan menggunakan adb dengan command "adb logcat". ADB adalah singkatan dari android device bridge, dengan menggunakan program ini kita bisa melakukan berbagai hal ke smartphone kita seperti melihat layar, menjalankan shell, menginstall aplikasi dan masih banyak lagi.
Saat saya menjalankan perintah ini, hasilnya panjang banget (hampir 200 baris dan masih lanjut)... Cara mencari yang saya butuhkan bisa 2 cara:
1. Nyalain Active Halonya terus baca semuanya.
2. Nyalain Active Halonya, langsung berhentiin perintahnya, baca deket-deket akhir.
Karena cara ke-2 pasti lebih singkat, saya pakai itu.
11-02 23:09:51.248 1732 2232 I mtkpower_client: ret_hdl:79573711-02 23:09:51.256 1732 4984 D ActivityManager: hookDisturbStatus status = 8011-02 23:09:51.257 1732 4984 D LedNote : write arg=00 02 02 00 00 0011-02 23:09:51.262 971 1000 D ccci_mdinit: (1):monitor_time_update_thread round:37962 ########11-02 23:09:51.265 1320 32052 D BufferPoolAccessor2.0: bufferpool2 0xb400007a7e47cf28 : 3(7500 size) total buffers - 1(3000 size) used buffers - 13565/13568 (recycle/alloc) - 20/13566 (fetch/transfer)
Ada sesuatu yang menarik dari log ini, ada tag yang namanya "LedNote" dengan message "write" dan diikuti dengan beberapa angka (kayaknya hexadecimal).
Setelah mencoba-coba mengganti, angka-angkanya juga ganti.
Tiap tab ada 6 pilihan warna, datanya:
Tab 1
Warna 1: 00 02 00 00 00 00Warna 2: 00 02 01 00 00 00dan lanjut sampaiWarna 6: 00 02 05 00 00 00
Tab 2
Warna 1: 00 01 00 00 00 00Warna 2: 00 01 01 00 00 00dan lanjut sampaiWarna 6: 00 01 05 00 00 00
Tab 3
Warna 1: 00 04 00 00 00 00Warna 2: 00 04 01 00 00 00dan lanjut sampaiWarna 6: 00 04 05 00 00 00
Dan tiap kali ganti pilihan datanya jadi
00 00 00 00 00 00
Jadi dari ini bisa dibilang:
Bagian 2: "02" Kalau tab 1, "01" Kalau tab 2, "04" kalau tab 3Bagian 3: "00" kalau pilihan 1 sampai "05" untuk pilihan 6Kalau semuanya 00 maka reset
Ini adalah penemuan yang menarik! Tapi bisa gak sih kita tulis data ini sendiri? Penasaran saya cari-cari sebenernya kalo pencet "Preview on Back" dia ngapain sih secara internal?
Berarti ini perlu dapetin .apk dari aplikasi settings dan di reverse-engineer menggunakan komputer
Jadi gimana cara dapetin .apk filenya? Pertama-tama saya menggunakan perintah "adb shell cmd package list packages --user 0 | grep settings", "adb shell ... --user 0" artinya adalah berikan semua daftar aplikasi yang ada pada smartphone ini, lalu "|" artinya output dari perintah sebelumnya masukkan ke perintah berikutnya, "grep settings" mencari yang ada "settings". Hasilnya adalah:
package:com.android.settings.intelligencepackage:com.transsion.aisettingspackage:com.android.settings.resoverlaypackage:com.transsion.ossettingsextpackage:com.android.settingspackage:com.android.providers.settings
Setelah di cari-cari ternyata saya perlu yang "com.android.settings", terus dapetin APKnya gimana? tinggal pakai perintah "adb shell pm path com.android.settings" dan akhirnya dapat filenya dimana:
package:/system_ext/priv-app/TranSettingsApk/TranSettingsApk.apk
Saya pikir setelah itu tinggal pakai "adb pull /system_ext/priv-app/TranSettingsApk/TranSettingsApk.apk" tapi
adb: error: cannot create './/TranSettingsApk.apk': Permission denied
Saya punya feeling kalau ini harus ada root...
tapi setelah panjang lebar, akhirnya bisa di pull juga. Singkatnya caranya:
pakai "adb shell"
"cd" ke folder itu
"cp" ke /sdcard biar bisa diakses dari komputer
"adb pull" dari sdcard
Setelah ini saya sadar kalau sebenernya saya yang salah, karena saya ada di "/dev" yang harusnya gak boleh ditulis kecuali di sudo. Harusnya dari awal udah bisa.
Sekian untuk part ini, part selanjutnya mungkin besok? Kalau saya ketemu informasi lebih lanjut. Kira-kira untuk part selanjutnya saya akan ngomongin tentang reverse engineering menggunakan jadx (yang saya belum pernah coba).
Baca konten-konten menarik Kompasiana langsung dari smartphone kamu. Follow channel WhatsApp Kompasiana sekarang di sini: https://whatsapp.com/channel/0029VaYjYaL4Spk7WflFYJ2H