我现在是根据 pidof 命令获取对应包名为进程名的进程 pid ,然后用 logcat --pid 来过滤。
但是这样有两个问题:
1 ) app 重启后,pid 发生改变,我必须重新运行 logcat ;
请教大神直接根据包名过滤的方法。
|  |      1dullwit      2023-07-05 15:22:51 +08:00 | 
|      2Masoud2023      2023-07-05 16:12:22 +08:00 没做过安卓开发,安卓那个 busybox 有 grep 和 xargs 之类的工具吗? 或许可以组合一个命令出来? | 
|      3winzkh      2023-07-05 16:43:48 +08:00  1 @Masoud2023 #2 安卓没有 busybox ,用的是 toybox | 
|  |      4LLaMA2      2023-07-05 17:47:44 +08:00 但你输入 logcat 实际上等于 logcat *:D 如果你要所有的日志那就 logcat *:V 这里的*是你在 anroid 中 log 制定的 tag ,*通配所有,如过还要根据 packgename 做 filter 那就 logcat *:V | grep "我的包名" | 
|      5vyronlee      2023-07-05 19:04:39 +08:00 via iPhone 1 楼的 pidcat ,好用又美观 | 
|  |      6rekulas      2023-07-05 21:04:30 +08:00 pidcat win10 测试可用  但感觉日志似乎还是不全 | 
|      7riverskyfang      2023-07-06 12:52:06 +08:00 把 uid 打印出来,然后根据 uid 过滤 | 
|  |      8behindeye      2023-07-06 13:58:54 +08:00 要把 uid 打印,跟进 uid 来过滤 | 
|  |      9zhwguest OP @dullwit 这个没看出来比 pidof 命令对我的需求有多大帮助啊,这难道不也是先得到 pid ,然后过滤么。先拿到 Pid 再用 pid 过滤就会有 pid 变更或者不完整的问题啊。 @Masoud2023 我现在就是用的一个组合命令 adb logcat --pid=$(adb shell pidof com.xxx.yyy),我的问题不是如何获取 Pid ,而是使用 Pid 有天生的缺陷,它不持久和唯一; @ye4tar 我用 logcat *:V 并没有看到输出 package name ,我的 adb 版本是 Version 34.0.1-9680074 @riverskyfang @behindeye 谢谢,uid 相对于 pid 来说,的确是持久化和唯一化的,是非常好的参数。但是您说的打印 uid 是指可以通过 adb 的参数来打印还是说要通过修改程序?我还不知道如何打印出来 | 
|  |      10dullwit      2023-07-07 07:59:11 +08:00 via iPhone @zhwguest pidcat 命令后面只需要跟 package ,就算重启 app 变化 pid 也没关系,也能正常获取日志 | 
|  |      12behindeye      2023-07-07 11:45:54 +08:00 @zhwguest  adb shell pm list packages -U |grep com.android.bluetooth ,这个命令可以过滤出你的应用的 uid ; 然后 adb logcat --uid 10181 过滤日志 | 
|  |      13zhwguest OP | 
|      14riverskyfang      2023-07-08 17:26:12 +08:00  1 @zhwguest  adb logcat -v threadtime,uid | 
|  |      15zhwguest OP @riverskyfang 好用,感谢~~~ | 
|  |      16SupperMary      2023-07-09 09:49:06 +08:00 打 log 的时候用相同的 tag 打出来,可以 logcat -s your_tag 这样看 |