官方文档地址:https://help.aliyun.com/document_detail/69874.html?spm=a2c4g.11174283.6.552.KE7jWx
集成开始:
1、进入管理控制台
2、新建产品
下载aliyun-emas-services.json文件
后面配置需要的数据,都在该文件中
二、SDK引入
SDK引入有以下两种方式,官方更推荐第一种。
1. gradle远程仓库依赖
添加maven仓库地址
allprojects {
repositories {
google()
jcenter()
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
在app.gradle中添加依赖
/*
Android Studio 3.0以后,官方推荐使用 implementation 或 api 添加依赖
如果是之前的版本,使用compile
*/
implementation 'com.aliyun.ams:alicloud-android-hotfix:3.2.3'
2. SDK下载
SDK下载地址
三、添加必要权限
<!-- 网络权限-->
<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" />
<!--
外部存储读权限,调试工具加载本地补丁需要
仅调试工具获取外部补丁需要,不影响线上发布的补丁加载,调试时请自行做好android6.0以上的运行时权限获取。
-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
四、添加meta-data
在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密钥" />
这三个值需要到前面下载的aliyun-emas-services.json文件里查找,对应关系如下:
value名 对应字段
App ID hotfix.idSecret
App Secret emas.appSecret
RSA密钥 hotfix.rsaSecret
五、混淆配置(可选)
#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/build/outputs/mapping/release路径下,移动到/app路径下
#修复后的项目使用,保证混淆结果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
#防止inline
-dontoptimize
这样,前期的配置准备就完成了。将项目编译以下,准备后面的代码配置。
代码配置
这里我直接贴上初始化的代码,在注释中详细介绍:
package com.huaiwang.zhhw;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.annotation.Keep;
import android.util.Log;
import com.taobao.sophix.PatchStatus;
import com.taobao.sophix.SophixApplication;
import com.taobao.sophix.SophixEntry;
import com.taobao.sophix.SophixManager;
import com.taobao.sophix.listener.PatchLoadStatusListener;
/**
* 作者: WangSophixApp
* 时间: 2019/3/11 13:59
* 描述:
*/
public class WangSophixApp extends SophixApplication {
private static final String TAG="WangSophixApp";
@Keep
@SophixEntry(WangApp.class)
static class RealApplicationStub {
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
initSophix();
}
private void initSophix() {
String appVersion;
try {
appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
appVersion = "1.3";
e.printStackTrace();
}
SophixManager.getInstance().setContext(this)
.setAppVersion(appVersion)
.setAesKey(null)
.setEnableDebug(false)
.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();
Log.d(TAG, "onCreate://...... " + msg.toString());
// if (msgDisplayListener != null) {
// msgDisplayListener.handle(msg);
// } else {
// cacheMsg.append("\n").append(msg);
// }
// 补丁加载回调通知
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// 表明补丁加载成功
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
// 建议: 用户可以监听进入后台事件, 然后调用killProcessSafely自杀,以此加快应用补丁,详见1.3.2.3
// SophixManager.getInstance().killProcessSafely();
} else if (code == PatchStatus.CODE_LOAD_FAIL) {
// 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
SophixManager.getInstance().cleanPatches();
} else {
// 其它错误信息, 查看PatchStatus类说明
}
}
}).initialize();
}
}
这个很容易踩的坑,
PadApplication.class填写自己的,使用@keep指向自己的Application
在配置文件引用AndroidManifest添加前面的WangSohixApp文件,这个名字可以取自己的
生成补丁工具下载和使用介绍:https://help.aliyun.com/document_detail/53247.html?spm=a2c4g.11186623.4.4.Pr69Go
代码配置差不多了,到了打包apk了,首先生成两个旧的apk和新的apk,设置那里是配置自己签名(AES Key选填)
配置完成之后,点击go
生成的补丁是这个,然后打开阿里平台
注意注意注意了
这三个地方的版本号一定要一样
点击新建发布就成功了