Apabila anda mengetik "Pasang" pada fail APK atau memuat turun apl daripada Gedung Play, urutan operasi yang kompleks bermula di belakang tabir. Apa yang kelihatan sebagai bar kemajuan mudah sebenarnya mewakili berpuluh-puluh langkah yang melibatkan penghuraian pakej, pengesahan kriptografi, pengurusan kebenaran, pengekstrakan fail dan pengoptimuman kod. Memahami proses ini membantu menjelaskan sebab pemasangan kadangkala gagal dan perkara yang boleh anda lakukan mengenainya.
Dalam artikel ini, kami akan menelusuri setiap langkah utama saluran paip pemasangan Android, dari saat sistem menerima APK sehingga apl sedia untuk dilancarkan.
Langkah 1: Memulakan Pemasangan
Proses pemasangan bermula secara berbeza bergantung pada sumber:
- Gedung Play: Apl Gedung Play memuat turun APK (atau APK split) dan memanggil pemasang pakej sistem dengan keistimewaan istimewa yang memintas beberapa pengesahan pengguna.
- Pemuatan sisi: Apabila anda membuka fail APK, Android melancarkan aktiviti pemasang pakej. Pada Android 8.0 dan lebih baharu, apl pemasangan mesti mempunyai kebenaran "Pasang apl yang tidak diketahui" untuk sumbernya yang khusus.
- ADB: Perintah adb install berkomunikasi terus dengan perkhidmatan pengurus pakej melalui USB, memintas pemasang grafik sepenuhnya.
Tanpa mengira sumber, semua pemasangan akhirnya mencapai perkhidmatan sistem yang sama: PackageManagerService (PMS). Ini ialah pihak berkuasa pusat untuk semua operasi pakej pada Android.
Langkah 2: Penghuraian Pakej
Sebelum apa-apa lagi, sistem perlu memahami perkara yang hendak dipasang. PackageManagerService memanggil PackageParser untuk membaca fail APK dan mengekstrak metadatanya.
Penghurai membaca fail AndroidManifest.xml dari dalam APK. Fail XML binari ini mengandungi maklumat kritikal:
- Nama pakej: Pengecam unik untuk apl (cth., com.example.myapp)
- Kod versi dan nama: Digunakan untuk menentukan sama ada ini adalah peningkatan atau pemasangan baharu
- Versi SDK minimum dan sasaran: Menentukan keserasian dengan peranti
- Keizinan yang diisytiharkan: Kedua-dua kebenaran permintaan apl dan kebenaran tersuai yang ditakrifkannya
- Komponen: Aktiviti, perkhidmatan, penerima siaran dan penyedia kandungan yang didaftarkan oleh aplikasi
- Keperluan Ciri perkakasan dan perisian: seperti kamera, GPS atau versi OpenGL tertentu
Jika manifes rosak atau struktur APK tidak sah, pemasangan gagal pada peringkat ini dengan mesej "Ralat hurai". Ini adalah salah satu sebab paling biasa APK yang dimuatkan sisi gagal dipasang.
Langkah 3: Semakan Keserasian
Setelah manifes dihuraikan, sistem melakukan satu siri semakan keserasian:
- Versi SDK: Jika minSdkVersion apl lebih tinggi daripada tahap API peranti, pemasangan ditolak.
- Keserasian ABI: Jika APK mengandungi perpustakaan asli, sistem akan menyemak sama ada ia sepadan dengan seni bina CPU peranti. APK dengan hanya perpustakaan armeabi-v7a tidak akan dipasang pada peranti x86 sahaja.
- Ciri yang diperlukan: Jika apl mengisytiharkan ciri perkakasan yang diperlukan (seperti android.hardware.telephony), sistem mengesahkan peranti menyokong ciri tersebut.
- Storan yang tersedia: Sistem menyemak sama ada terdapat ruang kosong yang mencukupi untuk memasang apl, termasuk ruang untuk pustaka asli yang diekstrak dan fail DEX yang dioptimumkan.
Langkah 4: Pengesahan Tandatangan
Ini adalah salah satu langkah paling kritikal dalam proses pemasangan. Android mengesahkan tandatangan kriptografi APK untuk memastikan integriti dan ketulenannya.
Proses pengesahan bergantung pada skim penandatanganan yang ada:
Tandatangan V1 (Tandatangan JAR)
Sistem menyemak direktori META-INF/ untuk fail tandatangan (.SF, .RSA atau .DSA). Setiap fail dalam APK disahkan terhadap ringkasan yang disenaraikan dalam manifes. Ini perlahan kerana setiap fail mesti dicincang secara individu.
Tandatangan V2 (Skim Tandatangan APK v2)
Diperkenalkan dalam Android 7.0, skim ini menandakan keseluruhan APK sebagai gumpalan binari. Blok tandatangan dimasukkan antara direktori pusat ZIP dan rekod direktori akhir-pusat. Pengesahan adalah lebih pantas kerana ia beroperasi pada bait mentah tanpa perlu menyahmampat entri individu.
Tandatangan V3 (Putaran Kekunci)
Tersedia daripada Android 9.0, V3 memanjangkan V2 dengan sokongan untuk putaran kekunci. Ia termasuk struktur bukti putaran yang memautkan kunci tandatangan lama dan baharu, membolehkan pembangun menukar kunci tandatangan mereka sambil mengekalkan keserasian kemas kini.
Tandatangan V4 (Tambahan)
Android 11 memperkenalkan V4 untuk pemasangan tambahan. Ia menyediakan tandatangan berasaskan pokok Merkle yang membenarkan pengesahan blok individu semasa ia distrim ke peranti.
Jika pengesahan tandatangan gagal atas sebarang sebab, pemasangan akan dibatalkan serta-merta. Anda boleh menyemak tandatangan APK sebelum pemasangan menggunakan Alat Pengesah APK kami.
Kemas kini Padanan Tandatangan
Jika apl dengan nama pakej yang sama telah dipasang, sistem melakukan semakan tambahan: sijil tandatangan APK baharu mesti sepadan dengan sijil pemasangan sedia ada. Ini menghalang pihak yang berniat jahat daripada menggantikan apl yang sah dengan versi yang diusik. Jika tandatangan tidak sepadan, anda akan melihat ralat "Apl tidak dipasang: Pakej bercanggah dengan pakej sedia ada dengan nama yang sama."
Langkah 5: Pengesahan Pengguna
Untuk pemasangan sideloaded, sistem memaparkan dialog pengesahan pemasangan yang menunjukkan:
- Nama dan ikon apl (diekstrak daripada sumber APK)
- Membenarkan permintaan apl (pada versi Android yang lebih lama)
- Sama ada ini pemasangan baharu atau kemas kini
- Sebarang amaran tentang sumber apl atau potensi risiko
Pada Android 12 dan lebih baru, skrin pengesahan adalah lebih mudah kerana kebenaran masa jalan diberikan secara individu apabila apl pertama kali memerlukannya, bukannya pada masa pemasangan.
Langkah 6: Pengekstrakan dan Peletakan Fail
Setelah pengguna mengesahkan (atau untuk pemasangan Gedung Play, secara automatik), sistem mula mengekstrak dan meletakkan fail:
Storan APK
Fail APK itu sendiri disalin ke /data/app/[package-name]-[random]/base.apk. Untuk pemasangan APK berpecah, fail tambahan seperti split_config.arm64_v8a.apk diletakkan bersama APK asas. APK asal dalam folder Muat Turun tidak diubah suai atau dipadamkan.
Pengekstrakan Perpustakaan Asli
Jika APK mengandungi perpustakaan asli (dalam direktori lib/, ia diekstrak ke /data/app/[package-name]-[random]/lib/[abi]/). Pada versi Android yang lebih baharu, apl boleh memilih untuk memastikan perpustakaan asli dimampatkan dalam APK dan memuatkannya terus menggunakan android:extractNativeLibs="false", yang menjimatkan ruang storan.
Penciptaan Direktori Data
Sistem ini mencipta direktori data peribadi apl di /data/data/[package-name]/ (atau /data/user/0/[package-name]/ pada peranti berbilang pengguna). Direktori ini dimiliki oleh UID Linux unik yang diberikan kepada apl, memastikan tiada apl lain boleh mengaksesnya tanpa keistimewaan root.
Langkah 7: Pengoptimuman DEX
Langkah ini ialah tempat Android menukar kod bait apl kepada format yang dioptimumkan untuk perkakasan khusus peranti. Proses ini telah berkembang dengan ketara sepanjang sejarah Android:
Era Dalvik (Android 4.4 dan lebih awal)
Mesin maya Dalvik asal menggunakan kompilasi Just-In-Time (JIT). Semasa pemasangan, fail classes.dex telah dioptimumkan ke dalam fail ODEX yang mengandungi bytecode yang disahkan dan dioptimumkan. Ini agak pantas tetapi bermakna apl berjalan lebih perlahan pada masa jalan kerana kebanyakan kod masih ditafsirkan.
ART dengan AOT (Android 5.0 hingga 6.0)
Android Runtime (ART) menggantikan Dalvik dan memperkenalkan kompilasi Ahead-Of-Time (AOT). Semasa pemasangan, keseluruhan kod bait DEX telah disusun kepada kod mesin asli. Ini menjadikan apl berjalan lebih pantas tetapi meningkatkan masa pemasangan dan penggunaan storan dengan ketara. Sesetengah apl mengambil masa beberapa minit untuk dipasang.
Kompilasi Berpandukan Profil (Android 7.0+)
Android moden menggunakan pendekatan hibrid. Semasa pemasangan, hanya laluan permulaan kritikal yang disusun. Semasa pengguna menjalankan aplikasi, sistem mengumpul profil pelaksanaan yang mengenal pasti laluan kod yang kerap digunakan. Semasa penyelenggaraan melahu (biasanya semasa mengecas semalaman), sistem menyusun laluan panas ini kepada kod asli. Ini mengimbangi kelajuan pemasangan, penggunaan storan dan prestasi masa jalan.
Kod yang disusun disimpan dalam /data/dalvik-cache/ atau bersama APK sebagai fail .odex, .vdex dan .art. Fail .vdex mengandungi kod DEX yang disahkan, fail .odex mengandungi kod asli yang disusun dan fail .art mengandungi imej timbunan pra-dimulakan untuk permulaan yang lebih pantas.
Langkah 8: Pendaftaran Kebenaran
PackageManagerService mendaftarkan kebenaran dan komponen yang diisytiharkan apl dengan sistem:
- Kebenaran masa pemasangan (seperti INTERNET atau VIBRATE diberikan secara automatik tanpa interaksi pengguna).
- Kebenaran masa jalan (seperti CAMERA atau LOCATION didaftarkan tetapi tidak diberikan). Apl mesti memintanya semasa masa jalan.
- Penapis niat didaftarkan supaya sistem mengetahui apl mana yang boleh mengendalikan tindakan yang mana (seperti membuka URL atau berkongsi kandungan).
- Pembekal kandungan berdaftar dengan pihak berkuasa mereka supaya apl lain boleh menyoal mereka.
Langkah 9: Penyepaduan Sistem
Langkah terakhir menyepadukan apl ke dalam sistem Android:
- Kemas kini pangkalan data pakej: Pangkalan data pakej sistem (/data/system/packages.xml dikemas kini dengan maklumat apl baharu, termasuk UID, kebenaran dan pengisytiharan komponen yang diperuntukkan).
- Pemberitahuan pelancar: Pelancar skrin utama dimaklumkan tentang apl baharu supaya ia boleh memaparkan ikon apl.
- Siarkan: Sistem menghantar siaran PACKAGE_ADDED, membenarkan apl lain bertindak balas terhadap pemasangan baharu (contohnya, apl sandaran mungkin menjadualkan sandaran).
- Konteks SELinux: Fail apl dilabelkan dengan konteks keselamatan SELinux yang sesuai berdasarkan versi SDK sasarannya dan kebenaran yang diisytiharkan.
Mengapa Pemasangan Gagal
Memahami saluran paip pemasangan membantu mendiagnosis kegagalan biasa:
- "Ralat hurai": APK rosak, tidak lengkap atau mempunyai manifes yang tidak betul. Ini sering berlaku dengan muat turun yang tidak lengkap atau fail yang ditukar dengan tidak betul.
- "Apl tidak dipasang" (tandatangan tidak sepadan): Anda cuba mengemas kini apl dengan APK yang ditandatangani oleh kunci lain. Anda mesti menyahpasang versi sedia ada dahulu.
- "Storan tidak mencukupi": Ruang tidak mencukupi untuk APK, pustaka yang diekstrak dan output pengoptimuman DEX. Ruang sebenar yang diperlukan biasanya 2-3x saiz APK.
- "Pakej bercanggah dengan pakej sedia ada": Nama pakej yang sama tetapi tandatangan berbeza. Biasa apabila bertukar antara Gedung Play dan versi dimuatkan sisi.
- Turun taraf versi disekat: Secara lalai, Android menghalang pemasangan versi lama berbanding versi yang lebih baharu. ADB boleh mengatasi ini dengan adb install -d.
Pemasangan APK Pisah
Apabila memasang APK berpecah (daripada App Bundle), prosesnya sedikit berbeza. Sistem ini menggunakan API pemasangan berasaskan sesi:
- Sesi pemasangan baharu dibuat
- Setiap APK pecahan ditulis pada sesi
- Sesi ini komited, mencetuskan saluran paip pengesahan penuh
- Semua pemisahan mesti mempunyai nama pakej, kod versi dan sijil tandatangan yang sepadan
Ini ialah mekanisme yang digunakan oleh pemasang dan alatan XAPK seperti Penggabungan APKS kepada APK kami untuk mengendalikan pemasangan berbilang fail.
Pemasangan melalui ADB
Apabila anda menggunakan adb install, proses memintas pemasang grafik tetapi mengikut saluran paip dalaman yang sama. ADB berkomunikasi dengan perkhidmatan pengurus pakej melalui sambungan soket. Ia menyokong bendera tambahan yang tidak tersedia melalui GUI:
- -r: Gantikan apl sedia ada (benarkan pemasangan semula)
- -d: Benarkan penurunan taraf versi
- -g: Berikan semua kebenaran masa jalan serta-merta
- -t: Benarkan pemasangan APK ujian sahaja
- --install-multiple: Pasang APK berpecah dalam satu sesi
Perkara yang Berlaku Semasa Nyahpasang
Untuk kesempurnaan, berikut ialah perkara yang berlaku apabila apl dialih keluar:
- Proses apl dimatikan
- APK dan pustaka yang diekstrak dipadamkan daripada /data/app/
- Direktori data peribadi apl dialih keluar (melainkan pengguna memilih untuk menyimpan data)
- Fail cache DEX yang disusun dipadamkan
- Pangkalan data pakej dikemas kini
- Siaran PACKAGE_REMOVED dihantar
- Pelancar mengalih keluar ikon aplikasi
Harap maklum bahawa fail khusus apl pada storan luaran (/Android/data/[package]/ dan /Android/obb/[package]/ turut dipadamkan pada Android 10 dan lebih baharu, terima kasih kepada penguatkuasaan storan berskop).
Mengapa Memahami PackageManager Menjimatkan Masa Penyahpepijatan
Proses pemasangan Android ialah urutan semakan keselamatan, operasi fail dan penyepaduan sistem yang diatur dengan teliti. Setiap langkah mempunyai tujuan, daripada melindungi pengguna daripada apl yang diganggu kepada mengoptimumkan prestasi untuk perkakasan tertentu. Apabila pemasangan gagal, ralat biasanya menunjukkan langkah tertentu dalam saluran paip ini dan memahami proses membantu anda mendiagnosis dan menyelesaikan isu dengan cepat.
Memasang daripada Gedung Play, memuatkan sisi APK dengan tangan dan menolak binaan dengan ADB semua corong melalui saluran paip asas yang sama, yang memastikan setiap apl pada peranti anda telah disahkan, diletakkan dengan betul dan dioptimumkan untuk perkakasan anda.