kill掉android应用的bat

本文介绍了一种通过自定义批处理脚本adbKill.bat来结束指定Android应用的方法。该脚本利用adb shell ps app命令获取正在运行的应用信息,并通过解析输出结果来查找目标应用的PID,进而使用kill命令终止该应用。

http://blog.youkuaiyun.com/chenghai2011/article/details/7332579文章里面,我介绍了可以通过adb am start来启动android应用,但android里面并没有提供命令来结束应用。android采用的linux内核,因此可以用kill命令来结束进程,但kill命令只支持用进程pid来干掉进程,因此我写了一个bat来便于结束android应用。

[vb]  view plain copy
  1. @echo off  
  2. setlocal  
  3. for /f "tokens=1,2,3,4,5,6,7,8,9" %%i in ('adb.exe shell ps app') do (  
  4.     set str=%%q  
  5.     setlocal enabledelayedexpansion  
  6.     set appName=!str:~0,-1!  
  7.     REM echo !appName!  
  8.     if "!appName!"=="%1" (  
  9.        @echo begin to kill !appName!,pid:%%j  
  10.        call adb.exe shell kill -9 %%j  
  11.     )  
  12. )  
  13. endlocal  
 

你将上面的脚本保存为adbKill.bat,以后要干掉应用,执行adbKill 应用名就可以了,例如adbKill com.android.email。

 

稍微解释一下上面的bat脚本:

1.用adb.exe shell ps app而不用adb.exe shell ps是因为我只需要kill掉android应用,所有我用app来过滤到一些进程。

2. set appName=!str:~0,-1!是因为adb.exe shell ps输出的没一行后面都有一个0x0d字符,所以需要将这个字符去掉。set appName=!str:~0,-1!的意思是bat里面取子字符串的语句,用!符号而不是%符号是因为for循环里面如果不开启delayedexpansion执行set是无效的。

<think>嗯,用户想用Windows的批处理脚本实现无限循环读取Android系统文件。首先,我需要理解用户的具体需求是什么。他们可能需要在Windows上通过adb命令不断地从Android设备读取某个文件的内容,比如日志文件或者系统状态文件,用于实时监控或调试。 接下来,我得考虑如何构建这个无限循环的结构。批处理脚本中通常使用`:label`和`goto`命令来实现循环。比如,使用`:start`标签,然后在循环体末尾用`goto start`来跳转回去,形成无限循环。同时,为了防止循环执行过快,可能需要在每次循环之间加入延迟,比如使用`timeout /t 5`来等待5秒,或者用`ping -n 5 127.0.0.1 >nul`这种技巧来延迟。 然后,读取Android系统文件需要使用adb命令。比如,用`adb shell cat /path/to/file`来获取文件内容。需要注意的是,有些系统文件可能需要root权限才能访问,所以可能需要先执行`adb root`和`adb remount`来获取权限,或者使用`adb shell su -c "cat /path/to/file"`。不过,不是所有设备都开启了root权限,这点需要用户确认自己的设备情况。 另外,用户可能需要处理文件路径中的空格或特殊字符,这时候在批处理脚本中要用双引号包裹路径,避免解析错误。同时,如果文件内容较大,可能需要考虑分页显示或者输出到本地文件,方便查看。例如,使用重定向将内容保存到本地的log.txt文件中,或者用`more`命令分页显示。 还要注意adb的稳定性,无限循环中如果adb连接断开,脚本可能会出错。可能需要加入错误处理,比如检查adb设备是否在线,或者使用`adb wait-for-device`来等待设备连接。引用中的例子,比如引用[3]里的脚本就用了`adb wait-for-device`,这可以确保设备连接后再执行后续命令,避免出错。 另外,用户可能需要实时查看文件的变化,比如监控日志文件的更新。这时候,每次循环读取文件时,可以记录上次读取的位置,只获取新增内容。不过,这可能比较复杂,需要更高级的处理,比如使用`tail`命令,但Androidadb shell可能不支持所有Linux命令,需要确认设备是否有`tail`可用。如果没有,可能需要每次读取整个文件,然后自己处理增量部分。 还有,无限循环的退出机制。用户可能需要按Ctrl+C来终止脚本,或者在脚本中加入条件判断,比如检测某个文件是否存在,或者用户输入来退出循环。例如,使用`choice`命令让用户选择是否继续,但如果是完全自动化的无限循环,可能不需要这个。 在权限方面,引用[3]中提到需要执行`adb root`和`adb remount`,这可能在某些情况下是必要的,特别是写入系统文件时。但用户的需求是读取,可能不需要remount,但有些系统文件即使只读也需要root权限。所以脚本中可能需要先获取root权限,否则读取会失败。 最后,测试脚本的时候,应该考虑adb的响应时间,避免循环执行过快导致设备无响应。适当的延迟是必要的。同时,处理输出信息,添加时间戳以便用户了解每次读取的时间,如引用[2]中的`%date% %time%`来显示当前时间。 综合这些考虑,我可以构建一个基本的脚本框架,包含无限循环结构、adb读取命令、延迟、错误处理和权限获取。然后根据用户的具体需求进行调整,比如文件路径、是否需要root、输出方式等。</think>根据需求,我将为您提供实现无限循环读取Android系统文件的Windows批处理脚本解决方案。以下是分步说明: ### 一、基础脚本实现 ```bat @echo off chcp 65001 >nul :start adb shell "cat /sys/class/power_supply/battery/status" 2>&1 timeout /t 3 >nul goto start ``` 参数说明: - `chcp 65001`:设置UTF-8编码支持中文路径[^3] - `timeout /t 3`:设置3秒间隔 - `adb shell cat`:核心文件读取命令 ### 二、增强功能版本 ```bat @echo off chcp 65001 >nul set FILE_PATH=/sys/class/thermal/thermal_zone0/temp :main_loop adb wait-for-device >nul adb root >nul 2>&1 set timestamp=%date%_%time:~0,2%%time:~3,2% echo [%timestamp%] 读取结果: adb shell "su -c 'cat %FILE_PATH%'" | findstr /v "daemon" timeout /t 5 >nul goto main_loop ``` 特性说明: 1. 自动等待设备连接(`adb wait-for-device`)[^3] 2. 获取root权限(`adb root`)[^3] 3. 带时间戳的格式化输出 4. 过滤无关信息(`findstr /v`) ### 三、关键实现要点 1. **权限处理**: - 需要先执行`adb root`获取root权限[^3] - 对于部分系统文件需使用`su -c`双重权限验证 - 特殊分区可能需要`adb remount`[^3] 2. **路径处理**: - 包含空格的路径需加双引号:`"cat "/sys/class/hwmon/hwmon0/name""` - 推荐使用绝对路径:`/proc/version` 3. **性能优化**: ```bat :: 减少adb初始化开销 adb kill-server adb start-server ``` ### 四、典型应用场景 1. 实时监控电池状态: ```bat set FILE_PATH=/sys/class/power_supply/battery/capacity ``` 2. 读取CPU温度: ```bat set FILE_PATH=/sys/class/thermal/thermal_zone0/temp ``` 3. 捕获内核日志: ```bat set FILE_PATH=/proc/kmsg ``` ### 五、注意事项 1. 部分系统文件需要SELinux权限: ```bat adb shell setenforce 0 ``` 2. 避免高频读取导致系统负载: - 建议间隔不低于1秒 - 关键参数可设置`timeout /t 5` 3. 异常处理建议: ```bat if errorlevel 1 ( echo 读取失败,正在重试... timeout /t 10 >nul ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值