Bugly 集成问题详解
本文主要对一些使用细节问题进行设计.
官方的文档中,使用前最好详读
https://bugly.qq.com/docs/
一.在 Eclipse 集成Android 版 bugly.
官方文档
https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=20170607153855
注意一个细节,bugly 库有两个版本,一个只有统计而不带热升级功能,另一个是带了升级功能,两者不能并存,并且的调用写法是有细微差别.
如果开发环境使用Android Studio,参考官方文档集成即可,但是如果使用 Eclipse 集成热升级,在官方声明是不支持,但是我们 html5模块开发提供是 Eclipse 框架,因此实验一下,证明中可以手动处理加入支持.
我们也建议直接在项目采用升级版 bugly.以下是 Android 集成文档
https://bugly.qq.com/docs/user-guide/instruction-manual-android-upgrade/?v=20170607153855
1.1 Eclispe 集成升级及统计库
首先下载的 aar 库,
https://bugly.qq.com/docs/release-notes/release-android-beta/
找到其中的.aar 文件,改名为 zip后,解压后有如下文件结构,
将其 classes.jar 改名为 bugly_crash_upgrade-xxx.jar拷入 Eclipse 项目的 libs 目录当中.
把 res下在 values.xml ,values-en.xml文件改名为 bugly-values.xml,bugly-values-en.xml 拷入 Eclipse 项目目录.
把 AndroidManifest.xml 中相应内容合并到项目的 AndroidManifest.xml 内容当中,注意几个 service 是用于热更新的,(即直接给 apk 打补丁而非重安装 apk),一般不需要.因此只需把权限列表和 activity 定义拷入项目 xml
<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" />
<!-- Beta Activity -->
<activity
android:name="com.tencent.bugly.beta.ui.BetaActivity"
android:configChanges="keyboardHidden|orientation|screenSize|locale"
android:theme="@android:style/Theme.Translucent"
/>
这样即把库集成到项目当中.
1.2 代码中调用
Android 上传自定义信息
除了崩溃信息,如果 App 还想上报其它信息怎么办呢? 目前有两种办法,
一种采用仿 logcat 的接口进行上传
自定义日志功能
提供了自定义Log的接口,用于记录一些开发者关心的调试日志,可以更全面地反应App异常时的前后文环境。使用方式与Android.util.Log一致。用户传入TAG和日志内容。该日志将在Logcat输出,并在发生异常时上报。有如下接口:
BuglyLog.v(tag, log)
BuglyLog.d(tag, log)
BuglyLog.i(tag, log)
BuglyLog.w(tag, log)
BuglyLog.e(tag, log)
注意:
1)使用BuglyLog接口时,为了减少磁盘IO次数,我们会先将日志缓存在内存中。当缓存大于一定阈值(默认10K),会将它持久化至文件。您可以通过setCache(int byteSize)接口设置缓存大小,范围为0-30K。例: BuglyLog.setCache(12 * 1024) //将Cache设置为12K
2)如果没有使用BuglyLog接口,且初始化Bugly时isDebug参数设置为false,该Log功能将不会有新的资源占用;
3)为了方便开发者调试,当初始化Bugly的isDebug参数为true时,异常日志同时还会记录Bugly本身的日志。请在App发布时将其设置为false;
4)上报Log最大30K;
这个接口输出很不稳定,即在后台不能马上看到,因此在程序并没使用
另外一种是自定义异常上传.
即直接在代码中构造一个异常并调用postCatchedException()提交即可.
CrashReport.postCatchedException(new Exception('your message'));
这个用于监控业务逻辑错误比较适合,比如你想分得更精细一点,可以不同错误用不同 Exception 子类来表示更合适.
因为这个异常没有 throw 不会造成 App 的崩溃.
image.png这个在后台可以同步看到,但是实测打印的最长信息是1000字节.
image.png
三.升级功能使用
3.1 Android升级
https://bugly.qq.com/docs/user-guide/instruction-manual-android-upgrade/?v=20171123163535
带升级的库的包含统计功能,这样相当于有升级和没有升级功能的编程接口不是一样的
只有统计功能初始化
CrashReport.initCrashReport(getApplicationContext(), "c336f0789d", true);
如果带升级的初始化则使用
Bugly.init(getApplicationContext(), "c336f0789d", true);
一般升级方式,有两种,一种是在启动App自动检测.另外一种是手动检查升级(如在设置界面点击版本号)
自动检测,在主窗口时,做如下一句调用
/*
* 如需增加自动检查时机可以使用Beta.checkUpgrade(false,false);
* 参数1:isManual 用户手动点击检查,非用户点击操作请传false
* 参数2:isSilence 是否显示弹窗等交互,[true:没有弹窗和toast] [false:有弹窗或toast], 静默升级.
*/
Beta.checkUpgrade(false,false);
手动点击,一般需要有自定义提示.提示需要在Beta.upgradeStateListener.增加相应提示.如没有新版本 可在onUpgradeNoVersion()提示相应信息.
public void checkUpgrade(final Context context){
Utils.showMessage(context, "正在检测新版本...");
Beta.upgradeStateListener = new UpgradeStateListener() {
@Override
public void onUpgradeSuccess(boolean isManual) {
//Toast.makeText(context,"UPGRADE_SUCCESS",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgradeFailed(boolean isManual) {
// Toast.makeText(context),"UPGRADE_FAILED",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrading(boolean isManual) {
//Toast.makeText(getApplicationContext(),"UPGRADE_CHECKING",Toast.LENGTH_SHORT).show();
}
@Override
public void onDownloadCompleted(boolean b) {
// Toast.makeText(getApplicationContext(),"onDownloadCompleted",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgradeNoVersion(boolean isManual) {
//Toast.makeText(getApplicationContext(),"UPGRADE_NO_VERSION",Toast.LENGTH_SHORT).show();
Utils.showMessage(context, R.string.strToastYourAreTheLatestVersion);
}
};
Beta.checkUpgrade(true,false);
}