这两天学习Sophix热修复碰到很多问题,最后也成功,最后总结下经验
- 与其它的区别
位置
官方地址
创建一个项目
对应的配置参数
配置as
在build.gradle中添加依赖包
allprojects {
repositories {
jcenter()
maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
}
}
compile 'com.aliyun.ams:alicloud-android-hotfix:3.2.1'
在AndroidManifest.xml中配置
<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" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />
权限
<! -- 网络权限 -->
<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"/>
在Application中初始化
/**
* 热修复初始化
*/
private void initHotfix() {
String appVersion;
try {
appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
Log.i("jam",appVersion);
} catch (Exception e) {
appVersion = "1.1";
}
SophixManager.getInstance().setContext(this)
.setAppVersion(appVersion)
.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) {
// 表明补丁加载成功
Log.i("jam",PatchStatus.CODE_LOAD_SUCCESS+"");
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
// 建议: 用户可以监听进入后台事件, 然后应用自杀
Log.i("jam",PatchStatus.CODE_LOAD_RELAUNCH+"");
} else if (code == PatchStatus.CODE_LOAD_FAIL) {
// 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
// SophixManager.getInstance().cleanPatches();
Log.i("jam",PatchStatus.CODE_LOAD_FAIL+"");
} else {
// 其它错误信息, 查看PatchStatus类说明
Log.i("jam",code+"----"+info);
}
}
}).initialize();
SophixManager.getInstance().queryAndLoadNewPatch();
}
以上已经配置完相关的,接下来运行一个带有bug的apk和一个改好的apk
需要去官网下载生成jar包的工具和本地测试的apk
工具地址
- 生成jar
- 会生成 sophix-patch.jar 同名字的jar,在本地使用官方提供的工具测试
- 创建补丁版本
- 最后
以上是所有这两天相关的东西,爬坑:补丁版本号与versionName版本号保持一致才会有效,手机的绝对路径(我的是华为):/storage/emulated/0/。第一次成功后首页地图定位图标会换了,第二次是对的,没找出什么原因希望以后会碰到或者可以学习到。