腾讯Bugly-热更新

作者: 毕加森 | 来源:发表于2017-05-17 16:49 被阅读0次

    Bugly目前采用微信Tinker的开源方案
    已经集成异常上报功能

    使用指南:
    • 在项目根目录下的build.gradle文件中添加插件依赖:
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            // tinkersupport插件, 其中lastest.release指拉取最新版本,也可以指定明确版本号,例如1.0.4
            classpath "com.tencent.bugly:tinker-support:latest.release"
        }
    }
    
    • 在app目录下的build.gradle文件中添加依赖和属性配置:
    dependencies {
        // 注释掉原有bugly的仓库
        // compile 'com.tencent.bugly:crashreport:latest.release'
        // 其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0
        compile 'com.tencent.bugly:crashreport_upgrade:latest.release'
        compile "com.android.support:multidex:1.0.1" // 多dex配置
    }
    // 依赖插件脚本
    apply from: 'tinker-support.gradle'
    
    • 在app目录下创建tinker-support.gradle文件并添加如下配置:
    apply plugin: 'com.tencent.bugly.tinker-support'
    def bakPath = file("${buildDir}/bakApk/")
    // 此处填写每次构建生成的基准包目录
    def baseApkDir = "app-0504-16-23-46"
    // 对于插件各参数的详细解析请参考
    tinkerSupport {
        // 开启tinker-support插件,默认值true
        enable = true
        // 自动生成tinkerId, 你无须关注tinkerId,默认为false
        autoGenerateTinkerId = true
        // 指定归档目录,默认值当前module的子目录tinker
        autoBackupApkDir = "${bakPath}"
        // 是否启用覆盖tinkerPatch配置功能,默认值false
        // 开启后tinkerPatch配置不生效,即无需添加tinkerPatch
        overrideTinkerPatchConfiguration = true
        // 编译补丁包时,必需指定基线版本的apk,默认值为空
        // 如果为空,则表示不是进行补丁包的编译
        // @{link tinkerPatch.oldApk }
        baseApk = "${bakPath}/${baseApkDir}/app-release.apk"
        // 对应tinker插件applyMapping
        baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-release-mapping.txt"
        // 对应tinker插件applyResourceMapping
        baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-release-R.txt"
        // 构建基准包跟补丁包都要修改tinkerId,主要用于区分
        // tinkerId = "1.0.3-patch"
        // 打多渠道补丁时指定目录
        // buildAllFlavorsDir = "${bakPath}/${baseApkDir}"
        // 是否使用加固模式,默认为false
        // isProtectedApp = true
        // 是否采用反射Application的方式集成,无须改造Application
        enableProxyApplication = true
    }
    /**
     * 一般来说,我们无需对下面的参数做任何的修改
     * 对于各参数的详细介绍请参考:
     * https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
     */
    tinkerPatch {
        tinkerEnable = true
        ignoreWarning = false
        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 = "base-2.0.1"
        }
    }
    
    • 初始化SDK(enableProxyApplication = true 的情况)
    public class MyApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            // 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId,调试时,将第三个参数改为true
            Bugly.init(this, "注册时申请的APPID", true);
        }
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            // you must install multiDex whatever tinker is installed!
            MultiDex.install(base);
            // 安装tinker
            Beta.installTinker();
        }
    }
    
    • 在AndroidManifest.xml中添加权限:
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
    • 在app目录下创建keystore文件夹,添加release.keystore及debug.keystore:
    • 在app目录下的build.gradle文件中添加签名配置:
    android {
        // 签名配置
        signingConfigs {
            release {
                try {
                    storeFile file("./keystore/release.keystore")
                    storePassword "testres"
                    keyAlias "testres"
                    keyPassword "testres"
                } catch (ex) {
                    throw new InvalidUserDataException(ex.toString())
                }
            }
            debug {
                storeFile file("./keystore/debug.keystore")
            }
        }
        buildTypes {
            release {
                minifyEnabled true
                signingConfig signingConfigs.release
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
            debug {
                debuggable true
                minifyEnabled false
                signingConfig signingConfigs.debug
            }
        }
    }
    

    官方文档:使用指南
    官方文档:使用详解

    官方Demo:使用示例
    官方Demo:一键接入示例

    相关文章

      网友评论

        本文标题:腾讯Bugly-热更新

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