进阶
So文件修复
对补丁中新增的 So,务必使用此接口加载。其余 So 加载场景优先使用此接口加载。(以下代码可直接拷贝至项目工程中使用)
import com.tencent.tinker.lib.tinker.TinkerApplicationHelper;
import com.tencent.tmf.hotpatch.api.BaseHotpatchApplication;
public class LibraryUtil {
/**
* 依是否有使用tinker而选择特定的加载方式
* @param libName
*/
public static void loadLibrary(String libName) {
if (BaseHotpatchApplication.getTinkerApplication() != null) {
// load lib/armeabi library
TinkerApplicationHelper
.loadArmLibrary(BaseHotpatchApplication.getTinkerApplication(), libName);
// load lib/armeabi-v7a library
// TinkerLoadLibrary.loadArmV7Library(TMFApplicationContext.sApplication, libName);
} else {
System.loadLibrary(libName);
}
}
}
使用示例
LibraryUtil.loadLibrary(libName);
main dex 配置
当方法数超过65535,需要使用 MultiDex,为使热修复组件正常工作,需确保加载补丁包所需要的类在 main dex 中。
创建 multidex-config.pro 文件(文件名可自定义),并增加自定义配置(以下内容可直接拷贝到工程中使用):
-keep class com.tencent.tinker.loader.** {*;}
-keep class * extends android.app.Application { *; }
-keep class * extends com.tencent.tinker.loader.TinkerLoader { *; }
-keep class com.tencent.tinker.entry.ApplicationLifeCycle { *; }
-keep class * implements com.tencent.tinker.entry.ApplicationLifeCycle { *; }
// 此处的包路径以实际项目为准,这里以Demo为例
-keep class com.tencent.tmf.demo.TmfDelegaleApplication {*; }