Inilah mengapa Anda tidak dapat melakukan sideload pembaruan ke Google Kamera dan Perekam

Jika Anda melihat kesalahan "verifikasi gagal" saat melakukan sideload pembaruan pada aplikasi Google Kamera atau Perekam, baca ini untuk mengetahui alasannya.

Saat Google meluncurkan Pixel 5 pada bulan Oktober, kami sangat antusias untuk mendapatkan aplikasi barunya. (Telepon itu sendiri cukup keren, juga.) Dengan peluncuran Pixel 5, muncul versi baru Google Kamera Dan Perekam Google aplikasi yang kami bagikan dengan komunitas. Namun, ketika banyak pengguna perangkat Pixel lama mencoba melakukan sideload pembaruan, mereka menemui kesalahan (ditunjukkan di atas). Anehnya, tidak semua orang mengalami masalah saat menginstal pembaruan. Beberapa dapat menginstalnya dengan baik, sementara yang lain harus melakukan reset pabrik agar dapat menginstal versi baru. Karena sifat masalah ini yang tampaknya acak, banyak yang menganggapnya sebagai bug. Kami cukup yakin sekarang bahwa masalah ini tidak berasal dari bug, melainkan penggunaan API baru oleh Google di Android 11 untuk memblokir pembaruan yang melakukan sideload.

Jika Anda mencoba melakukan sideload Google Camera 8.0 atau lebih baru atau Google Recorder 2.0 atau lebih baru pada perangkat Pixel yang menjalankan Android 11, Anda akan melihat pesan kesalahan yang menyatakan verifikasi tidak berhasil. Bahkan jika Anda mencoba melakukan sideload APK menggunakan perintah shell, Anda tidak akan mendapatkan alasan yang lebih spesifik atas kegagalan instalasi. Kode pengembalian instalasi yang akan diberikan kepada Anda adalah "INSTALL_FAILED_VERIFICATION_FAILURE", yang sayangnya tidak memberi tahu Anda mengapa verifikasi tidak berhasil. Dengan memeriksa logcat, kita dapat mengetahui secara pasti mengapa verifikasi gagal:

AppIntegrityManagerServiceImpl: Integritycheckofcom.google.android.GoogleCameraresult: DENYdueto[Rule: (PACKAGE_NAME EQ com.google.android.GoogleCamera) AND (VERSION_CODE GTE 32045130) AND (APP_CERTIFICATE EQ F0FD6C5B410F25CB25C3B53346C8972FAE30F8EE7411DF910480AD6B2D60DB83) AND NOT (INSTALLER_NAME EQ com.android.vending), DENY]

Berdasarkan pesan ini, pemeriksaan integritas pemasangan Google Kamera gagal karena "INSTALLER_NAME" tidak cocok dengan "com.android.vending", nama paket untuk Google Play Store. (Saya mencoba memasang Google Camera 8.0 menggunakan aplikasi Penginstal APKMirror, karena manfaatnya.) Pesan ini ditambahkan ke log sistem oleh "AppIntegrityManagerServiceImpl", yang merupakan bagian dari fitur" Integritas Aplikasi "baru Android. Menurut kode di AOSP, Integritas Aplikasi dirancang untuk memberikan lapisan pemeriksaan tambahan di atas verifikasi tanda tangan APK manajer paket yang ada. App Integrity API tampaknya menggunakan serangkaian Aturan untuk memutuskan apakah akan mengizinkan atau menolak instalasi. Aturan disediakan oleh aplikasi sistem — yang kami yakini sebagai Layanan Google Play — dan memang demikian disimpan dalam sebuah file.

Selain itu, Integritas Aplikasi juga menelepon kelas lain memanggil Pemverifikasi Stempel Sumber jika "cap sumber" tertanam dalam metadata Manifes. Misalnya, inilah yang kami yakini sebagai "cap sumber" dari Manifes aplikasi Google Kamera:

<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>

Dari apa yang kami tahu, stempel sumber digunakan untuk memverifikasi tanda tangan penginstal paket. Jadi, misalnya, Anda tidak dapat mengelabui AppIntegrity agar mengizinkan penginstalan meskipun Anda menipu Play Store sebagai pemasang.

Selain itu, kami tidak dapat mengetahui secara pasti bagaimana Google menggunakan AppIntegrity dan API terkait untuk memblokir pembaruan yang melakukan sideload pada aplikasi Google Kamera dan Google Recorder. Pemeriksaan singkat terhadap APK Layanan Google Play mengungkapkan bahwa ia menggunakan API ini, namun kodenya terlalu dikaburkan untuk benar-benar memahami semuanya. Kami bahkan menemukan direktori tempat aturan integritas disimpan — /data/system/integrity_rules — tetapi tidak banyak gunanya karena hanya berisi data berseri. Kami juga belum menemukan cara untuk menonaktifkan verifikasi integritas (tampaknya tidak semudah itu mengubah pengaturan), meskipun kami yakin alasan mengapa pengaturan ulang pabrik berhasil bagi sebagian orang adalah karena Layanan Google Play tidak mendapat kesempatan untuk menginisialisasi aturannya untuk memblokir instalasi. Pesan logcat dan pengenalan API baru ini di Android 11 sangat menunjukkan bahwa ini semua memang disengaja dan bukan bug.

Google belum memberikan komentar secara terbuka mengenai penggunaan API ini (kami juga tidak mengharapkannya), dan mereka tidak memberikan tanggapan ketika dimintai komentar. Kami memiliki beberapa teori mengapa mereka memblokir pembaruan yang ditransfer. Pertama, mereka dapat melindungi orang agar tidak menginstal versi aplikasi yang salah untuk perangkat mereka. Google mengirimkan versi aplikasinya yang spesifik ke perangkat Pixel tertentu. Misalnya, beberapa versi aplikasi Layanan Personalisasi Perangkat dapat ditemukan online. Meskipun semuanya dapat diinstal pada perangkat Pixel, pada satu titik hal itu mungkin dilakukan kehilangan fitur Teks Otomatis di Pixel 4 dengan mendownload versi yang dibuat untuk perangkat Pixel lama. Alasan lainnya mungkin untuk "meningkatkan ketertelusuran aplikasi sehubungan dengan distribusi tidak sah", seperti yang dijelaskan oleh Google di kelas SourceStampVerifier.

Sejauh ini, hanya sedikit aplikasi Google yang menggunakan format app bundle (seperti Google Camera dan Google Recorder). memblokir penginstalan non-Play Store, tetapi kami tidak tahu apakah perusahaan akan memperluas perilaku ini ke aplikasi lainnya setelah semuanya beralih ke format AAB. Kami juga mempertimbangkan apakah peralihan ke app bundle mengharuskan penerapan Integritas Aplikasi, namun kami mendapati bahwa Google sudah melakukannya punya solusi untuk ditangani ketika pengguna mencoba memasang aplikasi yang tidak memiliki semua pemisahan yang diperlukan. Apa pun masalahnya, menurut kami Google tidak bermaksud memblokir semua sideloading aplikasinya, meskipun alat ini tentu saja mengizinkan mereka untuk melakukan hal tersebut.

Terima kasih kepada pengembang vvb2060, aviraxp, dan Quinny899 atas bantuan mereka dalam artikel ini, dan tterima kasih kepada Perangkat Lunak PNF yang telah memberikan kami lisensi untuk menggunakannya Dekompiler JEB, alat rekayasa balik tingkat profesional untuk aplikasi Android.