由于项目中要实现自动升级,而且我们的app也不用上线,以前是自己手写升级逻辑,调用后台接口,升级还要麻烦后台人员。秉承一个原则,自己能做到的,从来不麻烦别人,所以就干脆集成了tencent的bugly。看到网上对它评论还不错,而且api比以前方便多了,有热更新功能。所以就试了下,当然只看文档还是有些坑的。官方文档已经把步骤介绍很详细了,这篇文章纯属自己记个笔记,顺便整合一下
首先要查看官方文档:https://bugly.qq.com/docs/
文档介绍已经很详细了
sdk的下载:
简单点的:
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
}
(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>
在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>
在混淆文件中添加如下:
-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