Android應(yīng)用程序安裝過(guò)程源代碼分析

Android應(yīng)用程序安裝過(guò)程源代碼分析

ID:41008644

大小:84.03 KB

頁(yè)數(shù):19頁(yè)

時(shí)間:2019-08-13

Android應(yīng)用程序安裝過(guò)程源代碼分析_第1頁(yè)
Android應(yīng)用程序安裝過(guò)程源代碼分析_第2頁(yè)
Android應(yīng)用程序安裝過(guò)程源代碼分析_第3頁(yè)
Android應(yīng)用程序安裝過(guò)程源代碼分析_第4頁(yè)
Android應(yīng)用程序安裝過(guò)程源代碼分析_第5頁(yè)
資源描述:

《Android應(yīng)用程序安裝過(guò)程源代碼分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)

1、Android系統(tǒng)在啟動(dòng)的過(guò)程中,會(huì)啟動(dòng)一個(gè)應(yīng)用程序管理服務(wù)PackageManagerService,這個(gè)服務(wù)負(fù)責(zé)掃描系統(tǒng)中特定的目錄,找到里面的應(yīng)用程序文件,即以Apk為后綴的文件,然后對(duì)這些文件進(jìn)解析,得到應(yīng)用程序的相關(guān)信息,完成應(yīng)用程序的安裝過(guò)程,本文將詳細(xì)分析這個(gè)過(guò)程。?????應(yīng)用程序管理服務(wù)PackageManagerService安裝應(yīng)用程序的過(guò)程,其實(shí)就是解析析應(yīng)用程序配置文件AndroidManifest.xml的過(guò)程,并從里面得到得到應(yīng)用程序的相關(guān)信息,例如得到應(yīng)用程序的組件Activity、Service、BroadcastReceiver和ContentProv

2、ider等信息,有了這些信息后,通過(guò)ActivityManagerService這個(gè)服務(wù),我們就可以在系統(tǒng)中正常地使用這些應(yīng)用程序了。?????應(yīng)用程序管理服務(wù)PackageManagerService是系統(tǒng)啟動(dòng)的時(shí)候由SystemServer組件啟動(dòng)的,啟后它就會(huì)執(zhí)行應(yīng)用程序安裝的過(guò)程,因此,本文將從SystemServer啟動(dòng)PackageManagerService服務(wù)的過(guò)程開(kāi)始分析系統(tǒng)中的應(yīng)用程序安裝的過(guò)程。?????應(yīng)用程序管理服務(wù)PackageManagerService從啟動(dòng)到安裝應(yīng)用程序的過(guò)程如下圖所示:?????下面我們具體分析每一個(gè)步驟。?????Step1.Syst

3、emServer.main?????這個(gè)函數(shù)定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中:viewplain1.public?class?SystemServer??2.{??3.????......??4.??5.????native?public?static?void?init1(String[]?args);??6.??7.????......??8.??9.????public?static?void?main(String[]?args)?{??10.????????.....

4、.??11.??12.????????init1(args);??13.??14.????????......??15.????}??16.??17.????......??18.}???????SystemServer組件是由Zygote進(jìn)程負(fù)責(zé)啟動(dòng)的,啟動(dòng)的時(shí)候就會(huì)調(diào)用它的main函數(shù),這個(gè)函數(shù)主要調(diào)用了JNI方法init1來(lái)做一些系統(tǒng)初始化的工作。?????Step2.SystemServer.init1?????這個(gè)函數(shù)是一個(gè)JNI方法,實(shí)現(xiàn)在?frameworks/base/services/jni/com_android_server_SystemServer.cpp文件中:

5、viewplain1.namespace?android?{??2.??3.extern?"C"?int?system_init();??4.??5.static?void?android_server_SystemServer_init1(JNIEnv*?env,?jobject?clazz)??6.{??7.????system_init();??8.}??9.??10./*?11.?*?JNI?registration.?12.?*/??13.static?JNINativeMethod?gMethods[]?=?{??14.????/*?name,?signature,?func

6、Ptr?*/??15.????{?"init1",?"([Ljava/lang/String;)V",?(void*)?android_server_SystemServer_init1?},??16.};??1.??2.int?register_android_server_SystemServer(JNIEnv*?env)??3.{??4.????return?jniRegisterNativeMethods(env,?"com/android/server/SystemServer",??5.????????????gMethods,?NELEM(gMethods));??6.}?

7、?7.??8.};?//?namespace?android???????這個(gè)函數(shù)很簡(jiǎn)單,只是調(diào)用了system_init函數(shù)來(lái)進(jìn)一步執(zhí)行操作。?????Step3.?libsystem_server.system_init?????函數(shù)system_init實(shí)現(xiàn)在libsystem_server庫(kù)中,源代碼位于frameworks/base/cmds/system_server/library/system_init.cpp文件中

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。