最近需要在項目中使用熱修復框架,在這里以美團的Robust為主寫一篇文章總結一下學習的過程。
一直認為要學習一個框架的原理,首先需要讓他跑起來,從效果反推回去,這樣更容易理解。
一、美團Robust的使用
首先我們在編寫代碼前需要做如下准備
配置文件讀寫權限,6.0以上需要手動獲取
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
在project的gradle文件中編寫如下代碼
在module的gradle文件中編寫如下代碼
同時我們將從github上下載的美團Robust的例子中的robuts.xml復制到我們的項目中
將下面兩個地方改為我們的包名,其他地方不建議在新手測試的時候進行修改。
同時要記得將App的混淆打開,原因在后面會提到
到目前為止,我們可以開始代碼方面的編寫了
首先給大家看一下目錄結構
首先我們看MainActivity的代碼
界面很簡單,一個TextView和兩個Button,圖片在后面
這里面重要的就是這個newPatchExecutor,傳入了我們寫的PatchManpulateImp,和一個回調。
我們接下來看PatchManpulateImp這個類。
這里我們可以將美團的PatchManpulateImp類復制下來,稍微修改一下就可以了
這里改為“你的包名”+PatchesInfoImpl即可
RobustActivity里面的代碼很簡單如下
這里全部完成后我們可以開始生成apk了,這里要注意要生成帶簽名的apk-release。
這里要注意的是生成帶簽名的release apk時,要同時勾選v1,v2。不然一會通過adb命令想genymotion安裝App時會報錯。
生成Apk后我們通過adb命令將apk安裝到模擬器上,這里有的同學可能發現adb無法使用,需要在系統中設置環境變量,adb工具在androidsdk中自帶,可以在sdk中去找。
接下來是補丁生成的流程
生成apk后我們可以看到Robust給我們生成了如下文件。新建一個與src同級的文件夾robust,將這兩個文件復制過去,這里要注意我們在前面如果沒配置混淆的話,這兩個文件是不會出現的。
將我們前面的gradle文件打開,修改如下
然后修改RobustActivity中的代碼如下
在terminal中調用如下命令
gradlew clean assembleRelease --stacktrace --no-daemon
生成補丁包
這里會build失敗,不影響,有下列即為成功,我們可以看到這里已經生成了補丁包
現在我們把補丁包push到我們的模擬器中
這里面我們push jar包到我們在PatchManpulateImp中設置的地址的前一級
現在我們開始運行程序,先點擊加載jar包,這里要注意Anroid6.0以上要手動開啟讀取寫入權限。
這樣我們就成功了。若是運行失敗,建議去看一看打印出的異常,具體分析原因。
二、小結
在接下來的分析中,將會分析美團Robust的原理。