美文网首页
tinker接入 实测

tinker接入 实测

作者: frodo_ | 来源:发表于2020-04-02 17:03 被阅读0次

1: project ->build.gradle

dependencies {
// TinkerPatch 插件
        classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.2.14.6"
}

2: app ->build.gradle

dependencies {
// 若使用annotation需要单独引用,对于tinker的其他库都无需再引用
    annotationProcessor("com.tinkerpatch.tinker:tinker-android-anno:1.9.14.6")
    implementation("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.2.14.6")
}

3:在app 目录下新建 tinkerpatch.gradle

apply plugin: 'tinkerpatch-support'

/**
 * TODO: 请按自己的需求修改为适应自己工程的参数
 */
def bakPath = file("${buildDir}/bakApk/")
def baseInfo = "app-2.2.3-0402-16-33-11"
def variantName = "debug"

def versionName=rootProject.ext.versionName
/**
 * 对于插件各参数的详细解析请参考
 * http://tinkerpatch.com/Docs/SDK
 */
tinkerpatchSupport {
    /** 可以在debug的时候关闭 tinkerPatch **/
    /** 当disable tinker的时候需要添加multiDexKeepProguard和proguardFiles,
     这些配置文件本身由tinkerPatch的插件自动添加,当你disable后需要手动添加
     你可以copy本示例中的proguardRules.pro和tinkerMultidexKeep.pro,
     需要你手动修改'tinker.sample.android.app'本示例的包名为你自己的包名, com.xxx前缀的包名不用修改
     **/
    tinkerEnable = true
    reflectApplication = true
    /**
     * 是否开启加固模式,只能在APK将要进行加固时使用,否则会patch失败。
     * 如果只在某个渠道使用了加固,可使用多flavors配置
     **/
    protectedApp = false
    /**
     * 实验功能
     * 补丁是否支持新增 Activity (新增Activity的exported属性必须为false)
     **/
    supportComponent = true

    autoBackupApkPath = "${bakPath}"

    appKey = "fa9b85c544752e47"

    /** 注意: 若发布新的全量包, appVersion一定要更新 **/
    appVersion = "${versionName}"

    def pathPrefix = "${bakPath}/${baseInfo}/${variantName}/"
    def name = "${project.name}-${variantName}"

    baseApkFile = "${pathPrefix}/${name}.apk"
    baseProguardMappingFile = "${pathPrefix}/${name}-mapping.txt"
    baseResourceRFile = "${pathPrefix}/${name}-R.txt"

    /**
     *  若有编译多flavors需求, 可以参照: https://github.com/TinkerPatch/tinkerpatch-flavors-sample
     *  注意: 除非你不同的flavor代码是不一样的,不然建议采用zip comment或者文件方式生成渠道信息(相关工具:walle 或者 packer-ng)
     **/
}

/**
 * 用于用户在代码中判断tinkerPatch是否被使能
 */
android {
    defaultConfig {
        buildConfigField "boolean", "TINKER_ENABLE", "${tinkerpatchSupport.tinkerEnable}"
    }
}

/**
 * 一般来说,我们无需对下面的参数做任何的修改
 * 对于各参数的详细介绍请参考:
 * https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
 */
tinkerPatch {
    ignoreWarning = false
    allowLoaderInAnyDex =true
    removeLoaderForAllDex = true
    useSign = true
    dex {
        dexMode = "jar"
        pattern = ["classes*.dex"]
        loader = []
    }
    lib {
        pattern = ["lib/*/*.so"]
    }

    res {
        pattern = ["res/*", "r/*", "assets/*", "resources.arsc", "AndroidManifest.xml"]
        ignoreChange = []
        largeModSize = 100
    }

    packageConfig {
    }
    sevenZip {
        zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
//        path = "/usr/local/bin/7za"
    }
    buildConfig {
        keepDexApply = false
    }
}

4: app ->build.gradle

apply plugin: 'com.android.application' 下面添加

apply from: 'tinkerpatch.gradle'

4.5 初始化tinker

在applicationl oncreate()里 调用initTinker

private ApplicationLike tinkerApplicationLike;
private void initTinker(){
        // 我们可以从这里获得Tinker加载过程的信息
        tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();

        // 初始化TinkerPatch SDK, 更多配置可参照API章节中的,初始化SDK
        TinkerPatch.init(tinkerApplicationLike)
                .reflectPatchLibrary()
                .setPatchRollbackOnScreenOff(true)
                .setPatchRestartOnSrceenOff(true)
                .setFetchPatchIntervalByHours(1);

        // 每隔1个小时(通过setFetchPatchIntervalByHours设置)去访问后台时候有更新,通过handler实现轮训的效果
        TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();
    }

5: tinkerpatch.gradle里的appKey字段 修改

appKey :http://www.tinkerpatch.com/ tinker patch平台注册你的app 会生成appkey 替换tinkerpatch.gradle里的appkey即可

6:打测试包

image.png

在build或者在other里点击assembleDebug 生成测试包


image.png

7:tinkerpatch.gradle里的baseInfo 字段 修改

将上一步 1 处的对应粘贴到tinkerpatch.gradle里的 baseInfo

8:打补丁包

随便在某处提示一个toast 表示这是补丁包修改完之后


image.png

点击tinkerPatchDebug 生成对应补丁包


image.png
在tinkerPatch平台
image.png

发布patch_signed_7zip.apk 作为补丁即可

9:如果出现tinker_id not is null 说明你没有配置git 或者git 没有commit过 commit 一次再运行就好了

相关文章

网友评论

      本文标题:tinker接入 实测

      本文链接:https://www.haomeiwen.com/subject/zdnxphtx.html