Android HotPatch 技術研究總結
來自: 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