android 热更新 方案,与Android热更新方案Amigo的初次接触

9e191262cce32049fa54670f7c6bcc7b.png

主要记下引入Amigo的过程。

修复前:点击文字没有跳转

修复后:点击文字可以跳转(增加了Activity和布局文件)

242f65ed33737398953baa58ac644b4c.gif

其实热更新最重要的是不需要重新安装apk,有的甚至不需要重启app,就可以更新代码或者资源文件。

我对比目前的几大主流的热更新方案,感觉Amigo是目前最适合我的。

对比项

Amigo

Tinker

nuwa/QZone

AndFix

Dexposed

类替换

yes

yes

yes

no

no

lib替换

yes

yes

no

no

no

资源替换

yes

yes

yes

no

no

全平台支持

yes

yes

yes

yes

no

即时生效

optional

no

no

yes

yes

性能损耗

较小

较大

较小

较小

补丁包大小

较大

较小

较大

一般

一般

开发透明

yes

yes

yes

no

no

复杂度

较低

较低

复杂

复杂

gradle支持

yes

yes

yes

no

no

接口文档

丰富

丰富

一般

一般

较少

占Rom体积

较大

较大

较小

较小

较小

成功率

100%

较好

很高

一般

一般

上表来自Amigo的Github主页,觉得100%的成功率起到了很好的宣传效果!

tinker的功能非常强大,基本除了AndroidManifest.xml文件和tinker本身少数几个类之外,其他内容都能替换,包括布局、资源。不足之处在于其首次配置稍有点复杂,上手难度较AndFix稍高一些。

AndFix不可以修复Application的onCreate(),而且现在已经升级为SopHix,SopHix需要使用阿里的平台,每月免费5万台。目测SopHix的功能很强大,但是要接入阿里……

Robust是美团的方案,但是由于进行了代码侵入,对运行效率、方法数、包体积都有影响,文件方法数变多,企业级应用可能会涉及到65535的问题。

Amigo是下载一个完整的APK(所以包有点大,当然也可以做差分包),支持增加Activity,支持修改资源文件。

重点是接入方便。

在 project 的 build.gradle中:

buildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:2.3.0'

......

classpath 'me.ele:amigo:0.6.8'

}

}

复制代码

对了,目前Amigo不支持gradle3.0,我用的是2.3.0。

在module的 build.gradle

apply plugin: 'me.ele.amigo'

android {

...

}

dependencies {

...

compile 'me.ele:amigo-lib:0.6.7'

}

//if you don't want use amigo in dev, set this value to true

//you can define this extension in your mybuild.gradle as to distinguish debug & release build

amigo {

disable false //default false

autoDisableInInstantRunMode true // default false

}

复制代码

调用更新(新的apk已经在本地)

var file = File(Environment.getExternalStorageDirectory().path + File.separator + "test.apk")

if(file.exists()){

Amigo.workLater(this, file) {

if(it){

toast("更新成功!")

val intent = packageManager.getLaunchIntentForPackage(packageName)

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

startActivity(intent)

android.os.Process.killProcess(android.os.Process.myPid())

}

}

}

复制代码

最后是重启App。

我调用Amigo.work(context, patchApkFile);方法app不会自动重启,需要手动点击图标启动。

在Amigo的插件中,替换原有 Application的,所以Amigo支持修改Application。

Amigo替换了整个dex文件,所以保证了成功率。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值