android bugly 错误分析,Android使用bugly捕捉异常
前言
之前给项目用过一次bugly,说实话腾讯的这个bugly还是挺方便的,捕捉异常,热更,应用升级,都可以实现,但是太长时间没用,都快给忘记了,今天决定做笔记记录一下
集成SDK
在
的
文件中添加依赖和配置属性dependencies { compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.2.0}
同时集成SDK和NDKandroid {
defaultConfig {
ndk {
// 设置支持的SO库架构 abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a' }
}
}
dependencies {
compile 'com.tencent.bugly:crashreport:latest.release' //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.1.9 compile 'com.tencent.bugly:nativecrashreport:latest.release' //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0}
如果在添加"abiFilter"之后Android Studio出现如下报错NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.
则在项目根目录的gradle.properties文件中添加:android.useDeprecatedNdk=true
参数配置
在AndroidManifest.xml中添加权限:
混淆bugly-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
Bugly初始化获取APP ID并将一下代码复制到Application类onCreate()中,Bugly会自动完成初始化
CrashReport.initCrashReport(getApplicationContext(), "注册时申请的APPID", false);
为保证数据准确性,不要在异步线程中初始化bugly
第三个参数是控制sdk调试模式的开关,打开后特性如下
输出详细的Bugly SDK的Log;
每一条Crash都会被立即上报;
自定义日志将会在Logcat中输出。
其他
此外,Bugly2.0及以上版本还支持通过“AndroidManifest.xml”来配置APP信息。如果同时又通过代码中配置了APP信息,则最终以代码配置的信息为准。
在“AndroidManifest.xml”的“Application”中增加“meta-data”配置项:
android:name="BUGLY_APPID"
android:value="" />
android:name="BUGLY_APP_VERSION"
android:value="" />
android:name="BUGLY_APP_CHANNEL"
android:value="" />
android:name="BUGLY_ENABLE_DEBUG"
android:value="" />
不同于“android:versionName”,“BUGLY_APP_VERSION”配置的是Bugly平台的APP版本号。
通过“AndroidManifest.xml”配置后的初始化方法如下:CrashReport.initCrashReport(getApplicationContext());
MultiDex注意事项
如果使用了MultiDex,建议通过Gradle的“multiDexKeepFile”配置等方式把Bugly的类放到主Dex,另外建议在Application类的"attachBaseContext"方法中主动加载非主dex:public classMyApplicationextendsSomeOtherApplication{
@Override protectedvoidattachBaseContext(Context base){
super.attachBaseContext(context);
Multidex.install(this);
}
}
增加上报进程控制
如果App使用了多进程且各个进程都会初始化Bugly(例如在Application类onCreate()中初始化Bugly),那么每个进程下的Bugly都会进行数据上报,造成不必要的资源浪费。
因此,为了节省流量、内存等资源,建议初始化的时候对上报进程进行控制,$\color{red}{只在主进程下上报数据}$:判断是否是主进程(通过进程名是否为包名来判断),并在初始化Bugly时增加一个上报进程的策略配置。Context context = getApplicationContext();// 获取当前包名String packageName = context.getPackageName();// 获取当前进程名String processName = getProcessName(android.os.Process.myPid());// 设置是否为上报进程UserStrategy strategy = new UserStrategy(context);
strategy.setUploadProcess(processName == null || processName.equals(packageName));// 初始化BuglyCrashReport.initCrashReport(context, "注册时申请的APPID", isDebug, strategy);// 如果通过“AndroidManifest.xml”来配置APP信息,初始化方法如下// CrashReport.initCrashReport(context, strategy);
其中获取进程名的方法“getProcessName”有多种实现方法,推荐方法如下:/** * 获取进程号对应的进程名 * * @parampid 进程号 * @return进程名 */privatestaticStringgetProcessName(intpid){
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline"));
String processName = reader.readLine();
if (!TextUtils.isEmpty(processName)) {
processName = processName.trim();
}
return processName;
} catch (Throwable throwable) {
throwable.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException exception) {
exception.printStackTrace();
}
}
return null;
}
测试
现在您可以制造一个Crash(建议通过“按键”来触发),来体验Bugly的能力了。在初始化Bugly的之后,调用Bugly测Java Crash接口CrashReport.testJavaCrash();
android bugly 错误分析,Android使用bugly捕捉异常相关推荐
- Android热更新初探,Bugly热更新的集成和使用(让你的应用轻松具备热更新能力)
介绍 在介绍Bugly之前,需要先向大家简单介绍下一些热更新的相关内容.当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix.美团的Robust以及QZone的超级补丁方案.但它们都存在 ...
- 腾讯Bugly 集成( Android SDK)
年前交付的一个项目,年后客户反馈有的手机运行APP后崩溃,其他手机运行正常.项目中在打开webview加载一个H5页面时出现崩溃,客户反映出现bug的手机是android8.2.0系统的.查过相关资料 ...
- Android的Crash崩溃解决方案-Bugly的使用
我们在开发过程中,经常会遇到程序闪退,但是Eclipse的Consle和Logcat又没有错误提示,或者是只有用的时间长了才会出现的偶然崩溃,这种就很难修复bug,也严重影响用户体验,用户分分钟卸载. ...
- android 捕捉 异常 崩溃 捕捉 crash
转载时请记得标明源地址:http://my.oschina.net/lijindou/blog demo 的 源码 地址:http://pan.baidu.com/s/1mhDsJqg 大家应该 知 ...
- android bugly qq,android版Bugly诚邀体验 可以使用QQ登录
Bugly是一款问题反馈工具,android版Bugly诚邀体验活动开启,页面截图.日志.机型.网络等问题都可以反馈,下面是详细的内容介绍. 2014年6月24日 - 2014年7月24日 Bugly ...
- android 多线程 崩溃,Android异常崩溃捕获
Android系统碎片化造成应用程序崩溃严重,在模拟器上运行良好的程序安装到某款手机上说不定就会出现崩溃的现象.而且,往往都是程序发布之后在用户端出现了崩溃现象.所以在程序发布出去之后,如果出现了崩溃 ...
- android bug监控,Android UncaughtExceptionHandler 全局异常监控
一.全局捕获异常 为了解决这样的问题,我们需要能够及时的捕获异常,但要捕获的地方是在太多,因此,我们需要进行全局性的异常捕获,那么如何捕获全局异常呢? 答案是UncaughtExceptionHand ...
- Windows Android SDK下载安装,配置,异常问题解决教程
Windows Android SDK下载安装,配置,异常问题解决教程 参考文章: (1)Windows Android SDK下载安装,配置,异常问题解决教程 (2)https://www.cnbl ...
- 记录Android Killer反编译时遇到的异常
使用Android Killer反编译,出现以下异常: 一.resource spec: 0x01010543 当前 Apktool 使用版本:Android Killer Default APKTO ...
- Android多媒体二:Android 5.0新增的屏幕捕捉
Android多媒体二:Android 5.0新增的屏幕捕捉 Android 5.0新增了MediaProjectionManager管理器,该管理器可以非常方便地实现屏幕捕捉功能. 使用MediaP ...
最新文章
- 【Gamma】“北航社团帮”展示博客
- python 进程间通信效率_Python进程间通信 multiProcessing Queue队列实现详解
- 成功解决TypeError: 'float' object cannot be interpreted as an integer
- 百度统计 java 实现思路_2019社招阿里、腾讯、蚂蚁金服「四面」Java面试真题分享...
- Java中super函数的用法
- mysql 执行计划 优化_执行计划
- 并发运行的最佳实践_并发最佳实践
- 19.删除链表的倒数第N个节点 golang
- 王道考研 计算机网络11 数据链路层 封装成帧 透明传输 流量控制 停止-等待协议 后退N帧协议GBN 选择重传协议SR
- DIY 主机 所有AMD IntelCPU及主板
- 你应该知道的大数据领域12大动向
- 【算法笔记】逆元的求解
- 南阳理工ACM 题目24 素数距离问题
- PyQt窗口设计之Qt Designer
- java微博模拟登陆_java+selenium模拟登陆新浪微博demo
- 关于 C/S模式,B/S模式,P2P模式
- ANSYS apdl命令流笔记14-------工作平面的变换与生成
- 基于微博平台的python爬虫数据采集
- [水]关于web地图
- NumericUtil