因此,我一直在圍繞AOSP進行挖掘,試圖找出如何安裝android應用程序。到目前爲止,這是我在哪裏:瞭解如何通過PackageManagerService安裝android應用程序
apk文件將從PackageInstallerActivity發送到InstallAppProgress,它將在其中調用PackageManager方法installPackage()。
先前對PackageManager的調用被定向到PackageManagerService,帶着AIDL的魔力(花了一些時間讓我理解這一點)。
在覈心方法installPackageWithVerification()的PackageHandler的一個實例被創建和消息傳遞發生在魯棒的方式與一羣的像INIT_COPY狀態碼的使用,PACKAGE_VERIFIED等
基於在處理程序中接收的消息的狀態代碼上進行操作。開始INIT_COPY - 將包添加到掛起的安裝列表中,並調用代碼爲的消息MCS_BOUND。
這複製了從apk文件中提取的基本文件,如數據文件。
在通道的某個地方發出帶有標記CHECK_PENDING_VERIFICATION的消息,該消息從待處理列表中解析條目,尤其是AndroidManifest文件。驗證和驗證包裹簽名,包裝名稱等等。
然後調用updateSettingLI()這反過來又產生3個更重要的函數調用。
- moveDexFilesLI()
- setPermissionsLI() - 提取目錄資源/文件,resources.arsc,的Manifest.xml
- updatePermissionsLPw() - 電話grantPermissionLPw - 和增加的組識別從清單文件中解析出的權限
在此時間點,Package對象具有各自的groupid,因此unti我現在能夠基本弄清楚權限是如何轉換成groupids的。請原諒我的咆哮,我認爲這可能對某些用戶來說是非常有用的,特別是scanPackageLI方法,它很容易在代碼中迷失方向。
現在的實際問題,我知道比喻在android每個應用程序不過是一個Linux進程控制自己的uid和gid。我們從上面的gids中知道如何從PackageManagerService轉換到linux進程。
我知道「installd」在安裝過程中也起着至關重要的作用。 但我無法找到正在安裝的軟件包(Linux進程)設置權限或訪問權限(根據linux teminology)的鏈接?
請幫助我。
有沒有什麼好的博客或者與此相關的東西,會給出更詳細的信息,如果是的話請分享。 –
http://coltf.blogspot.it/p/android-os-processes-and-zygote.html這是一個很好的起點 –