這里閱覽了很多網上關於修復的資料,一一貼在這里便於查看:
https://github.com/alibaba/AndFix 這是官方處 要了解使用,一定得看看這里。
http://www.jianshu.com/p/479b8c7ec3e3 如果你看不懂官方的,就看看這里。
http://blog.csdn.net/lpftobetheone/article/details/50435371 適合初步了解使用,一個簡單的Demo(這篇文章里面有對補丁只能加載一次問題的解決)
http://www.cnblogs.com/common1140/p/5287040.html 這一篇更貼近於我們的實際開發,如何使用修復- 產生 - 上傳補丁 -下載補丁
https://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a&scene=1&srcid=1106Imu9ZgwybID13e7y2nEi#wechat_redirect 這里是尋找原理的地方
下面說一下修復的幾種方式:
AndFix修復:
① 不支持YunOS
② 無法添加新類和新的字段
③ 需要使用加固前的apk制作補丁,但是補丁文件很容易被反編譯,也就是修改過的類源碼容易泄露。
④ 使用加固平台可能會使熱補丁功能失效(看到有人在360加固提了這個問題,自己還未驗證)。
⑤ andfix不支持布局資源等的修改
⑥ 官網:AndFix supports Android version from 2.3 to 7.0, both ARM and X86 architecture, both Dalvik and ART runtime, both 32bit and 64bit.
⑦ 應用patch不需要重啟。但由於從實現上直接跳過了類初始化,設置為初始化完畢,所以像是靜態函數、靜態成員、構造函數都會出現問題,復雜點的類Class.forname很可能直接就會掛掉。
⑧ AndFix的一個潛在問題:
加載一次補丁后,out.apatch文件會copy到getFilesDir目錄下的/apatch文件夾中,在下次補丁更新時,會檢測補丁是否已經添加在apatch文件夾下,已存在就不會復制加載sdcard的out.apatch。
源碼:
public void addPatch(String path) throws IOException { File src = new File(path); File dest = new File(mPatchDir, src.getName()); if(!src.exists()){
throw new FileNotFoundException(path); }
if (dest.exists()) {
Log.d(TAG, "patch [" + path + "] has be loaded."); return; }
FileUtil.copyFile(src, dest);// copy to patch's directory Patch patch = addPatch(dest); if (patch != null) {
loadPatch(patch); }
}