本文的目的是介绍如何获取Android崩溃日志?的详细情况,特别关注android查看崩溃日志的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解如何获取Android崩
本文的目的是介绍如何获取 Android 崩溃日志?的详细情况,特别关注android查看崩溃日志的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解如何获取 Android 崩溃日志?的机会,同时也不会遗漏关于Android iOS常用APP崩溃日志获取命令方法、Android M:如何获取所有进程UID?、Android View 如何获取焦点、android – Calllogs返回所有日志调用以及短信日志,我如何只过滤呼叫日志?的知识。
本文目录一览:- 如何获取 Android 崩溃日志?(android查看崩溃日志)
- Android iOS常用APP崩溃日志获取命令方法
- Android M:如何获取所有进程UID?
- Android View 如何获取焦点
- android – Calllogs返回所有日志调用以及短信日志,我如何只过滤呼叫日志?
如何获取 Android 崩溃日志?(android查看崩溃日志)
我有一个不在市场上的应用程序(使用调试证书签名),但希望在我的应用程序崩溃时获取崩溃日志数据。我在哪里可以找到我的应用程序崩溃原因的日志?
答案1
小编典典如果您的应用程序正在被其他人下载并在远程设备上崩溃,您可能需要查看 Android 错误报告库。如果它只是在你自己的本地设备上,你可以使用LogCat.
即使在发生崩溃时设备没有连接到主机,连接设备并发出adb logcat
命令将下载整个 logcat
历史记录(至少在某种程度上它被缓冲,这通常是日志数据的loooot,它不是无限的)。这些选项中的任何一个都回答了您的问题吗?如果不是,您可以尝试澄清您正在寻找的更多内容吗?
Android iOS常用APP崩溃日志获取命令方法
前言
在日常的测试工作过程中,app可能会出现闪退崩溃的情况,这个时候就需要测试同学快速抓取到崩溃日志,来有效的辅助开发定位问题,快速的去解决问题。
分享Android & iOS双端常用的崩溃日志获取方法
Android 崩溃日志获取方法
- 使用adb命令获取
# 语法: adb shell logcat # 可过滤app包名、日志级别来快速定位 adb shell logcat -v -v -v time>E:/crash.txt
- Android studio 内的logcat
设备连接电脑,在Android studio 内的logcat中查看实时日志,需要选择当前连接的手机
如果使用的是debug包,也可选择对应debug进程,即对应APP包名
可直接搜索关键字快速定位,如: begin、crash、Exception、fatal
也可过滤app包名、日志级别来快速定位
- adb bugreport命令(耗时会比较久)
# 语法: adb bugreport <导出路径> # 会导出文件至E盘,文件为zip压缩文件 adb bugreport E:/
- 手机本地文件
一般的项目会在app发生崩溃后,在本地文件内写入一份崩溃日志
可以询问项目开发同学日志存放路径,再使用adb命令或手机分享功能,获取日志即可
- 第三方平台
如果项目有接入第三方平台,如:bugly,则可在第三方平台直接搜索即可(如:机型、出现时间等)
iOS 崩溃日志获取方法
- 第三方软件(爱思助手、iTools)
需iPhone设备连接电脑,第三方软件工具内会有<崩溃分析>/<查看崩溃日志>功能,打开即可查看app崩溃日志
iPhone设备存储崩溃日志好像有上限,达到上限之后不会在生成,所以需要定期清理
- 第三方平台
如果项目有接入第三方平台,如:bugly,则可在第三方平台直接搜索即可(如:机型、出现时间等)
- iPhone手机自带功能
操作路径:设置→隐私→分析与改进→分析数据
然后按照日期+app名来获取即可
以上就是Android iOS常用APP崩溃日志获取命令方法的详细内容,更多关于APP崩溃日志命令的资料请关注其它相关文章!
- Android PC端用ADB抓取指定应用日志实现步骤
- Android之在linux终端执行shell脚本直接打印当前运行app的日志的实现方法
- iOS 捕获程序崩溃日志
- Android app会crash的原因及解决方法
- 在Android界面上显示和获取Logcat日志输出的方法
Android M:如何获取所有进程UID?
我曾经通过获取通过getRunningAppProcesses()方法获得的uid来做到这一点.显然在Android M中已经更改为仅返回您的应用程序包名称,如here所示.
我的问题是:还有另一种方法来获取Android M中每个正在运行的进程的Name和UID吗?
以下是我之前如何做到这一点的示例,我想在Android M上重新创建此功能.
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); PackageManager pm = context.getPackageManager(); for (int i = 0; i < procInfos.size(); i++) { try { String packageName = procInfos.get(i).processName; String appName = ""; try { appName = pm.getApplicationLabel( pm.getApplicationInfo(packageName,PackageManager.GET_Meta_DATA)) .toString(); } catch (NameNotFoundException e) { appName = ""; } int uid = procInfos.get(i).uid; long ulBytes = TrafficStats.getUidTxBytes(uid); long dlBytes = TrafficStats.getUidRxBytes(uid); // Do other stuff.
非常感谢任何帮助.谢谢!
解决方法
PackageManager pm = context.getPackageManager(); ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningServiceInfo> runningServices = am.getRunningServices(Integer.MAX_VALUE); for (ActivityManager.RunningServiceInfo service : runningServices) { String appName; try { appName = pm.getApplicationInfo(service.process,0).loadLabel(pm).toString(); } catch (PackageManager.NameNotFoundException e) { appName = null; } int uid = service.uid; long ulBytes = TrafficStats.getUidTxBytes(uid); long dlBytes = TrafficStats.getUidRxBytes(uid); }
文档说明这不适用于生产.我也没有做太多测试.如果不符合您的要求,请发表评论.我能想到的另一件事就是在shell中解析运行ps的输出.
UPDATE
在shell中解析ps的输出,我们可以获得当前正在运行的应用程序.例:
PackageManager pm = context.getPackageManager(); // Get the output of running "ps" in a shell. // This uses libsuperuser: https://github.com/Chainfire/libsuperuser // To add this to your project: compile ''eu.chainfire:libsuperuser:1.0.0.+'' List<String> stdout = Shell.SH.run("ps"); List<String> packages = new ArrayList<>(); for (String line : stdout) { // Get the process-name. It is the last column. String[] arr = line.split("\\s+"); String processName = arr[arr.length - 1].split(":")[0]; packages.add(processName); } // Get a list of all installed apps on the device. List<ApplicationInfo> apps = pm.getInstalledApplications(0); // Remove apps which are not running. for (Iterator<ApplicationInfo> it = apps.iterator(); it.hasNext(); ) { if (!packages.contains(it.next().packageName)) { it.remove(); } } for (ApplicationInfo app : apps) { String appName = app.loadLabel(pm).toString(); int uid = app.uid; long ulBytes = TrafficStats.getUidTxBytes(uid); long dlBytes = TrafficStats.getUidRxBytes(uid); /* do your stuff */ }
Android View 如何获取焦点
Android 新启动 Activity,dialog 或者其他窗体中中包含 EditText, 新启动的 activity 的焦点默认在 EditText 上,这是 android 系统会弹出软键盘,挤压 activity 本来的界面,影响美观。
因此最好在新窗体创建时,最好在 onCreate () 方法中将焦点放在另一个 view 上. view 使用 requestFocus () 焦点,但是如果让 button 或者 textView 之类控件直接使用 requestFocus () 方法,则无法获取焦点,焦点会依然在 editText 上。
只能在使用 View 的 requestFocus () 方法之前调用下面 2 个方法,view 才可获取焦点:
view.setFocusable(true);
view.setFocusableInTouchMode(true);
然后调用 requestFocus () 即可获取焦点。
android – Calllogs返回所有日志调用以及短信日志,我如何只过滤呼叫日志?
如何仅过滤呼叫的呼叫记录?
我正在使用以下代码.
String[] strFields = { android.provider.CallLog.Calls.NUMBER,android.provider.CallLog.Calls.TYPE,android.provider.CallLog.Calls.CACHED_NAME,android.provider.CallLog.Calls.CACHED_NUMBER_TYPE,android.provider.CallLog.Calls.DATE }; String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; Uri calluri = Uri.parse("content://call_log/calls"); Cursor mCallCursor = getContentResolver().query( calluri,strFields,null,strOrder );
我正在使用Samsung Note 2进行测试.
解决方法
我们今天的关于如何获取 Android 崩溃日志?和android查看崩溃日志的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android iOS常用APP崩溃日志获取命令方法、Android M:如何获取所有进程UID?、Android View 如何获取焦点、android – Calllogs返回所有日志调用以及短信日志,我如何只过滤呼叫日志?的相关信息,请在本站查询。
本文标签: