android收集日志
① android怎样记录cpu的日志
在发生ANR时,系统会将异常信息写入到traces文件中,系统会记录异常的位置、CPU和内存当时的使用情况,通过查看日志基本就能判断问题所在。接下来打开该文件,通过shell命令就可以了。如使用cat的打开文件:1,adb shell-->cat /data/anr/traces.txt
2,adb shell "cat /data/anr/traces.txt" | less
② android 极光推送怎么收集crash日志
设备连接到Xcode , Window -> Devices 点中对应硬件, 右侧再点 View Device Logs, 然后就会看到了很多日志了.
③ android测试 app 闪退 怎么捕获日志
比如说,你内存有泄露的情况,比如说你发生了异常,而又没有被处理,就会发生闪退的情况。 仔细检查一下你的代码。 或者做好全局的异常捕获,及时将日志上传到服务端进行分析。
④ 如何获取Android 的系统日志logcat
您好,很高兴为您解答。 读取日志需要的权限 1 <uses-permission android:name="android.permission.READ_LOGS"/> 主要代码 package mt.fzgh; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; public class MyLog { public static class MLog //静态类 { public static void getLog() { System.out.println("--------func start--------"); // 方法启动 try { ArrayList<String> cmdLine=new ArrayList<String>(); //设置命令 logcat -d 读取日志 cmdLine.add("logcat"); cmdLine.add("-d"); ArrayList<String> clearLog=new ArrayList<String>(); //设置命令 logcat -c 清除日志 clearLog.add("logcat"); clearLog.add("-c"); Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕获日志 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //将捕获内容转换为BufferedReader // Runtime.runFinalizersOnExit(true); String str=null; while((str=bufferedReader.readLine())!=null) //开始读取日志,每次读取一行 { Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日志....这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到bufferreader满 System.out.println(str); //输出,在logcat中查看效果,也可以是其他操作,比如发送给服务器.. } if(str==null) { System.out.println("-- is null --"); } } catch(Exception e) { e.printStackTrace(); } System.out.println("--------func end--------"); } } } 这里比较令人纠结的一点就是日志的清理 logcat -c 如果不加入 清理 在buffer满为止,代码自身能够迭代6~7次.... 附带一份logcat的 命令...不过好像 过滤器 指令有问题....慎用 选项 说明 -s 默认设置过滤器 - f 文件 输出到日志文件 -c 清除日志 -d 获取日志 -g 获取日志的大小 - v 格式 设置日志(见下面的格式打印格式) - v 格式 例 brief W/tag ( 876): message process W( 876) message (tag) tag W/tag : message thread W( 876:0x37c) message raw message time 09-08 05:40:26.729 W/tag ( 876): message threadtime 09-08 05:40:26.729 876 892 W tag : message long [09-08 05:40:26.729 876:0x37c W/tag ] message
⑤ 如何获得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日志
该目录下的日志不会自动删除,请及时清空,避免占用空间
⑥ 使用cocos2dx移植 android平台,怎么收集崩溃日志
很高兴能帮助您
如果你用的是windows系统作为开发环境,使用的是cocos2d-x3.2最新版的,你在一开始安装cocos2d-x的时候,会要求输入
NDK_ROOT
ANDROID_SDK_ROOT
ANT_ROOT
最新版的cocos2d-x使用了python来进行安装和编译程序的,所以你要先在你的windows系统上安装上python.安装好之后,下载最新版的cocos2d-x,然后,cd到这个目录下,你会看到一个有一个setup.py的文件,.py后缀的文件就是python的脚本文件了。是要用python来运行的。如果你安装好python之后设置好了python的环境变量,这个时候,你只要在命令行里运行:
python setup.py就可以了。
然后你就可以看到要求你输入的这三个路径了。
这三个工具的所在路径,这几个路径输入对了之后,你的cocos2d-x就安装好了,这个时候,在cmd里创建一个新项目,创建的方法是在命令行里输入:
cocos new youprojectname -p com.youcom,youprojectname -l cpp -d 你的新建项目所在路径
然后回车,你就可以看你的的项目会在你的新建项目路径下有一个youprojectname的文件夹,打开,你就可以看到里边有各个系统的project文件夹了,还有一个Class和Resources的文件夹。这个时候,你在命令行里cd到你的proj.android文件夹下,使用命令:
python bulid_native.py
就可以对你的安卓新建的helloworld项目进行编译了。不出意外,要不然一分钟就编译好了。会生成一个libcocos2dcpp.so在你的pro.android/libs/armabi的路径下。然后打开你的ADT,也就是eclipse,进入pro.android目录,导入android项目到eclipse。这个时候可能会报一个cocos2d-x的lib库错误,只要把cocos2d-x的
cocos2d/cocos/platform/android/java/src
目录下的文件夹复制到pro.android/src下就可以解决这个问题了。
然后,接上你的android手机,并且在手机中打开开发者模式。点击程序远行设置,选择使用设备运行。在弹出的一个选择手机设备的框时选择run,不一会,你的helloworld项目就可以在手机上看到了。
如果要调试,你可以在eclipse中打开logcat,看到cocos2d-x的log输出信息。
总的来说,android最好的开发环境还是mac系统。因为在mac系统下很多linux命令都可以使用。不像windows系统比较蹩脚。
你的采纳是我前进的动力,
记得好评和采纳,答题不易,互相帮助
⑦ 如何抓取Android系统APP测试的日志
近日看到一篇文章,总结的不错,对刚接触手机端测试的人很有帮助,记录下来备用。 现在我们测试时,开发会先在本地机上打好测试包,自己安装,测完一轮,开发修改好后,再打一个包提测。以下是功能测试时需要注意的点: 1、登录 ●登录用户名和密码错误时,界面有提示信息 ●用户主动退出登录后,下次启动APP时,应该进入登录界面 ●对于支持自动登录的APP,数据交换时 ,是否能自动登录成功且数据库操作无误 ●密码更改后,登录时是否做到了有效数据的校验 ●对于未登录时一些页面的操作,是否做了控制 ●切换账号登录,检验登录的信息是否做到及时更新 ●对于多个端都进行操作时,确保数据库操作无误,且每个端可以及时看到数据的更新 ●对于一些软件,支持一个账号只允许登录一台机器,这时,需要检查账号登录多个手机时,是否将原用户剔除,且能够给出提示信息 ● APP切换到后台时,再次切换到前台的测试,如登录时,有电话打进来 2、离线 离线是应用程序在本地的客户端会缓存一部分数据以功程序下次调用 ●对于一些程序,需要在登录进来后,这时没有网络的情况下可以浏览本地数据 ●对于无网络时,刷新获取新数据时,不能获取数据且能给出友好提示 ●切换到后台,再次切换到前台时,可以正常查看 ●离线后又连上网,这时对数据有更新时,需要从服务器端获取新数据来更新客户端数据,且要更新本地缓存信息 ●对于一些界面的数据不提供离线查看,需要给出相应提示且界面更新后无任何数据 3、sqlite数据库 android和IOS客户端都采用了sqlite数据库, 当APP需要在客户端保存数据时,它们会创建相应的数据库表,最常见的就是对账号的保存,这时的测试点主要有: ●跟一般数据库一样,需要见擦数据的增,删,改,查 ●客户端即用即建,当表不存在时,是否会自动创建 ●数据表被删除后,新建的表中的数据能否自动从服务器端中获取回来兵保存 ●当对数据进行了修改,删除,客户端和服务器端能否有相应的更新 ●获取数据,客户端是从直接从客户端获取还是和服务器端的数据进行比较 ●对于客户端从服务器端更新的数据,客户端是否有保存于本地。 4、个人提的bug注意点: ●因为ios系统有不断的更新,所以会出现这样那样兼容性的问题,其实我们软件中有一点,我记得很清楚,就是在送人彩票环节,赠送成功后会弹出一个温馨提示(问用户是,否要提醒用户领取),用户一旦点了【好的】,会跳到一个短信提醒框,此时就会出错,在苹果5上都没事,一旦在4s上运行就有可能付出闪退。 ●如果是同一个用户,那么她在android,ios上登录后,记录应该都是一样的。 ●一款手机软件在android系统上测试要特别注意,android手机款式多,内存,分辨率不一,所以测试难过也比较大。我们的软件有一个问题一直走不去,就是在小手机上,如果应用开多,占内存大了,就会出现闪退。 ●有新的版本要上线前,一定要测旧的版本,不能因为新版本上线了,老版本就不能用了,用老版本的用户还是大有人在。有一次,我用新版本注册的用户去玩老版本,结果就有有错过,当然这样玩的人很少。 ●如果一页面里有很多条记录里,要注意上下多滑动,我在测试过程中,好几次在上下滑动中又由于数据出现错误,导致闪退,尤其是android. ●到了某个页面,突然断网了,然后你在不知情的情况下,点击某个按钮想继续往下走,此时,不能出现闪退的情况,而要给出断网提示。 ●文本框校验时采用等价类划分法,边界值法,错误推测法与场景法,至少这些方法的概念,自己网上去搜。 ●很多手机app在打开后,一般用户都不需要先注册登录,到了合适的地方,弹出合适的提示,很好友的让用户去登录。当然有些页面,而且有时没有判断,未登录去点一些按钮,有可能会闪退。未登录与登录显示的页面是完全不一样的,要仔细测。 ●用户登录状态太久,sessionId会过期,会出现“虽然是登录状态,系统会提示用户没有登录。” ●外部软件需要更新导致自家软件闪退。我公司是一款博彩类软件,用户需要通过支付宝或财付通支付,有一次在用支付快捷支付时,提示我支付快捷支付需要更新,我就点了更新,更新完成后,我们的软件就异常退出了。 ●输入数据,点某颗按钮,会出现错误提示,有时不管这个提示,继续猛点这个按钮,会出现出人意外的结果哦。 ●上线前一定要测一下软件更新,我好几次这里没测,结果挨了批。
⑧ 如何获取 android 的系统日志
读取日志需要的权限
1
<uses-permission android:name="android.permission.READ_LOGS"/>
主要代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package mt.fzgh;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class MyLog
{
public static class MLog //<a href="https://www..com/s?wd=%E9%9D%99%E6%80%81%E7%B1%BB&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">静态类</a>
{
public static void getLog()
{
System.out.println("--------func start--------"); // 方法启动
try
{
ArrayList<String> cmdLine=new ArrayList<String>(); //设置命令 logcat -d 读取日志
cmdLine.add("logcat");
cmdLine.add("-d");
ArrayList<String> clearLog=new ArrayList<String>(); //设置命令 logcat -c 清除日志
clearLog.add("logcat");
clearLog.add("-c");
Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); //捕获日志
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); //将捕获内容转换为BufferedReader
// Runtime.runFinalizersOnExit(true);
String str=null;
while((str=bufferedReader.readLine())!=null) //开始读取日志,每次读取一行
{
Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); //清理日志....这里至关重要,不清理的话,任何操作都将产生新的日志,代码进入死循环,直到bufferreader满
System.out.println(str); //输出,在logcat中查看效果,也可以是其他操作,比如发送给服务器..
}
if(str==null)
{
System.out.println("-- is null --");
}
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("--------func end--------");
}
}
}
这里比较令人纠结的一点就是日志的清理 logcat -c 如果不加入 清理 在buffer满为止,代码自身能够迭代6~7次....
附带一份logcat的 命令...不过好像 过滤器 指令有问题....慎用
选项 说明
-s 默认设置过滤器
- f 文件 输出到日志文件
-c 清除日志
-d 获取日志
-g 获取日志的大小
- v 格式 设置日志(见下面的格式打印格式)
- v 格式 例
brief W/tag ( 876): message
process W( 876) message (tag)
tag W/tag : message
thread W( 876:0x37c) message
raw message
time 09-08 05:40:26.729 W/tag ( 876): message
threadtime 09-08 05:40:26.729 876 892 W tag : message
long [09-08 05:40:26.729 876:0x37c W/tag ] message
⑨ android 怎么捕获app异常闪退的日志
1、通过集成第三方SDK,如网络统计、友盟统计等
2、发版时使用加固工具,他们也会收集错误日志,如360加固
3、在程序中添加程序异常崩溃的捕捉代码,保存到本地文件中。