先看一下比较热门的各大厂商热修复框架对比:
Hotfix最新版本spofix是首款非侵入式框架:下面是百度内容
假设大家都想要把用户代码塞到一个框架里。侵入式的做法就是要求用户代码“知道”框架的代码,表现为用户代码需要继承框 架提供的类。非侵入式则不需要用户代码引入框架代码的信息,从类的编写者角度来看,察觉不到框架的存在。
废话不多说直接看代码实现效果:
1.直接在项目跟modle添加远程库:
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
整个截图:
2.然后在app的build.gradle里面添加坐标版本依赖:
-
compile'com.aliyun.ams:alicloud-android-hotfix:3.1.3'
import android.app.Application; import com.taobao.sophix.PatchStatus; import com.taobao.sophix.SophixManager; import com.taobao.sophix.listener.PatchLoadStatusListener; /** * Created by Administrator on 2017/10/23. * code: 1 补丁加载成功 code: 6 服务端没有最新可用的补丁 code: 11 RSASECRET错误,官网中的密钥是否正确请检查 code: 12 当前应用已经存在一个旧补丁, 应用重启尝试加载新补丁 code: 13 补丁加载失败, 导致的原因很多种, 比如UnsatisfiedLinkError等异常, 此时应该严格检查logcat异常日志 code: 16 APPSECRET错误,官网中的密钥是否正确请检查 code: 18 一键清除补丁 code: 19 连续两次queryAndLoadNewPatch()方法调用不能短于3s */ public class A extends Application { @Override public void onCreate() { SophixManager.getInstance().setContext(this) .setAppVersion("1.0.0")//你的后台版本 .setAesKey(null) .setEnableDebug(true) .setPatchLoadStatusStub(new PatchLoadStatusListener() { @Override public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) { // 补丁加载回调通知 if (code == PatchStatus.CODE_LOAD_SUCCESS) { // 表明补丁加载成功 } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) { // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启; // 建议: 用户可以监听进入后台事件, 然后调用killProcessSafely自杀,以此加快应用补丁,详见1.3.2.3 } else { // 其它错误信息, 查看PatchStatus类说明 } } }).initialize(); // queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中 super.onCreate(); SophixManager.getInstance().queryAndLoadNewPatch(); } }
<! -- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<! -- 外部存储读权限,调试工具加载本地补丁需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
READ_EXTERNAL_STORAGE
权限属于Dangerous Permissions,仅调试工具获取外部补丁需要,不影响线上发布的补丁加载,调试时请自行做好 android6.0以上的运行时权限获取。
在AndroidManifest.xml
中间的application
节点下添加如下配置:
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />