‘壹’ android——上线APP奔溃之后错误日志的抓取
提供给老外的一个APP测试过程中出现异常,APP奔溃,千里之隔,时差有别,很绝望。。。只能再搞一个抓取日志的功能分析问题所在,基于懒人思想,先查,岁配雹然后整合总结。有了下面的东西。
我是从这里搬过来的,之后只做一个保留文件处的小修改而已: https://blog.csdn.net/omnispace/article/details/79833862
感谢大佬!卖御感谢大佬!感乎帆谢大佬!
‘贰’ 如何获得Android的崩溃日志
如大改果你是用eclipse开发的话,在Window--》》show view--》》other--》》logcat。点击OK就能有显示log的窗口了。如果你是要追踪上线的产亩羡品出现滚耐判的崩溃日志的话可以去网上搜bugly获取更多相关知识。
‘叁’ android怎样实时上传崩溃日志到服务器
让系统处理崩溃,然后把错误日志上传到服务器并且服务只能运行2秒钟,如果2秒钟错误日志没有上传到服务器,那么这个错误信息就不要了。然后再停止服务,在服务销毁的时候同时销毁进程。
核心代码:
public int onStartCommand(Intent intent, int flags, int startId) { stopDelayed = intent.getLongExtra("Delayed", 2000); PackageName = intent.getStringExtra("PackageName"); expection = intent.getStringExtra("exception"); try { //这里上传崩溃日志 } catch (java.lang.Exception e) { e.printStackTrace(); } handler.postDelayed(new Runnable() { @Override public void run() {/* Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(PackageName); startActivity(LaunchIntent);*/ KillSelfService.this.stopSelf(); //android.os.Process.killProcess(android.os.Process.myPid()); } }, stopDelayed); return super.onStartCommand(intent, flags, startId);}
@Overridepublic void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestroy: "); android.os.Process.killProcess(android.os.Process.myPid());}
‘肆’ 如何获得Android的崩溃日志
已经做成sdk的形式,源码已公开,源码看不懂的请自行google。
如果想定制适应自己app的sdk请自行fork。
AndroidLogCollector
android
app崩溃日志收集sdk 1.0
作者:贾博士
崩溃日志收集方法:
1.LogCollector是lib包,在需要添加崩溃日志sdk的工程中导入此包。
2.导入lib后,在自己的工程的AndroidManifest.xml文件中加入权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
3.在自己的工程中重写自己的application,在oncreate中加入
LogCollector.init(getApplicationContext(), UPLOAD_URL, params);
PS:重写自己的application记得在Manifest注册
参数:
1.Context
2.String UPLOAD_URL ,上传地址url,支持http和https方式,post方法。
3.HttpParameters params ,自定义的类,用于post上传其他参数。
说明:
发生崩溃后,日志会保存在 /data/data/{your package name}/files/ 目录下
日志只有一个文件,多条数据日志保存
日志文件上传成功后会自动删除,上传不成功则不删除
日志格式可以根据自己的需求在源码中改动
http的post传的数据也可自行修改
参考代码:
public class MyApplication extends Application {
//post method , upload logfile url,replace your site . support http or https
private static final String UPLOAD_URL = "http://xxxxxxxx";
@Override
public void onCreate() {
super.onCreate();
//upload logfile , post params.
HttpParameters params = new HttpParameters();
params.add("key1", "value1");
params.add("key2", "value2");
params.add("key3", "value3");
//.......
//replace your key and value;
boolean isDebug = true;
//set debug mode , you can see debug log , and also you can get logfile in sdcard;
LogCollector.setDebugMode(isDebug);
LogCollector.init(getApplicationContext(), UPLOAD_URL, params);//params can be null
}
}
上传日志方法:
需要先在application中执行init,
然后在任何位置添加如下代码:
LogCollector.upload(boolean isWifiOnly);
参数:
1.boolean isWifiOnly; true代表只在wifi情况下发送,false代表有网的情况下就发送(包括流量和wifi)
您可以在service,activity等位置的合适时机触发,不会卡界面也不会影响性能。
参考代码:
private void uploadLogFile(){
boolean isWifiOnly = true;//only wifi mode can upload
LogCollector.upload(isWifiOnly);//upload at the right time
}
调试:
在init之前调用
LogCollector.setDebugMode(boolean isDebug);
说明:
1.开启调试后可以看到堆栈的log信息
2.同时可以在sd卡下的Android/data/{your package name}/Log/ 目录下可以查看保存的崩溃log日志
该目录下的日志不会自动删除,请及时清空,避免占用空间
‘伍’ Android 通过logcat查看crash 或者anr日志
在Android APP的测试过程中经常遇到crash和anr,开发人员习惯通过eclipse或者eclipse的ddms组件进行捕抓日志,测试人员常通过在dos窗口下adb命令的方式来抓取日志。前者的缺点是启动时非常耗时,后者呢则每孝尺次都要写命令也比较麻烦(需要截图时也存在这个问题唯银)。
crash可以在日志巧山高中搜:FATAL 关键词
anr搜:anr in关键词
‘陆’ 如何获得Android的崩溃日志
每个android应用都是由一个Application和多个activity或者server构成.应用启动时,会首先启动Application.在Application的onCreate方法中调用
1Thread.(handler);
就可以捕获导致应用崩溃的错误信息了.
首先应用要有读写sd卡权限
‘柒’ android 怎么捕获app异常闪退的日志
1、通过集成第三方SDK,如网络统计、友盟统计等
2、发版时使用加固工具,他们也会收集错误日志,如360加固
3、在程序中添加程序异常崩溃的捕捉代码,保存到本地文件中。
‘捌’ Android 各种log 的介绍
包含设备日志,堆栈跟踪和其他诊断信息,可帮助您查找和修复应用中的错误。
安卓bugreport主要用于分析手机的状态。其包含: main log , kernel log ,cpuinfo等信息。bugreport是一个可执行文件,编译后的路径为system/bin/bugreport,源码位于framework/native/cmds/bugreport。其核心在于启动mpsys服务。bugreport同mpstate服务建立socket通信(建立连接20次,超时3min无数据等容错)。连接之后,将接收到的数据定向到文件中。
因此我们看到的bugreport数据均来自mpstate。
bugreport通过socket与mpstate服务建立通信,在mpstate.cpp中的mpstate()方法完成核心功能。分别输出: current log、 last log、 vm trace、 mpsys、 system info
其详细内容主要有: 系统build及运行时长等信息、 内存和CPU进程的信息、 kernel log、 system log、 radio log、 event log 等等。实际来说,bugreport中显示的大部分为信息,都有对应的命令方式可以获取。bugreport只是作为一个在不打扰用户的前提下执行的一套命令集合。
1). main_log 记录手机android上层app以及framework相关活动的log,比如你写的app打印的log,就在这里面
2). events_log 主要是ActivityManager、powerManager等相关的log
3). kernel Log 驱动相关的log
Logcat是内置在Android系统中的一个可执行工具,用于转储系统消息日志,其中包括设备引发错误时的堆栈追踪以及从您的应用当使用 Log 类编写的消息。可以在主机上通过adb logcat命令来查看模拟机上日志信息。
Android tcpmp是命令行数据包捕获实用程序。它可以捕获来自您的Wi-Fi连接,蜂窝连接以及您在android设备上可能具有的任何其他网络连接的数据包
modem 是手机里负责搜网和sim卡数据操作底层模块,每个手机都有,md log 用于分析掉网、掉话、无信号等问题
系统崩溃时留下的遗言,怎么死的,死哪了,死的多惨。
当一个动态库(native 程序)开始执行时,系统会注册一些连接到 debuggerd 的 signal handlers,当系统 crash(崩溃) 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程号,线程号),死亡的地址(在哪个地址上发生了 Crash),死亡时的现场是什么样的(记录了一系列的堆栈调用信息)等等。
6. netlog 网络相关
看网络链接情况,抓取网络包等等
7. QXDM(the Qualcomm eXtensible Diagnostic Monitor)高通可扩展诊断监视器
该工具适用于拥有使用Qualcomm ASIC和试用硬件的设备的人,并允许他们测试,评估和潜在诊断其移动设备的RF性能问题。通常使用它来促进这些设备的产品开发。
使用该软件,用户可以查看他们的移动设备发出的所有信令消息,因为该软件会生成它们的日志。这些日志也可以通过软件进行注释。可以将网络和电话参数的任何混合添加到屏幕,并且允许用户在使用其参数时使用复杂的公式。该程序还实时生成大量统计数据,以便用户可以更好地识别潜在的性能问题。用户可以访问Markov统计信息,Mux统计信息,RLP统计信息,块错误率,移动性管理数据,寻呼和访问统计信息,前向和反向链路统计信息等等。该程序还为用户提供了便携式设备信号的图形显示。该程序与Windows操作系统兼容。
8. init Log(init进程log)
9. Crashlog(崩溃日志)
‘玖’ android 闪退日志
先清除之前的日志:adb logcat -c
操作闪退步骤后,输出干净消槐的闪退日志:adb logcat -b crash >error.txt
adb bugreport > log.txt
搜索fatal exception 或者crash;
app出现anr时会在data/anr目录下生成traces.txt文件
adb pull data/anr/traces.txt > anr_log.txt
traces.txt文件里存放设备所有app的anr日志
打开日志文件,搜索包名
查看手机的所有拿激友日志
adb logcat
只获取该应用的日志
adb logcat | findstr 应用包名
开始抓取日志并保存到D盘的crash.txt
adb logcat >D:\crash.txt
ctrl +C 停止抓取
ctrl +F 搜索 force finishing查看闪铅槐退的日志
https://blog.csdn.net/lan_yangbi/article/details/112031488
‘拾’ android crash日志怎么分析
原始的方法都比较麻烦了,现在有很多的崩溃捕捉工具,可以都快速的定位崩溃堆栈详情,同时日志也会一并上报的,现在比较新的工具是Bugout,一些别工具还有bugly、bugtags和bugclos,你可以筛选一下,哪个适合你。