一个个在手机 设置程序管理 一个个 结束进程好麻烦,也不想因为这个再去安装 app管理软件,不如写个脚本 一键清理
此 脚本要 手机Root(主要是把文件放入systemin 下,并设置为可执行,不root无法使用chomd命令)
Adb 调试工具,网上一大堆,可自行下载
说思路
- 获取进程的包名(因为包名比PPID 更能让人看的懂)
- 生成个含有要结束进程的文件
- 把所有要结束的进程写入脚本,放入手机并设置可运行
- 手机直接执行脚本
好,动手环节
先用 命令adb shell ps >c:app.txt 获取进程及包名,并写入 C盘的 app.txt 文本内.
各字段的含义:
USER 进程当前用户
PID 进程ID
PPID 父进程ID
VSIZE 进程的虚拟内存大小,以KB为单位
RSS 实际占用的内存大小,以KB为单位
WCHAN 进程正在睡眠的内核函数名称;
PC Program Counter
NAME 进程状态及名称
可以用命令 adb shell am force-stop 包名 来结束进程 ,如 酷我音乐盒 。就是
adb shell am force-stop cn.kuwo.player
从 app.txt 分离出包名,这里我用的 是python 的脚本,获取com.xxx.xxx与cn.xxx.xxx 开头的包名(国内多数的安卓程序多用这两个)
Python 的代码如下 arry.py
1 #coding=utf-8 2 import os 3 import math 4 5 prefix ="echo -e am force-stop " 6 perfixEndFirst =" >/system/bin/d" 7 perfixEnd =" >>/system/bin/d" 8 resultArr =[] 9 resultStr="" 10 11 f=open('app.txt', 'r') 12 s=f.readlines() 13 #count = len(s) 14 15 for t in range(1,len(s)): 16 str = s[t-0] 17 if str != None and "000 S " in str: 18 strSName = str.split("000 S ") 19 if strSName[1] != None: 20 strName = strSName[1].replace(" S ","") 21 if strName.startswith("com.") or strName.startswith("cn."): 22 #插入数组 23 resultArr.insert(0,strName.strip(' ')) 24 print(strName) 25 26 27 #resultStr = resultStr + "echo " + "#!/system/bin/sh" + perfixEndFirst +" " 28 for r in resultArr: 29 resultStr = resultStr + prefix + r+ perfixEnd+" " 30 31 resultStr = resultStr + 'echo -e "echo Success!" >>/system/bin/d' 32 with open("d.sh","w") as f: 33 f.write(resultStr) 34 35 os.system('pause')
在其目录下 生成一个 叫”d.sh”的文件,(d就是delete的首字母)
我们可以用记事本打开 在d.sh 文件,其结果如 下
这里,我是用 echo 将字符串写入手机的 /system/bin/d 文件内,而不是 将文件push到 手机上,不知道为什么产生了乱码与不能换行(不方便阅读与维护)
可以将 s.sh 全部复制到黏贴板,打开一个adb 的调试窗口并提权到root,然后黏贴
然后 设置文件d 为可执行 chmod 777 /system/bin/d
然后,就可以在 普通用户下,调用该脚本了,
运行结束会的 Success! 提示
在手机上用 “终端模拟器”,调用时要su 一下,不提权会出错,个人现在还没有弄明白为什么
清除后台,一身轻松。。
如果后期加入别的 包名中微博,可以在 写入
echo -e am force-stop com.sina.weibo >>/system/bin/d 即可。