分享一个快速将apk推入push到system目录并kill掉进程的脚本pushKill.bat。下面是脚本内容:
@echo off
set apkStr=%1
adb root
adb remount
if not defined apkStr (
@echo 请输入apk名称
set /p apkStr=%1)
set remain=%apkStr%
:loop
for /f "tokens=1* delims=\" %%a in ("%remain%") do (
rem 将截取剩下的部分赋给变量remain,其实这里可以使用延迟变量开关
set remain=%%b
set apkName=%%a
)
::如果还有剩余,则继续分割
if defined remain goto :loop
echo apkName=%apkName%
set apkDir=%apkName:.apk=%
rem 此处由于powershell使用补全键会把相对路径./也加进去
set apkDirName=%apkDir:.\=%
set apkDir=system/priv-app/%apkDirName%
if not exist %apkDir% (
rem 创建空目录%apkDir%
rem 创建非空目录,使用复制方法
echo %apkDir%目录不存在,已创建该目录!
adb shell mkdir %apkDir%
) else (
rem 目录%apkDir%已存在,无需创建
echo 目录%apkDir%目录已存在,无需创建!
)
adb push %apkStr% %apkDir%/
@echo kill对应进程
rem 需要配置aapt的系统环境变量或者找到androd sdk下的build-tools执行aapt命令
rem D:\android-sdk-windows\build-tools\31.0.0\aapt dump badging %apkStr% > %apkDirName%_dump.txt
aapt dump badging %apkStr% > %apkDirName%_dump.txt
rem 提取apk包名,提取第一个''的内容即为包名
for /f "tokens=2 delims=''" %%i in (%apkDirName%_dump.txt) do (
set pkgName=%%i
goto END
)
:END
echo apk包名:%pkgName%
rem 根据包名查找pid
adb shell "ps -A | grep %pkgName%" > %pkgName%.txt
set /p str=<.\%pkgName%.txt
set str="%str%"
set n=0
:STR_VISTOR
echo str = %str%
echo %n%
if %n% == 2 (goto END)
for /f "tokens=1,*" %%a in (%str%) do (
set a=%%a
set /a n+=1
REM 将剩余字符串赋值给变量
set str="%%b"
goto STR_VISTOR
)
:END
adb shell kill %a%
echo PID:%a%
REM 操作完后删除生成的%pkgName%.txt
del /s /q /f .\%pkgName%.txt
REM 操作完后删除生成的%apkDirName%_dump.txt
del /s /q /f .\%apkDirName%_dump.txt
pause
注意的是需要配置aapt的系统环境变量或者找到androd sdk下的build-tools执行aapt命令或者把build-tools下的aapt.exe拷到脚本同等目录下即可使用aapt dump badging %apkStr% > %apkDirName%_dump.txt命令。
运行脚本后会提示输入apk名称,输入apk名称或者TAB键自动补全。
或者输入脚本名称pushKill.bat + apk名称。
这样apk会自动push到system/app/MyApplication的对应名录下,可自行修改push的路径;push后会通过aapt获取apk的包名,用获取的包名查询apk对应的进程并杀死kill掉。这个脚本方便做系统应用开发的人员做调试。