HotFix移动热修复详解
集成步骤:
1、打开阿里云选择产品------移动热修复:
2、登录:
3、点击控制台:
4、产品与服务点击移动热修复:
5、创建App
7、返回控制台管理页面已经有创建的应用--------点击管理--------得到Appid、AppSecret和RSA秘钥点击添加版本创建补丁版本:
注:这里的补丁版本要和清单文件中的VersionName,MyApplication中的HotFix初始化的appVersion的版本号一致,不一致不能进行修复
快速集成:
1、配置AndroidManifest文件(这三个值在上面已经得到)
在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" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA**" />
将上述value中的值分别改为通过平台HotFix服务申请得到的App Secret和RSA**,出于安全考虑,建议使用setSecretMetaData这个方法进行设置,详见1.3.2.1的方法说明。
2、 混淆配置 (要使用混淆就添加,我的项目中没有用到)
#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下
3、在 Moudle的 build.gradle中添加:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' } } repositories { mavenLocal() //阿里云仓库 maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } mavenCentral() jcenter() flatDir { dirs 'libs' } }
4、在dependencies中添加引用:
compile 'com.aliyun.ams:alicloud-android-hotfix:3.1.1'
libs目录下添加jar包
utdid4all-1.1.5.3_proguard.jar'
4、在MyApplicstion中做初始化操作:
/**
* 热修复标记
*/
public static Boolean state=false;
public static MsgDisplayListener msgDisplayListener = null;
public static StringBuilder cacheMsg = new StringBuilder();
@Override
public void onCreate() {
super.onCreate();
app = this;
initHotfix();
}
private void initHotfix() {
String appVersion;
try {
appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
} catch (Exception e) {
appVersion = "2.0.0";
}
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) {
String msg = new StringBuilder("").append("Mode:").append(mode)
.append(" Code:").append(code)
.append(" Info:").append(info)
.append(" HandlePatchVersion:").append(handlePatchVersion).toString();
if (msgDisplayListener != null) {
msgDisplayListener.handle(msg);
} else {
cacheMsg.append("\n").append(msg);
}
if(code== PatchStatus.CODE_LOAD_RELAUNCH)
{
SophixManager.getInstance().killProcessSafely();
}
}
}).initialize();
}
5、在需要更新的地方调下面的方法即可:
SophixManager.getInstance().queryAndLoadNewPatch();