使用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); //根据对接服务情况选择协议版本

推送监听

完成初始化之后,已经自动完成推送监听。

注意:推送监听是依赖移动网关tcp通道的,因此要想推送监听正常工作,需要确保移动网关tcp通道是开启的。

主动拉取

HotPatch.pullPatch();
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""