【轉】android應用程式的安裝方式與原理

來源:互聯網
上載者:User

標籤:

 

 

四種安裝方式:

1.系統應用安裝――開機時完成,沒有安裝介面

2.網路下載應用安裝――通過market應用完成,沒有安裝介面

3.ADB工具安裝――沒有安裝介面。

4.第三方應用安裝――通過SD卡裡的APK檔案安裝,有安裝介面,由packageinstaller.apk應用處理安裝及卸載過程的介面。

 

應用安裝的流程及路徑 
應用安裝涉及到如下幾個目錄:        

system/app ---------------系統內建的應用程式,獲得adb root許可權才能刪除

data/app  ---------------使用者程式安裝的目錄。安裝時把                                                                                                      apk檔案複製到此目錄
data/data ---------------存放應用程式的資料
data/dalvik-cache--------將apk中的dex檔案安裝到dalvik-cache目錄下(dex檔案是dalvik虛擬機器的可執行檔,其大小約為原始apk檔案大小的四分之一)

安裝過程:

複製APK安裝包到data/app目錄下,解壓並掃描安裝包,把dex檔案(Dalvik位元組碼)儲存到dalvik-cache目錄,並data/data目錄下建立對應的應用資料目錄。

卸載過程:

刪除安裝過程中在上述三個目錄下建立的檔案及目錄。

 

安裝過程詳解

 

安裝應用的過程解析

一.開機安裝 
PackageManagerService處理各種應用的安裝,卸載,管理等工作,開機時由systemServer啟動此服務

(源檔案路徑:android\frameworks\base\services\java\com\android\server\PackageManagerService.java) 

PackageManagerService服務啟動的流程:

1.首先掃描安裝“system\framework”目錄下的jar包

2.掃描安裝系統system/app的應用程式

3.製造商的目錄下/vendor/app應用程式套件

4.掃描“data\app”目錄,即使用者安裝的第三方應用

5.掃描" data\app-private"目錄,即安裝DRM保護的APK檔案(一個受保護的歌曲或受保 護的視頻是使用 DRM 保護的檔案)

並且從該掃描方法中可以看出調用了scanPackageList()

private PackageParser.Package scanPackageList(File scanFile,int parseFlags, int scanMode, long currentTime)

跟蹤scanPackageList()方法後發現,程式經過很多次的if else 的篩選,最後判定可以安裝後調用了 mInstaller.install

mInstaller.install()  通過    

  LocalSocketAddress address = new LocalSocketAddress(

                "installd", LocalSocketAddress.Namespace.RESERVED);

指揮installd在C語言的檔案中完成工作

PackageManagerService小節 :

1)從apk, xml中載入pacakge資訊, 儲存到內部成員變數中, 用於後面的尋找. 關鍵的方法

    是scanPackageList().

2)各種查詢操作, 包括query Intent操作.
3)install package和delete package的操作. 還有後面的關鍵方法是installPackageList().

二、從網路上下載應用:

  下載完成後,會自動調用Packagemanager的安裝方法installPackage()   

   PackageManagerService類的installPackage()函數

   其中是通過PackageHandler的執行個體mhandler.sendMessage(msg)把資訊發給繼承Handler的類HandleMessage()方法......最後終於回到了和開機安裝一樣的地方.與開機方式安裝調用統一方法。

三、從ADB工具安裝 

   其入口函數源檔案為pm.java 

   (源檔案路徑:android\frameworks\base\cmds\pm\src\com\android\commands\pm\pm.java)

   其中\system\framework\pm.jar 包管理庫

   包管理指令碼 \system\bin\pm 解析

   其中的PackageInstallObserver obs = new PackageInstallObserver();             

   mPm.installPackage(Uri.fromFile(new File(apkFilePath)), obs, installFlags,

                    installerPackageName);   

四、從SD卡安裝

      系統調用PackageInstallerActivity.java(/home/zhongda/androidSRC/vortex-8inch-for-hoperun/packages/apps/PackageInstaller/src/com/android/packageinstaller)

進入這個Activity會判斷資訊是否有錯,然後調用

      private void initiateInstall()判斷是否曾經有過同名包的安裝,或者包已經安裝

通過後執行private void startInstallConfirm() 點擊OK按鈕後經過一系列的安裝

 

【轉】android應用程式的安裝方式與原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.