版权声明:本文为博主原创文章,转载请注明。 https://blog.csdn.net/qq_34698126/article/details/75169095
感觉直接使用tinker,文档有很多没有说清楚的地方,也需要自己去搭建不定平台,所以建议使用TinkerPatch 平台去做热更新,看自己实际情况吧。
一、project的gradle集成:
dependencies { classpath 'com.android.tools.build:gradle:2.3.3' // TinkerPatch 插件 classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.1.7" }
二、module的gradle集成:
apply from: 'tinkerpatch.gradle'
dependencies {
//可选,用于生成application类 provided("com.tinkerpatch.tinker:tinker-android-anno:1.7.11") //无需引入tinker的任何库,使用tinkerpatch sdk即可 compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.1.7")}
需要将tinkerpatch.gradle复制到module的个目录
三、Application设置:
1、先在tinkerpatch.gradle设置 reflectApplication = true
2、Application:
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } @Override public void onCreate() { MultiDex.install(this); super.onCreate(); initTinkerPatch(); }
/** * 我们需要确保至少对主进程跟patch进程初始化 TinkerPatch */ private void initTinkerPatch() { // 我们可以从这里获得Tinker加载过程的信息 if (BuildConfig.TINKER_ENABLE) { tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike(); // 初始化TinkerPatch SDK TinkerPatch.init( tinkerApplicationLike // new TinkerPatch.Builder(tinkerApplicationLike) // .requestLoader(new OkHttp3Loader()) // .build() ) .reflectPatchLibrary() .setPatchRollbackOnScreenOff(true) .setPatchRestartOnSrceenOff(true) .setFetchPatchIntervalByHours(3) ; // 获取当前的补丁版本 Log.d(TAG, "Current patch version is " + TinkerPatch.with().getPatchVersion()); // fetchPatchUpdateAndPollWithInterval 与 fetchPatchUpdate(false) // 不同的是,会通过handler的方式去轮询 TinkerPatch.with().fetchPatchUpdateAndPollWithInterval(); } }
四、tinkerpatch.gradle配置:
1、在tinkerpatch的官网中注册,获取appKey:
appKey = "3e20c4212df0b421" /** 注意: 若发布新的全量包, appVersion一定要更新 **/ appVersion = "1.2.1"
2、如果需要加固,增加以下代码,也可以参考:https://github.com/TinkerPatch/tinkerpatch-flavors-sample/blob/master/app/tinkerpatch.gradle:
productFlavors { flavor { flavorName = "protect" appVersion = "${tinkerpatchSupport.appVersion}_${flavorName}" pathPrefix = "${bakPath}/${baseInfo}/${flavorName}-${variantName}/" name = "${project.name}-${flavorName}-${variantName}" baseApkFile = "${pathPrefix}/${name}.apk" baseProguardMappingFile = "${pathPrefix}/${name}-mapping.txt" baseResourceRFile = "${pathPrefix}/${name}-R.txt" /** 开启加固开关,上传此flavor的apk到加固网站进行加固 **/ protectedApp = true } flavor { flavorName = "flavor1" appVersion = "${tinkerpatchSupport.appVersion}_${flavorName}" pathPrefix = "${bakPath}/${baseInfo}/${flavorName}-${variantName}/" name = "${project.name}-${flavorName}-${variantName}" baseApkFile = "${pathPrefix}/${name}.apk" baseProguardMappingFile = "${pathPrefix}/${name}-mapping.txt" baseResourceRFile = "${pathPrefix}/${name}-R.txt" } }
具体参考:https://github.com/TinkerPatch/tinkerpatch-flavors-sample