Goileo Lee

welcome to goileo's site

深沉的意志,恢宏的想象和炽热的情感


Amigo学习(一)解决使用中遇到的问题

写在开头

上一篇博文中对比了当下比较热门的热修复框架,并看到了Tinker 框架Demo 的展现过程。Tinker 的开源时间较晚,功能和文档更加完善。但不能对四大组件进行热更也是比较遗憾。不过我们发现另一个热修复开源框架Amigo,比起其他热修复框架,Amigo 可实现四大组件的添加。不过它也是有一些不足之处。

本文主要对 Amigo 的集成使用、实现过程和各模块大致功能做学习和简要总结。

优点:

  • 支持四大组件热更;
  • 集成简单,开发透明。

缺点:

  • 整包替换,消耗较大;

使用及避坑

官方使用文档:https://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

goileolee@foxmail.com