轉載請註明出處:https://juejin.im/post/5a69c917f265da3e2b169d51java
上一篇博文中對比了當下比較熱門的熱修復框架,並看到了Tinker 框架Demo 的展示過程。Tinker 的開源時間較晚,功能和文檔更加完善。但不能對四大組件進行熱更也是比較遺憾。不過咱們發現另外一個熱修復開源框架Amigo,比起其餘熱修復框架,Amigo 可實現四大組件的添加。不過它也是有一些不足之處。git
本文主要對 Amigo 的集成使用、實現過程和各模塊大體功能作學習和簡要總結。github
優勢:bash
缺點:app
官方使用文檔:github.com/eleme/Amigo
使用方法參見官方文檔,寫得很是詳細。框架
筆者這裏是直接下載工程到本地,導入到 Android Studio。
下載 --> 導入 --> 運行工具
這一小節將簡述源碼編譯過程當中遇到的問題和解決辦法。post
不能解析符號'Amigo',看一下 app 的 build.gradle 文件。學習
dependencies {
compile project(":amigo-lib")
...
複製代碼
引用了的啊~ 奇怪了
排查......測試
發現 github 上做者對這個問題進行過修復,不過我這裏仍是出現了。具體狀況查了好久不知因此。
那就換個思路解決吧。
單獨編譯 Amigo-lib ,會生成 aar 包。
Terminal --> gradlew :amigo-lib:assembleDebug
dependencies {
// compile project(":amigo-lib")
compile (name:'amigo-lib-debug', ext:'aar')
...
複製代碼
將 aar 拷貝到 app moudle 的 libs 中,在 build.gradle 添加引用。再編譯,就不會報錯了。
不過,編譯沒問題了,一運行 APP 就崩潰。
NoClassDefFoundError,這應該是沒找到這個類的定義而報錯,那這個 Lorg/jacoco... 是個啥?
Java代碼覆蓋率庫 —— 用來測試代碼覆蓋狀況。
看一下 amigo-lib 的 build.gradle 文件,在 debug 纔會啓用。而咱們編譯就是用的 assembleDebug.
buildTypes {
debug {
debuggable true
// testCoverageEnabled = true
}
}
複製代碼
既然它與熱修復無關,這裏不深究,屏蔽它就行了。
這個個問題就觸及到個人知識盲區了,若是有大佬知道緣由的,煩請告知。
main 中的類 DevActivity.java 引用 host 中的類 A.java 編譯報錯。
解決方案:從 host 中複製一份到 main 中...
成功運行安裝後,這是主包。還須要生成補丁包,使用 assemblePatch。
task preparePatch(dependsOn: "assemblePatch") << {
deletePatchApk()
runCmd("adb push ${getPatchApk()} /sdcard/${getPatchApkName()}")
}
複製代碼
這裏會將 patchApk 用 adb 經過數據線發送到手機存儲空間中。不過筆者的 adb 工具沒有成功,需手動拷貝到手機存儲中。
再次啓動運行便可~
Amigo 在 Github 上的人氣看起來不如其餘熱更框架,不過筆者認爲 Amigo 應該在站在巨人的肩膀上,集成了其餘框架的一些優勢,補充了不足。
在國內全民熱更的大環境下,Amigo 的做者對其也是報有很大的但願,在 wiki 中如是說:
HotFix只是做爲Amigo feature的一小塊,其實Amigo真正要解決的是Android APP動態更新的問題。
不過要想成爲商業級的框架,還須要一些努力吧。
推薦閱讀: Android 熱修復 - 各框架原理學習及對比
Amigo 學習(二)類和資源是怎麼加載的?
記錄在此,僅爲學習! 感謝您的閱讀!歡迎指正! 歡迎加入 Android 技術交流羣,羣號:155495090。