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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,408评论 4 371
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,690评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,036评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,726评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,123评论 3 296
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,037评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,178评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,964评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,703评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,863评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,333评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,658评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,374评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,195评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,988评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,167评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,970评论 2 279

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,598评论 25 707
  • Tinker使用 前言 写在前面的话,在上家公司一直在主导组件框架的开发,所以对Android领域组件化,热更新的...
    徐正峰阅读 1,817评论 6 6
  • 前言 在 Tinker学习计划(1)-Tinker的集成 这边文章中我们首先学习了如何去集成Tinker热更新框架...
    徐正峰阅读 1,916评论 0 3
  • 不停的挖坑不懂是埋葬自己,还是想上刨出路来…看着倒数的逼近,焦虑狂躁,什么都没有准备清楚,不懂如何把这些内容存入空...
    兰蓝天阅读 205评论 0 0
  • 在lr中默认使用{}的字符串称之为参数,参数的最大优点就是在lr函数中可以直接使用,不需要定义 变量是C语言中的定...
    不步步不阅读 190评论 0 1