美文网首页
Bugly 集成问题详解

Bugly 集成问题详解

作者: 蓝点工坊 | 来源:发表于2017-12-22 15:16 被阅读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);
    
        }
    

    相关文章

      网友评论

          本文标题:Bugly 集成问题详解

          本文链接:https://www.haomeiwen.com/subject/qyrufxtx.html