一、Bugly
首先我们来欣赏下Bugly的主页
那么我们就愉悦的来接入Bugly
二、导入
关于Bugly的导入官方文档写的很详细,这里我们再来一次
1、自动导入(推荐)
(1)gradle配置(路径app/build.gradle):
android {
defaultConfig {
ndk {
//设置支持的SO库架构
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
}
}
dependencies {
//注释掉原有bugly的仓库
//compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.releasez指代最新版本号,也可以指定明确的版本号,例如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
}
如果你原有项目libs下有着’armeabi’、’x86’、’armeabi-v7a’可以手动下载NDK导入so库
2.手动导入
(1).下载SDK
将解压文件下的bugly_crashreport_upgrade-1.2.0.jar(这里以upgrade-1.2.0.jar为例,导入最新的jar即可)导入到自己项目下的libs目录下,然后app下的Gradle进行配置
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile(name: 'bugly_crashreport_upgrade-1.2.0', ext: 'aar')
}
android {
repositories {
flatDir {
dirs 'libs'
}
}
(2)下载NDK
将对应的’armeabi’、’x86’、’armeabi-v7a’等so文件放在自己项目下
注意: 已经接入Bugly SDK的用户需要先删除原Bugly SDK的jar包; android4.1以上的工程必须把jar包放在libs目录下,否则会出现NoClassDefFoundError错误;
三、参数配置
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文件如下:
<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>
这里配置的两个外部存储路径是升级SDK下载的文件可能存在的路径,一定要按照上面格式配置,不然可能会出现错误。
注:1.3.1及以上版本,可以不用进行以上配置,aar已经在AndroidManifest配置了,并且包含了对应的资源文件。
4.混淆配置
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
-keep class android.support.**{*;}
四、测试验证
1.SDK初始化
注意:如果您之前使用过Bugly SDK,请将以下这句注释掉。
CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", false);
统一初始化方法:
Bugly.init(getApplicationContext(), "注册时申请的APPID", false);
参数解析:
参数1:上下文对象
参数2:注册时申请的APPID
参数3:是否开启debug模式,true表示打开debug模式,false表示关闭调试模式
提示:已经接入Bugly用户改用上面的初始化方法,不影响原有的crash上报功能; init方法会自动检测更新,不需要再手动调用Beta.checkUpgrade(), 如需增加自动检查时机可以使用Beta.checkUpgrade(false,false);
参数1:isManual 用户手动点击检查,非用户点击操作请传false
参数2:isSilence 是否显示弹窗等交互,[true:没有弹窗和toast] [false:有弹窗或toast]
2.发布新版本
进入内测分发页面选择注册的APP,点击发布新版本,上传要升级的APP的版本(上传APP的versioncode必须不低于外发版本的versiocode,否则用户检测不到更新)
五、高级配置
以上几步已经可以提供更新功能,下面我们来看下他的其他设置
1.Beta
Beta类作为Bugly的初始化扩展,通过Beta类可以修改升级的检测时机,界面元素以及自定义升级行为
Bugly.init(this, APP_ID, false);//初始化统一接口
Beta.autoInit = true;//自动初始化开关,true表示app启动自动初始化升级模块; false不会自动初始化; 开发者如果担心sdk初始化影响app启动速度,可以设置为false,在后面某个时刻手动调用Beta.init(getApplicationContext(),false);
Beta.autoCheckUpgrade = true;//true表示初始化时自动检查升级; false表示不会自动检查升级,需要手动调用Beta.checkUpgrade()方法;
Beta.upgradeCheckPeriod = 60 * 1000;//设置升级检查周期为60s(默认检查周期为0s),60s内SDK不重复向后台请求策略);
Beta.initDelay = 1 * 1000;//设置启动延时为1s(默认延时3s),APP启动1s后初始化SDK,避免影响APP启动速度;
Beta.largeIconId = R.drawable.ic_launcher;//设置通知栏大图标,largeIconId为项目中的图片资源;
Beta.smallIconId = R.drawable.ic_launcher;//设置状态栏小图标
Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);//设置sd卡的Download为更新资源存储目录
Beta.canShowUpgradeActs.add(MainActivity.class);//添加可显示弹窗的Activity,例如,只允许在MainActivity上显示更新弹窗,其他activity上不显示弹窗; 如果不设置默认所有activity都可以显示弹窗。
Beta.autoDownloadOnWifi = true;//设置Wifi下自动下载,默认false
Beta.enableHotfix = true;//升级SDK默认是开启热更新能力的,如果你不需要使用热更新,可以将这个接口设置为false。
2.更新功能主要API
/**
* 手动检查更新(用于设置页面中检测更新按钮的点击事件)
*/
public static synchronized void checkUpgrade()
/**
* 获取本地已有升级策略(非实时,可用于界面红点展示)
*
* @return
*/
public static synchronized UpgradeInfo getUpgradeInfo()
/**
* @param isManual 用户手动点击检查,非用户点击操作请传false
* @param isSilence 是否显示弹窗等交互,[true:没有弹窗和toast] [false:有弹窗或toast]
*/
public static synchronized void checkUpgrade(boolean isManual, boolean isSilence)
注意:在调用getUpgradeInfo()方法时如果当前APP版本号小于或等于Bugly上传的APP版本号会返回null,否则才会返回UpgradeInfo
3.当然Bugly也可以自定义UI,比如固定控件ID、自定义activity,这里不多介绍具体可参考文档很详细的