Ingat bagaimana Android 8 memudahkan menentukan tema perangkat Anda? Ingat betapa menyenangkannya itu? Ya, itu kembali di Android 12, dengan perubahan.
Stabil penuh Android 12 rilis sudah dekat, dan Google bahkan sudah melakukannya memposting kode sumber ke repo AOSP-nya. Ada banyak yang baru di Android 12, termasuk tambahan pada hamparan sumber daya yang disebut Hamparan Fabrikasi. Yang dimaksud dengan API untuk membantu sistem mengelola perubahan dinamis yang digunakan Materi Anda dan monet mungkin berubah menjadi sesuatu yang jauh lebih besar -- setidaknya hingga Android 13 dirilis.
Latar belakang
Mishaal Rahman menemukan API baru ini dan menarik perhatian saya. Dia telah menggunakan perintah shell untuk menguji nilai sumber daya yang berbeda di Android 12 tanpa harus melakukannya untuk mengkompilasi APK overlay secara manual, dan menurutnya ini mungkin bisa menjadi ide aplikasi yang menarik untuk perangkat yang di-rooting. Ketika dia menarik perhatian saya, saya mempelajari banyak kode sumber untuk Android 12 dan memperhatikan sesuatu yang menurut saya cukup menarik. Saya menguji apa yang saya temukan, dan sekarang kita berada di sini -- ternyata, Fabricated Overlay API dapat digunakan untuk mengembalikan tema yang tidak dapat di-root. Sebelum saya membahas lebih jauh apa yang terjadi di sini, saya akan menjelaskan apa sebenarnya Fabricated Overlay itu.
Apa itu Overlay Fabrikasi?
Hamparan Fabrikasi adalah fitur baru yang diperkenalkan di Android 12. Mereka mirip dengan Runtime Resource Overlay (RRO) klasik yang dimiliki Android selama beberapa tahun sekarang. Baik RRO maupun Fabricated Overlay dapat mengambil alih sumber daya yang berbeda untuk aplikasi yang berbeda. Anda dapat mengubah boolean dari false menjadi true (atau sebaliknya), mengatur seberapa besar status bar yang Anda inginkan, dan seterusnya.
Namun, Hamparan Fabrikasi memiliki beberapa perbedaan penting dari RRO. Pertama, Anda tidak perlu membuat APK overlay lalu menginstalnya. Sebagai gantinya, Anda cukup memberi tahu Android nilai mana yang ingin Anda ubah untuk aplikasi mana dan Android akan mendaftarkan perubahan Anda sebagai overlay yang kemudian dapat Anda aktifkan.
Mereka juga sedikit lebih terbatas dibandingkan RRO. Sebelum Android 11, RRO dapat mengganti hampir semua sumber daya: boolean, bilangan bulat, dimensi, atribut, tata letak, dan bahkan file data mentah. Android 11 membuat beberapa perubahan pada cara kerja RRO, sehingga penggantian tata letak tidak lagi dapat dilakukan, meskipun hal ini membuat RRO lebih stabil secara keseluruhan.
Sebaliknya, Hamparan Buatan hanya dapat menimpa nilai yang dapat direpresentasikan sebagai bilangan bulat. Itu termasuk bilangan bulat (duh), dimensi, boolean, dan warna. Anda tidak dapat menggunakannya untuk mengganti sumber daya data mentah, tata letak, string, atau array -- setidaknya tidak dengan mudah. Ini merupakan batasan sewenang-wenang dalam API: ia hanya menerima nilai integer dan kategori sumber daya seperti yang ditentukan oleh kelas TypedValue. TypedValue melakukannya mendukung string dan tipe sumber daya lainnya, tetapi hanya untuk mereferensikan sumber dayanya, bukan menyimpan data aktualnya.
Namun, batasan tersebut bukanlah masalah besar untuk tujuan yang dimaksudkan dari Fabricated Overlay: Material You dan efek monet. Hamparan Fabrikasi memudahkan sistem membuat dan menerapkan hamparan warna dan dimensi dengan cepat, tanpa harus melakukan boot ulang atau menunggu APK dikompilasi.
Sekarang, biasanya, ini hanyalah API bagus lainnya yang dapat dimanfaatkan oleh orang-orang dengan perangkat yang di-rooting. Kecuali ada celah yang dibuat oleh pabrikan (seperti yang dimanfaatkan Synergy pada perangkat Samsung), overlay hanya dapat dipasang oleh pihak ketiga yang memiliki akses root. Itu bagian terbaiknya -- Google lupa menambal lubang di Android 12.
Overlay Buatan Tanpa Root
Android 8 memperkenalkan API Overlay Manager Service (atau OMS) baru, dan orang-orang dengan cepat mengetahui bahwa APK overlay dapat diinstal sebagai aplikasi normal dan kemudian diaktifkan menggunakan ADB. Sayangnya, Google menambal ini di Android 9, dan sejak itu, hanya overlay yang ditandatangani dengan kunci yang sama dengan sistem yang dapat diinstal secara dinamis.
Ternyata, Fabricated Overlay Android 12 memiliki celah yang mirip dengan yang ada di Android 8: mereka tidak memerlukan akses root atau izin tingkat tanda tangan. Mereka hanya memerlukan sesuatu yang berjalan sebagai pengguna shell (yaitu, ADB) untuk mendaftarkan mereka.
Cukup jelas bahwa Google bermaksud agar Fabricated Overlay hanya dapat diakses oleh pengguna root dan sistem. Ada implementasi perintah ADB untuk membuatnya, dan itu tidak akan berjalan jika pengguna yang menjalankannya bukan root. Celahnya adalah pemeriksaannya hanya pada perintah, bukan API sebenarnya, yang berarti kita bisa memanfaatkannya dengan sedikit kerja keras.
ADB Di Perangkat
Sejak lama, Android telah memiliki fitur ADB nirkabel. Ini memungkinkan komputer (atau apa pun dengan biner ADB dan akses jaringan) terhubung ke perangkat secara nirkabel. Ini sebagian besar ditujukan untuk perangkat Android yang tidak memiliki koneksi USB yang dapat diakses pengguna, misalnya jam tangan pintar dan TV. Selain itu, sebelum Android 11, Anda memerlukan koneksi ADB kabel untuk mengaktifkannya modus nirkabel.
Android 11 secara resmi menghadirkan ADB nirkabel ke ponsel dan tablet. Ini sedikit lebih rumit daripada ADB nirkabel klasik, dengan kode pemasangan dan autentikasi, namun dapat diaktifkan oleh pengguna sepenuhnya di perangkat, selama perangkat terhubung ke WiFi. Artinya, Anda dapat terhubung ke perangkat Anda melalui ADB dari perangkat Anda, dan yang Anda perlukan hanyalah WiFi koneksi.
Menggunakan API yang Ditinggikan dalam Aplikasi
Ada banyak alasan mengapa Anda mungkin ingin menggunakan API yang dibatasi di aplikasi Anda. Biasanya, itu karena mereka menyediakan beberapa fungsi khusus yang Anda perlukan. Selama API yang Anda perlukan memiliki implementasi perintah shell, cukup mudah untuk menggunakannya dari suatu aplikasi. Yang perlu Anda lakukan hanyalah membuat proses shell sebagai root (atau ADB), jalankan perintah yang benar, dan parsing hasilnya, jika ada.
Bagaimana jika API tidak memiliki implementasi shell, atau implementasi shell tidak memiliki sesuatu yang Anda perlukan? Jika Anda menggunakan perangkat yang di-rooting, Anda dapat menggunakan sesuatu seperti libRootJava. libRootJava memungkinkan Anda berinteraksi dengan API kerangka Android seolah-olah aplikasi Anda berjalan sebagai pengguna root. Ini lebih nyaman dan lebih cepat daripada menjalankan perintah shell, karena semuanya dalam bahasa yang sama, dan Anda tidak perlu khawatir tentang penguraian string secara manual. Memang ada beberapa keterbatasan, namun secara umum, ini berfungsi dengan baik.
API libRootJava cukup fleksibel. Anda dapat mengadaptasinya untuk dijalankan sebagai pengguna shell, bukan sebagai root. Untungnya, Anda tidak perlu melakukannya, karena sudah ada yang membuatnya, dan itu disebut Shizuku. Shizuku hampir seperti kombinasi Magisk Manager dan libRootJava.
Aplikasi Shizuku Manager memandu Anda dalam menyiapkan proses yang berjalan sebagai pengguna shell yang dapat diakses Shizuku. Pustaka Shizuku API dapat diimplementasikan ke dalam aplikasi agar aplikasi dapat mengakses API sistem seolah-olah mereka adalah pengguna shell. Ini adalah proses yang jauh lebih terpusat daripada libRootJava, karena Shizuku hanya perlu disiapkan satu kali sebelum setiap aplikasi yang mengimplementasikan pustaka Shizuku API dapat menggunakannya. Jika Anda tertarik dengan cara kerja Shizuku dan cara mengintegrasikannya ke dalam aplikasi Anda, Saya punya panduan untuk itu di sini.
Shizuku dan Hamparan Buatan
Saat ini, Anda mungkin sudah bisa melihat ke mana arahnya. Kita dapat menggunakan layanan seperti Shizuku untuk mengakses Fabricated Overlays API sebagai pengguna shell, dan kita dapat menggunakan fitur ADB nirkabel Android 11 untuk mendapatkan akses tingkat shell, semuanya di perangkat. Karena pembatasan pengguna root hanya terdapat pada perintah shell Fabricated Overlay dan bukan pada API sebenarnya, menjalankannya sebagai pengguna shell sudah cukup untuk menggunakannya secara langsung.
Implementasi: Perpustakaan dan Aplikasi Contoh
Bagaimana dengan detail implementasinya? Baiklah, saya juga membantu Anda untuk hal itu.
Sebagai persiapan untuk ini, saya membuat keduanya a perpustakaan dan aplikasi sampel yang berfungsi penuh menggunakan perpustakaan itu.
Perpustakaan itu sendiri sebagian besar untuk kenyamanan. Ini membungkus beberapa API sistem tersembunyi dan memberi Anda beberapa metode mudah untuk menangani izin Shizuku. Ini juga fleksibel, sehingga Anda dapat menyediakan instance IOverlayManager API Anda sendiri jika Anda memiliki cara lain untuk mengambilnya.
Contoh aplikasi menunjukkan bagaimana Anda dapat mengimplementasikan perpustakaan menggunakan Shizuku. Ini juga merupakan aplikasi yang berfungsi penuh dan berguna. Halaman utama menampilkan Fabricated Overlay terdaftar yang dibuat melaluinya, dikelompokkan berdasarkan aplikasi target. Anda juga dapat mengaktifkan, menonaktifkan, dan menghapusnya dari sana.
Mengetuk tombol “Tambahkan Hamparan” di bagian bawah akan membawa Anda ke daftar semua aplikasi yang dapat dihamparkan. Cari atau gulir untuk menemukan yang Anda perlukan dan ketuk. Kemudian Anda dapat menekan tombol “Tambah” di bagian bawah layar untuk melihat daftar sumber daya yang dapat diganti di aplikasi itu. Pilih sumber daya, tetapkan nilainya, dan ulangi sebanyak nilai yang ingin Anda ubah. Tekan tombol “Simpan”, masukkan nama, konfirmasi, dan Anda akan dibawa kembali ke layar utama, sekarang menampilkan overlay baru, siap untuk diaktifkan.
Berikut beberapa tangkapan layar dari aplikasi tersebut, terima kasih kepada Mishaal Rahman.
Sebagai catatan tambahan, saya juga memiliki aplikasi manajer overlay umum yang disebut... Manajer Hamparan. Aplikasi yang telah dikompilasi itu sendiri adalah hanya tersedia di Patreon saya, tetapi kode sumber tersedia secara bebas kepada siapa saja yang ingin mengkompilasi atau memodifikasinya.
Kesimpulan
API Fabricated Overlay baru di Android 12 cukup bagus, terutama karena tidak memerlukan root. Ini mungkin tidak secanggih APK RRO lengkap, tetapi memberi Anda lebih banyak fleksibilitas tanpa akses root.
Lihat aplikasi Fabrikasi Overlay di GitHub
Jika Anda memiliki perangkat yang menjalankan Android 12 dan ingin mencobanya, lihat repositori GitHub yang tertaut di atas. Bagian Rilis akan memiliki APK untuk diunduh dan digunakan. Pustaka harus mudah disertakan dalam aplikasi Anda menggunakan JitPack.
Tentu saja, Anda tidak boleh berharap fitur ini bertahan lama. Google sangat tidak menyukai overlay pihak ketiga, jadi masalah ini hampir pasti akan diperbaiki saat Android 13 dirilis. Namun, sementara itu, nikmatilah selagi masih ada!