APP熱修復的概念:app
APP修復是針對修復app中的bug場景來定義的。當咱們已上線的app出現bug的時候,咱們想在用戶不知情的狀況下修復這個bug,那麼就會用到熱修復。框架
APP熱修復的實現原理:ide
首先,生成新版本的apk與舊版本的apk的差別補丁包文件;測試
其次,使用熱修復框架的Api在Application中去嘗試加載指定路徑的補丁差別包;gradle
最後,只須要將補丁差別包寶貝到對應路徑,代開有bug的App,在Applcation建立的時候就會將補丁包文件加載到內存中而且替換對應的方法。this
經常使用的熱修復框架---阿里的AndFixspa
使用步驟:code
首先,在gradle文件中依賴AndFix類庫,而且在Application的onCreate方法中編寫加載patch文件的代碼:blog
//經反覆測試,0.5的版本不如0.4的版本穩定,所以咱們用穩定的版本 //compile 'com.alipay.euler:andfix:0.5.0@aar' compile 'com.alipay.euler:andfix:0.5.0@aar'
添加加載patch文件的代碼:ip
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); PatchManager patchManager = new PatchManager(this); String appVersion = "1.0";//當前app的版本號 patchManager.init(appVersion); //開始加載patch文件 patchManager.loadPatch(); File patchFile = new File(Environment.getExternalStorageDirectory(),"out.apatch"); try { if(patchFile.exists()){ //指定patch文件的路徑 patchManager.addPatch(patchFile.getAbsolutePath()); } } catch (IOException e) { e.printStackTrace(); } } }
咱們將2個apk文件和簽名文件一同複製到AndFix-master\tools\apkpatch-1.0.3目錄下,使用apkpatch命令產生出patch文件,命令以下:
apkpatch -f fix.apk -t bug.apk -o bug_fix -k test.jks -p 111111 -a test -e 111111
將patch文件放到指定的路徑下,運行帶有bug的應用,從新啓動application,就會自動覆蓋原來的帶有bug的代碼。
注:沒必要擔憂patch文件會被用戶誤刪,由於patch文件已經複製到了應用的包下。
熱修復只是用於bug層級的修復,阿里的AndFix只是用於方法的修復,不能對類和Android四大組件進行修復。並且熱修復具備不穩定性,並且沒法適配全部的手機。