bugly 官网:https://bugly.qq.com/v2/index

注册流程我就不写了,直接写集成步骤:

1) 在 Projet 的build.gradle 里面 导入classPtah:

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

2 )在跟app 的build.gradle 平级新建一个gradle 文件,名字随便取(我这里取:tinker-support.gradle),但是后面会用到这个名字:

apply plugin: 'com.tencent.bugly.tinker-support'def bakPath = file("${buildDir}/bakApk/")/*** 此处填写每次构建生成的基准包目录*/
def baseApkDir = "app-0322-17-01-18"/*** 对于插件各参数的详细解析请参考*/
tinkerSupport {// 开启tinker-support插件,默认值trueenable = true//tinkerEnable功能开关tinkerEnable = true// 自动生成tinkerId, 你无须关注tinkerId,默认为falseautoGenerateTinkerId = true// 指定归档目录,默认值当前module的子目录tinkerautoBackupApkDir = "${bakPath}"// 是否启用覆盖tinkerPatch配置功能,默认值false// 开启后tinkerPatch配置不生效,即无需添加tinkerPatchoverrideTinkerPatchConfiguration = true// 编译补丁包时,必需指定基线版本的apk,默认值为空// 如果为空,则表示不是进行补丁包的编译// @{link tinkerPatch.oldApk }baseApk = "${bakPath}\\${baseApkDir}\\app-release.apk"
//    baseApk =  "${bakPath}/${baseApkDir}/app-debug.apk"// 对应tinker插件applyMappingbaseApkProguardMapping = "${bakPath}\\${baseApkDir}\\app-release-mapping.txt"
//    baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-debug-mapping.txt"// 对应tinker插件applyResourceMappingbaseApkResourceMapping = "${bakPath}\\${baseApkDir}\\app-release-R.txt"
//    baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-debug-R.txt"// 构建基准包跟补丁包都要修改tinkerId,主要用于区分
//    tinkerId = "base-1.3-4"// 打多渠道补丁时指定目录// buildAllFlavorsDir = "${bakPath}/${baseApkDir}"// 是否使用加固模式,默认为false// isProtectedApp = true// 是否采用反射Application的方式集成,无须改造ApplicationenableProxyApplication = true// 支持新增ActivitysupportHotplugComponent = true}/*** 一般来说,我们无需对下面的参数做任何的修改* 对于各参数的详细介绍请参考:* https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97*/
tinkerPatch {tinkerEnable = trueignoreWarning = falseuseSign = falsedex {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-1.0-1"}
}

3)在app build.gradle 引用tinker-support.gradle 和 导入依赖:

// 远程依赖集成方式(推荐)
implementation "com.tencent.bugly:crashreport_upgrade:1.3.6"
// 指定tinker依赖版本(注:应用升级1.3.5版本起,不再内置tinker)
implementation 'com.tencent.tinker:tinker-android-lib:1.9.9'
// 多dex配置
implementation "com.android.support:multidex:1.0.3"

manifest 权限 和 在application 里面的配置:

<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_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- Bugly升级SDK配置开始  -->
<activityandroid:name="com.tencent.bugly.beta.ui.BetaActivity"android:theme="@android:style/Theme.Translucent"/><providerandroid:name="android.support.v4.content.FileProvider"android:authorities="tyj.com.buglytest.fileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths"/>
</provider>

在app 里面初始化:

import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex;
import android.widget.Toast;import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta;
import com.tencent.bugly.beta.interfaces.BetaPatchListener;
import com.tencent.bugly.beta.upgrade.UpgradeStateListener;
import com.tencent.bugly.crashreport.CrashReport;import java.util.Locale;/*** @author ChenYe created by on 2019/3/21 0021. 17:11**/public class App extends Application {@Overridepublic void onCreate() {super.onCreate();// 设置是否开启热更新能力,默认为trueBeta.enableHotfix = true;// 设置是否自动下载补丁Beta.canAutoDownloadPatch = true;// 设置是否提示用户重启Beta.canNotifyUserRestart = true;// 设置是否自动合成补丁Beta.canAutoPatch = true;/***  全量升级状态回调*/Beta.upgradeStateListener = new UpgradeStateListener() {@Overridepublic void onUpgradeFailed(boolean b) {}@Overridepublic void onUpgradeSuccess(boolean b) {}@Overridepublic void onUpgradeNoVersion(boolean b) {Toast.makeText(getApplicationContext(), "最新版本", Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrading(boolean b) {Toast.makeText(getApplicationContext(), "onUpgrading", Toast.LENGTH_SHORT).show();}@Overridepublic void onDownloadCompleted(boolean b) {}};/*** 补丁回调接口,可以监听补丁接收、下载、合成的回调*/Beta.betaPatchListener = new BetaPatchListener() {@Overridepublic void onPatchReceived(String patchFileUrl) {Toast.makeText(getApplicationContext(), patchFileUrl, Toast.LENGTH_SHORT).show();}@Overridepublic void onDownloadReceived(long savedLength, long totalLength) {Toast.makeText(getApplicationContext(), String.format(Locale.getDefault(),"%s %d%%",Beta.strNotificationDownloading,(int) (totalLength == 0 ? 0 : savedLength * 100 / totalLength)), Toast.LENGTH_SHORT).show();}@Overridepublic void onDownloadSuccess(String patchFilePath) {Toast.makeText(getApplicationContext(), patchFilePath, Toast.LENGTH_SHORT).show();
//                Beta.applyDownloadedPatch();}@Overridepublic void onDownloadFailure(String msg) {Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();}@Overridepublic void onApplySuccess(String msg) {Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();}@Overridepublic void onApplyFailure(String msg) {Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();}@Overridepublic void onPatchRollback() {Toast.makeText(getApplicationContext(), "onPatchRollback", Toast.LENGTH_SHORT).show();}};Bugly.setUserId(this, "test");Bugly.setUserTag(this, 111);Bugly.putUserData(this, "ke1", "113");Bugly.setAppChannel(this, "xiaomiStore");// 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId,调试时将第三个参数设置为trueBugly.init(this, "id", true);
//        Bugly.setIsDevelopmentDevice(getApplicationContext(), true);}@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);// you must install multiDex whatever tinker is installed!MultiDex.install(base);// 安装tinkerBeta.installTinker();}
}

接下来就是最重要的打包了:

打基线包:

在tinker-support.gradle 里面修改tinkerId (如果你选择自动生成的就不用管)和把基线包的路径放到哪个path 里面,然后就可以打补丁包:

生成的补丁包在:

接下来就是发布补丁包了。我后续会补上。

我现在遇到一个问题:我在

明明看到了我的版本了,但是补丁就是发布不上去。网上说的原因是因为tinkerId 要么不对,要么没激活(我这里能看到版本就说明基线包已经激活了),但是我操作了好多遍,我的tinkerId 和 基线包的文件夹路径肯定是对的,但还是不行。

Bugly 之热修复学习相关推荐

  1. 热修复——Bugly让热修复变得如此简单

    一.简述 在上一篇<热修复--Tinker的集成与使用>中,根据Tinker官方Wiki集成了Tinker,但那仅仅只是本地集成,有一个重要的问题没有解决,那就是补丁从服务器下发到用户手机 ...

  2. Android热修复学习之旅——HotFix完全解析

    在上一篇博客 Android热修复学习之旅开篇--热修复概述中,简单介绍了各个热修复框架的原理,本篇博客我将详细分析QQ空间热修复方案. Android dex分包原理介绍 QQ空间热修复方案基于An ...

  3. Android-第三方开源框架:Bugly让热修复变得如此简单

    作者:GitLqr 纸上说来终觉浅,时间比较充裕的小伙伴建议去B站观看视频讲解:Android第三方开源库系列-热修复框架使用.原理及项目实战(已完结) 一.简述 在上一篇<热修复--Tinke ...

  4. 集成腾讯bugly的热修复功能sdk步骤

    首先为什么要集成bugly热修复.市面上有其他的热修复框架,为什么就用bugly?这里给出2张图大家就明白了. 引用腾讯bugly官网的一段话: 无需关注Tinker是如何合成补丁的 无需自己搭建补丁 ...

  5. 安卓开发腾讯Bugly热修复集成和使用思路

    文章目录 一,官方集成 一.获取App ID 二.添加插件依赖 三.集成SDK 四.配置Tinker 1.overrideTinkerPatchConfiguration 2.baseApkDir 3 ...

  6. android热修复原理底层替换,Android 热修复 - 各框架原理学习及对比

    写在开头 从15年开始各技术大佬们开始研究热修复技术,并陆续开源了许多的热修复框架.如 Jasonross 的 Nuwa,美团的 Robust,阿里的 Andfix,腾讯的 Tinker 等等...均 ...

  7. 热修复原理学习(1)热修复技术介绍

    今天开始学习热修复的原理知识,学习方向是阿里团队编写的<深入探索Android热修复技术原理>,所以研究的热修复框架是Sophix. 之前对热修复的知识做过了解,具体是这一篇:热修复原理学 ...

  8. Android 腾讯 Bugly 热修复

    依赖配置流程 Bugly 文档中心 引入依赖 在项目的 build.gradle 中加入依赖 buildscript {repositories {jcenter()google()}dependen ...

  9. Bugly热修复之通过自建服务器管理补丁方案

    Bugly热修复之通过自建服务器管理补丁方案 Bugly虽然提供补丁管理后台,但有时项目可能希望自行管理补丁,今天就简单说一下这个方案. 文章目录 Bugly热修复之通过自建服务器管理补丁方案 背景 ...

最新文章

  1. 面试官:磁盘 IO 变高,你怎么分析?
  2. CIO和CTO到底有什么不同?
  3. aria2下载工具命令行和图形化界面使用
  4. Linux里如何查找文件内容 grep
  5. heartbeat v1版CRM的高可用web集群的实现
  6. 数据库系统概论:第二章 关系数据库
  7. uglifyjs压缩JS
  8. 小五思科技术学习笔记之SSH
  9. 史上卖得最多的芯片......原来是这个!
  10. TCP程序流程及服务器客户端
  11. 大学计算机专业绩点3.7什么水平,大学绩点3.0什么水平 大学里的绩点有什么用...
  12. cdn转发防攻击_一个既可以加速又可以防御的CDN产品
  13. 八个方便C#开发的省时的国外工具
  14. 【终于等到你】微信转发语音的方法 - 语音信息转发
  15. 单循环赛制php,告别东西部分组LPL实行常规赛单循环赛制
  16. python调用v8_Python 安装 V8 引擎 – pyv8
  17. SSD(Single Shot MultiBox Detector)原理详解
  18. 《美国职业橄榄球大联盟》:NFL·王牌四分卫
  19. 修改linux的ip地址及网关,Linux 修改 IP地址 和 网关
  20. 百度api爬虫(1)从百度api中爬取地点数据

热门文章

  1. NBA历史上的4双和准4双记录!
  2. EasyPlayerPro安卓流媒体播放器实现Android H.265硬解码流程
  3. CentOS Stream才是未来
  4. postfix无法发送邮件问题
  5. 医院信息系统 php,php医院门诊信息管理系统
  6. 从前端到服务器全栈搭建个人博客
  7. 计算机科学导论挂了,山东高校曝民间版挂科率排行榜 高等代数挂的人最多
  8. 一线之间两重天--网络打印VS.共享打印 [转]
  9. 计算机按键音乐文爱,文爱_CG贺敬轩_单曲在线试听_酷我音乐
  10. 【JVM】之监控命令-jstat详解