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。

相关文章
相关标签/搜索