集成Bugly自动升级以及和项目其他库文件冲突填坑

前言

由于项目中要实现自动升级,而且我们的app也不用上线,以前是自己手写升级逻辑,调用后台接口,升级还要麻烦后台人员。秉承一个原则,自己能做到的,从来不麻烦别人,所以就干脆集成了tencent的bugly。看到网上对它评论还不错,而且api比以前方便多了,有热更新功能。所以就试了下,当然只看文档还是有些坑的。官方文档已经把步骤介绍很详细了,这篇文章纯属自己记个笔记,顺便整合一下

集成步骤

首先要查看官方文档:https://bugly.qq.com/docs/
文档介绍已经很详细了
sdk的下载:
集成Bugly自动升级以及和项目其他库文件冲突填坑_第1张图片
简单点的:

1、先依赖,如下
android {
        defaultConfig {
          ndk {
            //设置支持的SO库架构
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
          }
        }
      }
      dependencies {
          //注释掉原有bugly的仓库
          //compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.3.2
          compile 'com.tencent.bugly:crashreport_upgrade:latest.release'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0
          compile 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.2.0
      }
2、配置

(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 (这个一定要,因为要兼容7.0以上嘛,都什么年代啦)

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

但是一般情况下,我们是要自己写一个类去集成v4包下的FileProvider,
主要是为了防止和其他库写的FileProvider冲突,所以我们所有的FileProvider最好都用继承的方式声明 如下

package com.bimex.wzh.easyconsbox.base;

import android.support.v4.content.FileProvider;

/**使用bugly 自定义一个provider
 * Created by Google on 2018/4/25.
 */

public class BuglyFileProvider extends FileProvider {

}
<provider
    android:name=".base.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>
#当然还要写xml文件

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


<paths xmlns:android="http://schemas.android.com/apk/res/android">
    
    <external-path name="beta_external_path" path="Download/"/>
    
    <external-path name="beta_external_files_path" path="Android/data/"/>
paths>
(4)混淆配置

在混淆文件中添加如下:

-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
-keep class android.support.**{*;}
开始验证

在自定义的application中 直接一行代码
Bugly.init(getApplicationContext(), "注册时申请的APPID", false);

在bugly官网创建一个应用,拿到APPID,然后创建一个升级策略就ok了。

遇到的一些问题

1、导入包或者添加完依赖,打包的时候冲突了。

Error:Execution failed for task ':APP:transformClassesWithDexForDebug'.  
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.UnsupportedOperationException 

根本不知道那个包冲突了,找半天也没找到,抓狂了,最后只能借助MultiDex来解决这个问题。 是借鉴了
https://blog.csdn.net/lvshuchangyin/article/details/53785494 此篇博客。
MutiDex可以看看https://www.jianshu.com/p/dd90d7e7c691
成功解决的方式就是:
在项目的build.gradle文件中添加

defaultConfig {  
    ...  
    minSdkVersion 19  
    targetSdkVersion 26 
    ...  

    //Enabling multidex support.  
    multiDexEnabled true  
}  
dependencies {  
    compile ´com.android.support:multidex:1.0.1´  
} 

并且在清单文件中进行配置,由于我自定义了BaseApplication 类,所以我先用自定义的Application继承MultiDexApplication 然后添加如下:

"1.0" encoding="utf-8"?>  
"http://schemas.android.com/apk/res/android"  
    package="com.example.android.multidex.myapplication">  
    ...  
        android:name=".base.BaseApplication">  
        ...  
      
  

接下来我重新打包测试了下,居然没有冲突了,而且包体积还缩小了一半。
虽然这么做有利有弊能解决问题。以后有好的方案会及时更新的

bugly 升级策略:比较versionCode 必须小与策略版本才会下放提示升级。
比如versionCode 1 versionName1.0 升级为versionCode 2 versionName 1.0
所以app的版本号是从v1.0.1 升到了v1.0.2

你可能感兴趣的:(Android)