Android HotPatch 技術研究總結

gt3677 8年前發布 | 22K 次閱讀 Android開發 移動開發

來自: http://my.oschina.net/u/1396564/blog/614827


本次HotPatch的研究主要基于一片文章:《Android-HotPatch在線熱補丁方案》和一個實踐,手機淘寶HotPatch項目。

特性(Features):

     不用安裝,直接修改當前APK的邏輯。

缺陷(Defect):

    1,無法更改程序版本號碼。

    2,每次程序啟動,都需要載入Patch。不能真正修改原始APK。

局限(Confine):

    平臺: API Level :  [9,10]U[14-19]   Android 2.3 - Android 4.X  中間不包含 Android3.X 

    CPU: ARM 支持, x86不支持。

    系統: 阿里云系統不支持。

    虛擬機: Dalvik 支持, ART 不支持。

安全(Security):

     在主APK應用此技術后,當無防范措施時,極有可能給不安全代碼以可乘之機。特別注意!!!

        1,打包apk必須使用主app簽名文件簽名;

        2,主app對加載的patch apk做簽名和無篡改校驗

自手淘項目實踐的一個簡單HotPatch過程。


Hotpatch的工作流程是:

         1.實現一個從服務器端獲取Patch信息的接口(上傳本地客戶端版本等信息,服務器好根據這些信息來判斷是否有對應的Patch包),并將這個信息注入給HotpatchManager。

         2.檢測客戶端是否可以支持。(Android L和Android M)目前都不支持,最低支持2.3

         3.如果客戶端支持,那就調用第一步注入的Patch包獲取類,獲取到對應的Patch信息。下載Patch apk文件。

         4.校驗。獲取下載好的Patch apk md5簽名信息和服務器給的Patch信息的md5值是否一樣,然后還要校驗Patch apk和宿主apk簽名是否一致。加校驗是為了防止Patch apk被篡改,如果load進去了一個第三方的Patch,那就是引狼入室了。一定不能去掉校驗,不能去掉,不能去掉,重要的事情說三遍!!!

         5.校驗成功,就load Patch apk。


可提升的部分:

     1,獲取PATCH的接口可以增加通過推送來推動更新,這樣能夠增加實時性,出現嚴重問題時,直接熱修補。

     2,在程序入口和Patch程序下載完成后都需要需要啟動Patch過程。

     3,建議Patch框架程序中設置有維護PatchAPK和Patch列表的數據存儲,以及恢復機制。以便當Patch丟失或者損毀時,自動下載并Patch.

     4,Patch的下載存儲目錄,強烈建議放置到應用的私有目錄下,提升安全級別。防止被誤刪誤清。


BTW在使用過程中,如果主APK已經混淆,需要通過打包時的map.txt文件找到函數混淆后的名字。



參考:

《阿里巴巴HotPatch開源項目》github地址 https://github.com/alibaba/dexposed

Android-HotPatch在線熱補丁方案》原文的地址:http://www.jianshu.com/p/2a7d16ab29e8

“手機淘寶HotPatch實踐”《Android HotPatch系列之-項目介紹》 地址:http://my.oschina.net/fengcunhan/blog/487296








 本文由用戶 gt3677 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!