Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

时间:2024-04-11 07:25:28

这两天看了一下Android的热修复框架--bugly,亲自按照官网步骤实现了一下,感觉挺好的,除了部分机型会有点问题。

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

下面是小米note3 Android8.1更新tinker版本后自动合成的图片

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

下面来看一下bugly能做什么?

1.异常上报统计,无需在引入其他的异常分析工具,可自动捕获上传异常日志,包括崩溃分析,ANR分析,错误分析等

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

2.运营统计,包括用户分析,渠道分析等

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

3.重点,应用升级,包括全量升级(App自动更新,可做大版本升级用),热更新(今天的实现,可以静默的修复一些小的bug)

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 

下面来看一下热更新的实现(照官方文档来操作)

第一.进入Bugly官网并登陆(qq登陆)

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

第二.创建产品:鼠标移到右上角头像的地方,点击我的产品,点击创建产品,按照 “ * ”是必填项填完提交

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 

第三.新建Android项目

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 

第四.创建签名用的keystore

 

第五.根据官网进行配置

   1.添加插件依赖,在Project的build.gradle增加  classpath "com.tencent.bugly:tinker-support:latest.release" 

    Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

  2.集成sdk,在App的build.gradle中添加自动引入

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

  3.新建热更新gradle插件(可以按照以下方式创建,也可以复制app的build.gradle),和app的build.gradle在同一个目录(app目录)

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

  4.修改热更新gradle插件内容,将官方文档的gradle插件的内容复制到这个文件,也可以参考官方文档自己配置

https://bugly.qq.com/docs/utility-tools/plugin-gradle-hotfix/?v=20180709165613

  5.在app的gradle里面引入热更新gradle插件apply from: 'tinker-support.gradle'

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 注意:这里会出现app:tinkerSupportProcessDebugManifest'的问题,意思是:

          错误:任务':app:tinkerSupportProcessDebugManifest'的执行失败。>您应该设置自定义应用程序,否则您不能使用此                      修补程序功能

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 解决:https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20180709165613,第三步初始化SDK,也是          我们机场热更新必须要做的一步

 注意:还会遇到问题 app:validateSigningDebug,意思是:

        错误:任务':app:validateSigningDebug'的执行失败。>未设置用于签名配置**的**库文件

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 解决:配置你的keystore

 Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

  解决2:或者直接在App的build.gradle配置你的key的信息

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 

第六.AndroidManifest.xml配置

1. 权限配置

<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" />

2. Activity配置

<activity
    android:name="com.tencent.bugly.beta.ui.BetaActivity"
    android:configChanges="keyboardHidden|orientation|screenSize|locale"
    android:theme="@android:style/Theme.Translucent" />

3. 配置FileProvider

注意:如果您想兼容Android N或者以上的设备,必须要在AndroidManifest.xml文件中配置FileProvider来访问共享路径的文件。


 <provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileProvider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

如果你使用的第三方库也配置了同样的FileProvider, 可以通过继承FileProvider类来解决合并冲突的问题,示例如下:

<provider
    android:name=".utils.BuglyFileProvider"
    android:authorities="${applicationId}.fileProvider"
    android:exported="false"
    android:grantUriPermissions="true"
    tools:replace="name,authorities,exported,grantUriPermissions">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"
        tools:replace="name,resource"/>
</provider>

这里要注意一下,FileProvider类是在support-v4包中的,检查你的工程是否引入该类库。

在res目录新建xml文件夹,创建provider_paths.xml文件如下:


<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- /storage/emulated/0/Download/${applicationId}/.beta/apk-->
    <external-path name="beta_external_path" path="Download/"/>
    <!--/storage/emulated/0/Android/data/${applicationId}/files/apk/-->
    <external-path name="beta_external_files_path" path="Android/data/"/>
</paths>

这里配置的两个外部存储路径是升级SDK下载的文件可能存在的路径,一定要按照上面格式配置,不然可能会出现错误。

 

第七.混淆配置

为了避免混淆SDK,在Proguard混淆文件中增加以下配置:

-dontwarn com.tencent.bugly.**

-keep public class com.tencent.bugly.**{*;} # tinker混淆规则

-dontwarn com.tencent.tinker.**

-keep class com.tencent.tinker.** { *; }

如果你使用了support-v4包,你还需要配置以下混淆规则:

-keep class android.support.**{*;}

 

第八.以上都配置完成后打基准包

将热更新gradle插件中的tinkerId换成你的唯一id,然后可按照下方式打包,然后在手机上运行(联网上报app),打包后的apk位置在目录app/build/bakApk/app-月日-时-分-秒目录下(如:app-0226-16-45-10)

 Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 

第九.打补丁包,补丁包位置在app/build/outputs/patch目录下

   1.修改tinker-support.gradle中的baseApkDir为基准包的路径:(否则会报错检测找不到基准包/上传补丁的时候匹配不到版本)

def baseApkDir = "app-0226-16-45-10"

 

2.修改tinkerId为你唯一的tinkerId,需要与基准包的thinkerId不相同

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

3.将补丁包中的 patch_signed_7zip.apk 文件传到bugly,然后手机重新打开app,即可自动修复

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析

 

以上即完成了Bugly热更新,异常上报的集成。有几点注意点

1.将ApplicationLike中sdk初始化时候的APPID换成你产品的AppID(在bugly官网-产品中可以看到)

Bugly.init(getApplication(), "这里换成你的AppID", true);

2.目前发现小米note3手机和小米5手机不能自动合成补丁包,手动也不行

3.我的demo地址 TecentBuglyDemo.zip

如果有解决了这个问题的请分享你的方案,不胜感激!

 

2019-02-27补充:小米note3 Android8.1以上手机不能自动合成的问题解决,将tinker版本换到1.9.9就可以了,

Android 热更新框架Bugly-9步完成热更新/自动更新/异常上报分析