Android PC端用ADB抓取指定应用日志实现步骤
主要功能:
用于在PC端通过ADB工具抓取指定android真机上运行的指定包名应用的调试日志,并生成本地txt文件。
实现步骤:
1、准备ADB调试软件;
2、根据包名找到进程pid;
新建一个txt文件,重命名为“getpid.bat”,把下面代码复制到该文档中,保存;
包名“com.wtoe.demo”可替换为自己所需要抓取日志的包名。
@echo off adb shell “ps | grep com.wtoe.demo”
3、根据包名找到进程pid;
新建一个txt文件,重命名为“catlog.bat”,把下面代码复制到该文档中,保存
文件路径“F:/android_log/001.log ”可替换为自己电脑的任意文件路径;文件无需创建,运行时,会自动创建。
@echo off
for /f "tokens=2 delims= " %%i in ('getpid.bat') do adb logcat | find "%%i" F:/android_log/001.log
pause
#如果该包名有多个进程pid(守护进程等),都会打印到日志中。
4、将脚本文件“getpid.bat”、“catlog.bat”剪切到adb目录中
5、将android手机用数据线连接电脑,手机打开开发者调试模式(若未开启开发者模式,一般可以进入系统-关于手机-全部参数 等界面,连续点击版本7次左右可开启)
6、点击运行“cmd.exe”,先运行命令“adb devices”,查看是否有真机连接上电脑adb。
7、双击运行 “catlog.bat”即可(不要关闭命令窗口,关闭窗口即停止抓取日志)。
8、查看日志文件。可能存在中文字符乱码的问题,更改编码格式就可以了。
补充知识:android studio带文件和行输出的logcat
实现的效果
因之前写的C/C++打印都是带上文件名和行数的,自学到android 的logcat,发现错误时候会直接鼠标点击跳转到相应的代码处,遂自己封装下一个函数,能够打印文件,行数并且支持直接的鼠标跳转,很方便调试。deep参数可以自定义深度,比如 1 代表上一个方法的调用处,但是有时候可能有问题,不带深度的打印目前没有发现问题。
package m.hajistark.main;
import android.util.Log;
/**
* Created by hajistark on 2019/2/18.
*/
public class LogPrint {
private static String TAG = "conlog ";
public static String Line() {
StackTraceElement ste = new Throwable().getStackTrace()[2];
return "(" + ste.getFileName() + ":" + ste.getLineNumber() + ") ";
}
public static String Line(int deep) {
StackTraceElement ste = new Throwable().getStackTrace()[2 + deep];
return "(" + ste.getFileName() + ":" + ste.getLineNumber() + ") ";
}
public static void i(String Str) {
Log.i(TAG + Line(), Str);
}
public static void w(String Str) {
Log.w(TAG + Line(), Str);
}
public static void d(String Str) {
Log.d(TAG + Line(), Str);
}
public static void d(String Str, int deep) {
Log.d(TAG + Line(deep + 1), Str);
}
public static void e(String Str) {
Log.e(TAG + Line(), Str);
}
public static void e(String Str, int deep) {
Log.e(TAG + Line(deep + 1), Str);
}
public static void c(Exception e) {
e.printStackTrace();
}
}
以上这篇Android PC端用ADB抓取指定应用日志实现步骤就是小编分享给大家的全部内容了,希望能给大家一个参考。
- Oracle导入导出常用命令
- Spring Cloud实战小贴士:Zuul处理Cookie和重定向
- 设计模式之代理模式(二)CGLIB动态代理实现
- ios手势复习值之换图片-转场动画(纯代码)
- 顺序广播和无序广播
- Netflix Zuul与Nginx的性能对比
- 最有价值的50道java面试题(一)
- 用 Python 从零开始玩微信跳一跳
- ios地图小例子和手势的使用 供大家参考一下呦
- Spring Cloud源码分析(四)Zuul:核心过滤器
- basicAnimation移动图形
- 一个layer可以跟着画完的线移动ios程序 好玩啊。
- 最有价值的50道java面试题(二)
- android自定义属性
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 程序员技术选型:写Go还是Java?
- 用python爬虫简单网站却有 “多重思路”--猫眼电影
- 对开发者而言,GitHub Profile可能是比简历更好的求职利器
- R语言中GLM(广义线性模型),非线性和异方差可视化分析
- leetcode树之二叉树的深度
- PowerBI DAX 库存余量模型与计算
- 20种小技巧,玩转Google Colab
- 图深度学习入门教程(九)——图滤波神经网络模型
- 技术分享 | 我的内存去哪儿?生产实践
- 数据传输 | DTLE 3.20.09.0 来啦!
- R语言对巨灾风险下的再保险合同定价研究案例:广义线性模型和帕累托分布Pareto distributions分析
- 精解四大集合框架:Set核心知识总结
- NeurIPS 2020 | 一种崭新的长尾分布下分类问题的通用算法
- 精解四大集合框架:Map核心知识总结
- 厉害了,Matplotlib还能这样画散点图!