天天看點

如何實作Android應用的靜默安裝

在很多情況下,我們需要在Android系統上實作應用程式的靜默安裝,但很不幸的是,從Android 1.5之後Google就不再提供靜默安裝的接口了。

       下面介紹一種比較簡單的靜默安裝實作方法。

       原理:

       使用隐藏的系統API——installPackage。該方法在1.5版之後的android SDK 中是看不見的,檢視源碼可以看到它設定了@hide屬性,但在實際的運作包framework.jar中是存在的,是以隻要能編譯通過,安裝到系統後是可以正常運作的。

       步驟:

       1. 從模拟器System\framework目錄下提取framework.jar

       2. 将framework.jar字尾名改為zip,解壓後提取其中的classes.dex檔案

       3. 用dex2jar工具将classes.dex轉成classes.dex.dex2jar.jar(注意新版本的dex2jar工具無法轉換Android2.2的framework,建議使用dex2jar-0.0.7.8-SNAPSHOT,該工具可以從google官方站上下載下傳到)

       4. 将classes.dex.dex2jar.jar改名為classes.dex.dex2jar.zip解壓取出android/content/pm/目錄下的PackageManager.class,IPackageInstallObserver.class,IPackageDeleteObserver.class及相關的幾個class檔案備用

       5. 找到android-sdk目錄下的android.jar,改名為android.zip(注意改名前先備份一下),解壓後将步驟4中取得的class檔案覆寫到android對應的目錄下,重新壓縮成android.zip,并改名為android.jar

       6. 這個時候你的android.jar已經是一個更新過的SDK了,重新打開eclipse工程,你已經可以調用方法:

       void android.content.pm. PackageManager .installPackage( Uri  packageURI,  IPackageInstallObserver observer, int flags,  String  installerPackageName)

       具體調用方法參考F2

       說明:

       1. 由于更改android.jar可能導緻重新加載SDK失敗,覆寫之前切記備份一下

       2. 實際上該過程可以調用到任何hide屬性的API,本文為了影響最小,隻覆寫了installPackage相關的class

       3. 下載下傳android源碼重新編譯SDK也可以實作調用隐藏API,不過比較麻煩

       4. 以上過程在android2.2版本實施通過,其他版本理論上也可以,不過我沒試過