Bugly 集成问题详解

2017-12-22  本文已影响447人  蓝点工坊

本文主要对一些使用细节问题进行设计.
官方的文档中,使用前最好详读
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);

    }
上一篇下一篇

猜你喜欢

热点阅读