一、引入所需要的依赖:
1.在工程根目录的build.gradle中加入如下代码
allprojects {
repositories {
jcenter()
maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
}
}
2.在工程中app目录下的build.gradle中加入jar包依赖:
dependencies {
api fileTree(include: ['*.jar'], dir: 'libs')
api 'com.aliyun.ams:alicloud-android-hotfix:+'
}
二、在app目录的AndroidManifest.xml中application标签中配置appkey:
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="AppKey" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="AppSecret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="AppKey" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="AppSecret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />
三、在app目录下AndroidManifest.xml中下配置权限:
<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" />
四、在app目录下的proguard-rules.pro中加入混淆代码:
-keepclassmembers class com.jcgroup.ease.EaseApplication {
public <init>();
}
-keep class com.jcgroup.ease.SophixStubApplication$RealApplicationStub
五、创建一个继承SophixApplication的Application类:
/**
* hotfix专用Application类,无其他业务
*/
public class SophixStubApplication extends SophixApplication {
/**
* 此处SophixEntry应指定真正的Application, 这里为MyApplication, 并且保证RealApplicationStub类名不被混淆。
*/
@Keep
@SophixEntry(MyApplication.class)
static class RealApplicationStub {
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
initSophix();
}
/**
* hotfix初始化工作
*/
private void initSophix() {
final SophixManager instance = SophixManager.getInstance();
instance.setContext(this)
.setAppVersion(VersionUtil.getAppVersion(this))
.setSecretMetaData(null, null, null)
.setEnableDebug(true)
.setEnableFullLog()
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 新补丁生效需要重启, 强制退出;
SophixManager.getInstance().killProcessSafely();
}
}
}).initialize();
}
}
六、配置Application, 将原有的换成自定义SophixApplication类(app下的AndroidManifest.xml):
<application
android:name=".SophixStubApplication">
七、在原有的Application中的onCreate中加入获取补丁包的代码:
//hotfix拉取补丁
SophixManager.getInstance().queryAndLoadNewPatch();
八、生成补丁并上传:
1.对以上工程打2个apk,一个旧的apk,一个新的apk,即修复bug的代码。
2.从以下地址下载补丁包生成工具:
http://ams-hotfix-repo.oss-cn-shanghai.aliyuncs.com/SophixPatchTool_windows.zip?spm=5176.doc53247.2.4.DAipia&file=SophixPatchTool_windows.zip
3.打开工具,分别在旧包和新包中选择对应的apk文件,点设置,设置打包签名的信息,然后点击"GO!",过会生成"sophix-patch.jar"文件,这个就是补丁包。
4.上传补丁文件到阿里云,管理控制台 -> 产品与服务 -> 移动服务 -> 移动热修复 -> APP管理 -> APP列表 -> 点某个应用的管理按钮 -> 应用版本列表中添加版本号 -> 版本详情中上传该版本的补丁文件,可以有多个。
九、下载并使用补丁:
SophixManager.getInstance().queryAndLoadNewPatch(); //在适当的位置加上此句,执行后会下载补丁文件,有些补丁需要重启才能使用,有些可直接使用无需重启