Bugly 热更新集成记录

作者: 忘尘And | 来源:发表于2017-11-10 11:05 被阅读51次

    以下文章记录bugly热更新的过程(傻瓜式教程,被那人较懒,直接贴图吧):
    集成第三方,首先肯定是去官网注册,申请资料,balabala的,直接上图吧


    image.png
    image.png

    (APPID后面需要用到)


    image.png

    对照步骤一步步来:
    project目录的gradle配置,重点红圈!!!


    image.png image.png image.png

    moudle目录下创建


    image.png

    tinker-support.gradle里面的内容,好吧,完全copy,没毛病,之后告诉怎么修改基准包和补丁包的修改
    apply plugin: 'com.tencent.bugly.tinker-support'

    def bakPath = file("${buildDir}/bakApk/")

    /**

    • 此处填写每次构建生成的基准包目录
      */
      def baseApkDir = "app-1110-10-23-51"

    /**

    • 对于插件各参数的详细解析请参考
      */
      tinkerSupport {

      // 开启tinker-support插件,默认值true
      enable = 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 = "base-1.0.1"
      tinkerId = "patch-1.0.1"

      // 构建多渠道补丁时使用
      // buildAllFlavorsDir = "${bakPath}/${baseApkDir}"

      // 是否启用加固模式,默认为false.(tinker-spport 1.0.7起支持)
      // isProtectedApp = true

      // 是否开启反射Application模式
      enableProxyApplication = false

      // 是否支持新增非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 = 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 = "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的分配
      }
      }

    接下来呢,初始化呀,这个初始化和上面的 image.png

    有关,true呢,方便一点,本人较懒,不想多写一个类,不过我用的是false。。。。


    image.png
    image.png

    记得去maifest里面配置application哟,这个就不给图了,下面是appLike代码,之前的application里面的初始化操作都放在这里去操作

    public class AppLike extends DefaultApplicationLike {
    public static final String TAG = "Tinker.SampleApplicationLike";

    public AppLike(Application application, int tinkerFlags,
                   boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime,
                   long applicationStartMillisTime, Intent tinkerResultIntent) {
        super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
    }
    
    
    @Override
    public void onCreate() {
        super.onCreate();
        // 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId
        // 调试时,将第三个参数改为true
        Bugly.init(getApplication(), "efbe42d727", true);
    }
    
    
    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    @Override
    public void onBaseContextAttached(Context base) {
        super.onBaseContextAttached(base);
        // you must install multiDex whatever tinker is installed!
        MultiDex.install(base);
    
        // 安装tinker
        // TinkerManager.installTinker(this); 替换成下面Bugly提供的方法
        Beta.installTinker(this);
    }
    
    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public void registerActivityLifecycleCallback(Application.ActivityLifecycleCallbacks callbacks) {
        getApplication().registerActivityLifecycleCallbacks(callbacks);
    }
    

    }

    下面enableProxyApplication = true 的情况,没写,直接上文档图:


    image.png

    下面是manifest配置


    image.png

    文档里面的说明。有必要给个图


    image.png image.png image.png

    编译完成后这里会生成一个基准包,这就是基准包。
    接着,我们修改下代码,我懒就改了个字符串显示。。。。
    我们看看接下来补丁包的配置
    ,我们吧刚才基准包的内容修改下,在tinker-support里面,给图最清楚:


    image.png

    不多说,聪明的各位肯定明白,对了,记得修改tinkerId为补丁包的,看看上面的注释,必须保证唯一

    继续图解


    image.png

    这样就生成了补丁包,位置注意是patch,不是tinkerPatch


    image.png

    然后我们就可以愉快的去上传补丁包了


    image.png image.png

    对于下发范围的说明:


    image.png

    等会儿然后就ok了

    以上,就是图解bugly热修复的集成咯

    相关文章

      网友评论

        本文标题:Bugly 热更新集成记录

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