1. 程式人生 > 實用技巧 >企業員工培訓管理的一般流程

企業員工培訓管理的一般流程

Tinker熱修復配置

熱修復配置複雜,本文采取了bugly加tinker,bugly會替換tinker部分配置,減少配置難度

1:依賴配置

implementation "com.tencent.bugly:crashreport_upgrade:1.3.6"

implementation "com.tencent.tinker:tinker-android-lib:

1.9.9" implementation "com.android.support:multidex:1.0.3"

2:APP build下配置簽名,分包
dexOptions {
    // 支援大工程模式,避免對方法最大量限制,字串等
    jumboMode = true
}
multiDexEnabled true
ndk {
    abiFilters 'armeabi-v7a', 'x86'
}

3:project目錄下build配置tinker-support依賴,自動生成task任務,構建patch包

classpath "com.tencent.bugly:tinker-support:1.1.5"

4.配置tinker-support,內容很多很複雜,註釋很詳細

apply plugin: 'com.tencent.bugly.tinker-support'

//配置打包生成的apk的路徑,定位在APP模組下的build/bakApk目錄下
//形式如/user/**/desktop/org/.../main/app/bakApk
def bakPath = file("${project(":app").buildDir}/bakApk/")

//此處填寫需要構建patch的釋出包所在目錄
//因為每次打包都會在上面的bakApk目錄下生成一個以當前打包時間命名的檔案件,檔案件中存放著本次打包生成的apk,mapping.txt,R.txt.
def baseApkDir = 'app-1013-17-08-18'

//https://bugly.qq.com/docs/utility-tools/plugin-gradle-hotfix/
tinkerSupport {

    // 開啟tinker-support外掛,預設值true
    enable = true

    // 是否啟用覆蓋tinkerPatch配置功能,預設值false
    // tinkerSupport是bugly提供的配置屬性
    // 如果為true ,下面tinkerPatch中配置的屬性不會生效,推薦這種。tinker的配置太繁瑣複雜
    overrideTinkerPatchConfiguration = true

    // 生成patch.dex目錄,預設值當前module的子目錄tinker
    autoBackupApkDir = "${bakPath}"

    // 編譯補丁包時,必需指定基線版本的apk,也就是針對哪個線上版本生成patch
    baseApk = "${bakPath}/${baseApkDir}/app-release.apk"

    // 對應tinker外掛applyMapping 混淆規則
    baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-release-mapping.txt"

    // 對應tinker外掛applyResourceMapping 資源id對映
    baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-release-R.txt"

    //自動生成下面的tinker的值 時間戳形式0707-12-10-10
    autoGenerateTinkerId = false

    // 構建基準包和補丁包都要指定不同的tinkerId,並且必須保證唯一性
    tinkerId = "p_1.1"

    // 是否開啟反射Application模式
    enableProxyApplication = true

    // 是否支援新增非export的Activity(注意:設定為true才能修改AndroidManifest檔案)
    supportHotplugComponent = true

}

/**
 * 一般來說,我們無需對下面的引數做任何的修改
 * 對於各引數的詳細介紹請參考:
 * https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
 */
tinkerPatch {
    //oldApk ="${bakPath}/${appName}/app-release.apk"
    ignoreWarning = 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
        //tinkerId = "1.0.1-base"
        //applyMapping = "${bakPath}/${appName}/app-release-mapping.txt" //  可選,設定mapping檔案,建議保持舊apk的proguard混淆方式
        //applyResourceMapping = "${bakPath}/${appName}/app-release-R.txt" // 可選,設定R.txt檔案,通過舊apk檔案保持ResId的分配
    }
}

### 初始化

可以自定義application,官方文件https://www.bookstack.cn/read/tinker/03ddaad8e3bbdebc.md,也可以像我這麼寫