android 熱修復框架目前瞭解的有qq空間分包方案的HotFix 和Nuwa,還有阿里開源的AndFix和Dexposed.
android
https://github.com/dodola/HotFixgit
https://github.com/jasonross/Nuwagithub
https://github.com/alibaba/AndFixwindows
https://github.com/alibaba/dexposedapp
關於項目的原理能夠看下兩位大神的博客學習下:
框架
http://blog.csdn.net/lmj623565791/article/details/49883661 eclipse
http://blog.csdn.net/qxs965266509/article/details/50390325工具
因爲AndFix只能更改類中的方法實現,而Dexposed目前還不支持Art(5.0在測試中),學習
因此研究了一下HotFix及Nuwa的實現(dalvik)。測試
HotFix及Nuwa的實現原理基本一致,都是在Application中將patch包寫到第一個dex文件中而後加載修改後的類。因爲Nuwa的patch包按照文檔說明的流程本人未實現,因此着重研究了下HotFix的實現。
HotFix 文檔中只是給出了一個解決混淆的方案,未註明流程,下面是通過測試成功的一個打混淆patch包的流程:
一、在第一次打包apk的時候須要在混淆文件中加入一行代碼,輸出混淆先後的映射:
mapping.txt
二、打包apk成功後,會在build\outputs\mapping下生成一個mapping文件,此文件須要保持,之後打包混淆patch須要此文件。
三、將修改的類使用eclipse打包jar(注:修改的類不能是在Application中初始化的類)
四、使用android-sdk-windows\tools\proguard\bin\proguardgui.bat 工具對jar包進行混淆
混淆配置文件就使用打包apk時的配置文件,工具的Obfuscation--Apply mapping選項選中,並將打包apk生成的mapping文件引入,執行jar的混淆操做。
五、混淆jar包執行 dx --dex --output=生成的dex包 混淆包 ,生成的dex包就是咱們須要的path_dex.jar