本次HotPatch的研究主要基於一片文章:《Android-HotPatch在線熱補丁方案》和一個實踐,手機淘寶HotPatch項目。git
特性(Features):github
不用安裝,直接修改當前APK的邏輯。安全
缺陷(Defect):服務器
1,沒法更改程序版本號碼。app
2,每次程序啓動,都須要載入Patch。不能真正修改原始APK。框架
侷限(Confine):函數
平臺: API Level : [9,10]U[14-19] Android 2.3 - Android 4.X 中間不包含 Android3.X 阿里雲
CPU: ARM 支持, x86不支持。spa
系統: 阿里雲系統不支持。.net
虛擬機: 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