升级到1.8.1基线
主要变更
1.8.1基线相较老版本做了较大幅度调整,主要包含如下几个方面:
- 优化了框架接入流程,在基础库内置了Shark网关实例,用户不再需要自行维护Shark网关实例(注:依赖新版json配置文件)
- 调整了框架内部数据存储结构,对不同环境数据做了隔离,支持自由切换配置文件
- 增强了框架内部问题诊断机制
- 修正了部分隐私合规方面的问题
- 对target30做了分区存储适配
- 配合后端支持核心业务全链路追踪
必须更新的组件
为了确保组件版本兼容,老用户升级任意组件到1.8.1基线版本(3.x版本)时,必须更新基础库版本至3.0.1.+以上版本:
implementation 'com.tencent.tmf.android:base-core:3.0.1.+'
implementation 'com.tencent.tmf.android:base:3.0.1.+'
除了基础库,建议您同时更新其他组件至最新版。
升级步骤-新版配置文件(.json)
1.8.1基线为了实现内置shark网关实例,调整了配置文件格式,从.java改为了.json格式,不过新版配置文件需部署新版控制台,如果您还未部署新版控制台,只能下载到.java配置文件,请跳过该部分,直接查看旧版配置文件迁移步骤即可。
步骤一:框架接入
从控制台下载新版配置文件tmf-android-configurations.json。
将tmf-android-configurations.json放入app/assets目录下。
升级组件版本到1.8.1基线对应版本
注意:必须更新的组件中所列组件必须更新。
初始化基础库,代码示例如下:
public class MyApplication extends Application {
@Override
public void onCreate() {
//注意如果涉及多进程,请您只在主进程进行初始化
initBase(this);
}
}
private void initBase(Application app) {
TMFBaseConfig config = new TMFBaseConfig.Builder()
.buildNo(BuildConfig.BUILD_NO) // 必须,移动网关, 热更等模块需要使用
.channel(BuildConfig.CHANNEL) // 非必须
.debug(true)
.build();
TMFBase.init(app, config);
}
步骤二:移动网关改用TMF基础库内置实例
新版基础库内置了Shark网关实例,因此用户无需再自行创建和维护Shark实例,统一改为从TMF基础库获取即可,具体步骤如下:
- 删除Shark实例创建相关代码,包括但不限于:
- SharkFactory调用
- AbsSharkConfig/SharkConfig实现
- AbsSharkOutlet/ISharkOutlet实现
- IServiceFactory实现
- TMFConfigurations.java (旧版配置文件)
- Shark调用改用基础库内置Shark实例, 如下:
TMFBase.getShark().getGuidAsyn(new IGuidCallback() { @Override public void onCallback(int retCode, String guid) { if (!TextUtils.isEmpty(guid)) { Log.d("TMFDemo_test", "guid: " + guid + " 获取成功!!!!"); } else { Log.d("TMFDemo_test", "获取GUID失败,guid: " + guid + " retCode: " + retCode); } } });
升级步骤-旧版配置文件(.java)
步骤一:初始化基础库时传入Shark实例
由于用户未部署新版控制台,无法获取到新版配置文件,因此基础库无法创建内置Shark实例,用户仍需保留现有Shark实例维护代码,并在初始化TMF基础库时将Shark实例传入基础库,代码示例如下:
public class MyApplication extends Application {
@Override
public void onCreate() {
//只在主进程进行初始化
initBase(this);
}
}
private void initBase(MyApplication app) {
TMFBaseConfig config = new TMFBaseConfig.Builder()
...
.shark(SharkService.getSharkWithInit()) //必须,传入您维护的Shark实例
...
.build();
TMFBase.init(app, config);
}
步骤二:数据隔离相关设置
1.8.1基线起,TMF内部数据按照不同环境做了隔离存储,改变了原有存储方式,因此在初始化Shark时需指定数据迁移类型,分下面几种情况:
- 如果不涉及环境切换,迁移全部数据,迁移类型设置为MigrateType.MigerateAll。
- 如果切换了productId,需保留vid信息,则设置为MigrateType.MigrateVidOnly。
如果切换了customId,无需保留任何信息,则设置为MigrateType.MigrateNothing。
代码实例:
AbsSharkOutlet sharkOutlet = new AbsSharkOutlet(sharkPkg, sharkConfig, MigrateType.MigerateAll, SERVER_TYPE); Shark shark = SharkFactory.builder(context) // 必填 //... .sharkOutlet(sharkOutlet) // 必填 //... .build();
染色日志初始化调整
- 由于新版TMF基础库内置了染色日志组件,因此用户需删除旧版染色日志库相关依赖。
implementation 'com.tencent.tmf.android:mars-xlog:xxx' implementation 'com.tencent.tmf.android:colorlog:xxx'
- 删除ColorLogger初始化相关代码。
ColorLogger.init(config, SharkService.getSharkWithInit());
染色日志个性化配置可在基础库初始化时进行设置,示例如下:
private void initBase(Context context) { ColorLogConfig colorLogConfig = ColorLogConfig.builder(context) .setLogMaxSize(20*1024*1024) .setLogMaxKeepDays(7) .build; TMFBaseConfig config = new TMFBaseConfig.Builder() ... .colorLogConfig(colorLogConfig); ... .build(); TMFBase.init(CommonApp.get().getApplication(), config); }
离线包接口变化
- OfflineManager原有接口管理上不太友好,进行了重新调整,优化的主要接口是OfflineManager中检查离线包更新接口(除了接口,返回状态码等未进行修改),新接口如下:
/**
* 检查最新离线包的更新
*
* @param bid 离线包id
* @param updateSetting 更新设置
* @param callback 回调
*/
public void checkLatestUpdate(final String bid, UpdateSetting updateSetting,
final IOfflineUpdateCallback callback)
/**
* 检查最新离线包的更新
*
* @param bids 离线包id列表
* @param updateSetting 更新设置
* @param callback 回调
*/
public void checkLatestUpdate(final List<String> bids, UpdateSetting updateSetting,
final IOfflineUpdateCallback callback)
/**
* 检查所有最新离线包的更新
*
* @param updateSetting
* @param callback
*/
public void checkAllUpdate(UpdateSetting updateSetting, final IOfflineUpdateCallback callback)
/**
* 拦截资源
*
* @param url 资源url
* @return null:本地资源不存在
*/
public TMFWebResourceResponse shouldInterceptRequest(String url)
- 离线包推送更新
很早以前的版本是需要客户通过如下接口去监听离线包推送的更新信息,现在这个功能已经内置到SDK内部了,原有的如下接口已废弃,开发者可以将对应的逻辑删除。
public static void registerUpdateInfoPush(IUpdateInfoPusher pusher, BaseUpdateInfoListener listener)