Amigo學習(一)解決使用中遇到的問題

GoileoLee發表於2018-01-31

轉載請註明出處:https://juejin.im/post/5a69c917f265da3e2b169d51

寫在開頭

上一篇博文中對比了當下比較熱門的熱修復框架,並看到了Tinker 框架Demo 的展現過程。Tinker 的開源時間較晚,功能和文件更加完善。但不能對四大元件進行熱更也是比較遺憾。不過我們發現另一個熱修復開源框架Amigo,比起其他熱修復框架,Amigo 可實現四大元件的新增。不過它也是有一些不足之處。

本文主要對 Amigo 的整合使用、實現過程和各模組大致功能做學習和簡要總結。

優點:

  • 支援四大元件熱更;
  • 整合簡單,開發透明。

缺點:

  • 整包替換,消耗較大;

使用及避坑

官方使用文件:github.com/eleme/Amigo
使用方法參見官方文件,寫得非常詳細。

筆者這裡是直接下載工程到本地,匯入到 Android Studio。
下載 --> 匯入 --> 執行

這一小節將簡述原始碼編譯過程中遇到的問題和解決辦法。

Q1. Connot resolve symbol 'Amigo'

Cannot resolve symbol 'Amigo'

不能解析符號'Amigo',看一下 app 的 build.gradle 檔案。

dependencies {
    compile project(":amigo-lib")
    ...
複製程式碼

引用了的啊~ 奇怪了
排查......

fix amigo-lib not found

發現 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 就崩潰。

Q2. testCoverageEnable

NoClassDefFoundError

NoClassDefFoundError,這應該是沒找到這個類的定義而報錯,那這個 Lorg/jacoco... 是個啥?

jacoco

Java程式碼覆蓋率庫 —— 用來測試程式碼覆蓋情況。
看一下 amigo-lib 的 build.gradle 檔案,在 debug 才會啟用。而我們編譯就是用的 assembleDebug.

buildTypes {
        debug {
            debuggable true
//            testCoverageEnabled = true
        }
    }
複製程式碼

既然它與熱修復無關,這裡不深究,遮蔽它就好了。

Q3. Host/A.java

cannot resolve symbol 'A'

這個個問題就觸及到我的知識盲區了,如果有大佬知道原因的,煩請告知。

host/A.java

main 中的類 DevActivity.java 引用 host 中的類 A.java 編譯報錯。

解決方案:從 host 中複製一份到 main 中...

Q4. assemblePatch

成功執行安裝後,這是主包。還需要生成補丁包,使用 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。

相關文章