Android HotPatch 技术研究总结

gt3677 5年前

来自: 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