使用SDK
添加权限
在 AndroidManifest.xml 文件中添加如下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
Application类改造
使用 HotpatchApplication代理应用 Application
- 如果应用没有 Application,则新建 Application 继承 HotpatchApplication,在该类中进行应用的相关初始化。
- 如果应用已包含 Application 类,则需要让 Application 类继承于 HotpatchApplication。
public class TmfDelegaleApplication extends HotpatchApplication { ... }
继承 TinkerApplication 实现应用真实 Application,并做相关初始化。
public class TmfApplication extends TinkerApplication { public TmfApplication() { super( // tinkerFlags, tinker支持的类型,dex,library,还是全部都支持! ShareConstants.TINKER_ENABLE_ALL, // ApplicationLike的实现类,只能传递字符串(继承自BaseHotpatchApplication的类) "com.tencent.tmf.demo.TmfDelegaleApplication", // Tinker的加载器,一般来说用默认的即可 "com.tencent.tinker.loader.TinkerLoader", // tinkerLoadVerifyFlag, 运行加载时是否校验dex与,ib与res的Md5 // 由于合成过程中我们已经校验了各个文件的Md5,并将它们存放在/data/data/..目录中。 // 默认每次加载时我们并不会去校验tinker文件的Md5,但是你也可通过开启loadVerifyFlag强制每次加载时校验,但是这会带来一定的时间损耗。 false); } }
一般只需要修改第二个参数即可。另外,需要在 AndroidManifest.xml 中设置 Application 的 name 属性为真实 Application 类:
<application android:name=".TmfApplication" ... ></application>
配置 TinkerId
在 AndroidManifest.xml 中添加 name 为“TINKER_ID”的meta-data,TINKER_ID的值必须为versionName+"."+buildNo,否则后台生成补丁包时因为版本不匹配导致无法下发。
<!--TinkerID-->
<meta-data
android:name="TINKER_ID"
android:value="${TINKER_ID}" />
在 app/build.gradle 中为 TINKER_ID 赋值:
manifestPlaceholders = [
TINKER_ID : rootProject.ext.TMFDemo_tinker.tinkerId,
]
Demo 中的配置方式见 config.gradle(仅供参考):
//config.gradle
ext {
...
// 热修复
TMFDemo_tinker = [
tinkerId: verName+ "." + buildNo
]
...
}
初始化
协议版本
早期版本热修复任务推拉是依赖数据同步组件来完成的,从3.0.2.0版本起,热修复支持直接使用移动网关来实现任务推拉,可以解除任务推拉对数据同步组件的依赖。不过本次协议调整对新版服务有依赖,考虑到私有化客户不同的服务版本,SDK侧做了兼容,同时保留了两套协议实现,客户在初始化时根据自身服务情况指定协议版本即可。
public class ProtocolType {
/**
* 旧协议,依赖数据同步组件实现任务推拉
*/
public static final int PROTOCOL_TYPE_CONCH = 0;
/**
* 新协议:与数据同步组件解耦,
*/
public static final int PROTOCOL_TYPE_SHARK = 1;
}
- 如果您对接的是公有云版本服务,协议版本需选择PROTOCOL_TYPE_SHARK。
- 如果您对接的是私有化版本服务,默认协议版本是PROTOCOL_TYPE_CONCH,如果需要选择PROTOCOL_TYPE_SHARK,请联系管理员确认服务版本是否支持新协议。
初始化SDK
初始化接口定义:
/**
* 初始化
* @param context 上下文,非空,无特殊要求
* @param protocolType 协议版本
*/
public static void init(Context context, int protocolType)
初始化示例
HotPatch.init(context, protocolType); //根据对接服务情况选择协议版本
推送监听
完成初始化之后,已经自动完成推送监听。
主动拉取
HotPatch.pullPatch();