作為一個日活躍幾萬甚至幾十萬的app,一旦線上出現了個問題,比如ANR,算法公式錯了等等,經常被用戶吐槽的無地自容,然后我們沒日夜的拼命加班,修bug,發版等上線,最后用戶手動更新版本,好不容易解決了,還被吐槽這個體驗好差等等,最后損失了不少用戶。
一直以來想找一種方法能和IOS一樣能在用戶無感的情況下自動實現版本更新,使得不知不覺中問題就解決了,這幾天抽空去研究了下,發現有很多家公司已經開源出來了,如阿里的Andfix,騰訊QQ空間團隊的nuwa,攜程的DynamicAPK 等等,這里我對Andfix的使用做個簡單的記錄。
AndFix,全稱是Android hot-fix。是阿里開源的一個Android熱補丁框架,允許APP 在不重新發布版本的情況下修復線上的bug,注意,只是修復bug,并不能對資源文件 做出修改,不能添加新類。
使用:
1、 添加依賴
compile 'com.alipay.euler:andfix:0.4.0@aar'
2、在Application中對PatchManager進行初始化(PS:別忘了在清單文件中注冊)
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
patchManager.loadPatch();
其中appversion可以這樣獲得
String appversion = getPackageManager().getPackageInfo(getPackageName(),0).versionName;
3、 初始化完成后 ,就要寫自己的加載補丁的邏輯代碼了 ; 比如啟動app后,去自己服務器獲取(mac端搭建web服務器),看是否需要更新補丁,如果有并且下載到本地完畢后,執行下邊代碼,就會將補丁生效了 .
patchManager.addPatch(filePath);
到這步其實已經都完成了,那么該怎么生成補丁文件呢?
4、生成.apatch補丁文件
下載補丁生成工具 : apkpatch , 然后執行命令:
./apkpatch.sh
-f diff_new.apk //修復完畢的apk文件
-t diff_old.apk //有bug的apk文件
-o ./ //補丁文件輸出路徑 : 當前目錄
-k key.keystore // 簽名文件
-p 123456 //簽名文件密碼
-a diffpatch //簽名文件alias
-e 123456 //簽名文件alias的密碼
執行后,會生成幾個文件,其中補丁文件就是以.apatch結尾的,放到服務器讓app去下載更新;
使用過程中,對布局文件、類的增減等情況多做了補丁化處理,結果這幾個更新都沒成功,換句話說Andfix并不能進行增量更新,但是有點值得慶幸的是,app補丁更新后無需重啟就可實現app的修改。
接下去可能會對Andfix的原理進行研究。Andfix源碼