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

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

寫在開頭

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

本文主要對 Amigo 的集成使用、實現過程和各模塊大體功能作學習和簡要總結。github

優勢:bash

  • 支持四大組件熱更;
  • 集成簡單,開發透明。

缺點:app

  • 整包替換,消耗較大;

使用及避坑

官方使用文檔:github.com/eleme/Amigo
使用方法參見官方文檔,寫得很是詳細。框架

筆者這裏是直接下載工程到本地,導入到 Android Studio。
下載 --> 導入 --> 運行工具

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

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。

相關文章
相關標籤/搜索