在平时工作的过程中,很多重复性内容可以通过运行脚本文件来代替。一次编写,就能带来很大的效率提升。

今天跟大家分享一个简单的 Shell 脚本,只有区区 20 行左右的代码。

因为有时候我们测试某个应用程序需要先保证测试环境的干净,所以会手动卸载所有不必要的 App。而这个脚本的功能就是在知道包名的前提下,通过循环执行 adb uninstall 命令一次性卸载完指定的应用程序。

脚本的编写思路是这样的:

1、先将需要卸载的应用的包名(Package_Name)写入到一个 all_list 文件中;

2、通过 adb shell pm list packages -3 命令取出测试机中已安装的所有第三方应用的包名并将其输出到 list 文件;

3、通过 for line in list 语句遍历 list 文件,取出每行字符串并截取出包名;

4、将截取出的包名和 all_list 文件中的内容进行对比,如果有相同或者包含的关系,则通过 adb uninstall 命令进行卸载;

5、被卸载的应用包名将输出在终端。

以下为编写好的脚本:

#!/bin/bash
# 第三方应用包名输出到list文件
adb shell pm list packages -3 > list.txt
# 等待3秒
sleep 3s
# 遍历手机里的第三方app的包名
for line in $(cat list.txt); do
# 将packagename截取出来
name=${line:8}
# 遍历要卸载的包名
for line2 in $(cat all_list.txt); do
# 判断是否包含
if [[ $name =~ $line2 ]]; then
# 删除包名结尾的\r
package_name=$(echo $name | tr '\r' ' ')
# 执行adb卸载命令
adb uninstall $package_name
# 打印已卸载的包名
echo $package_name"已卸载"
fi
done
done

运行示例:

-> sh +x uninstall.sh
Success
com.tencent.qqpimsecure已卸载

欢迎关注微信公众号“测试开发Stack”,更多原创文章第一时间发布!

Shell脚本 | 一键卸载安卓App的更多相关文章

  1. Shell脚本 | 一键获取安卓应用活动名

    上篇文章提到,启动时间的计算需要用到应用启动页的活动名(Activity_Name). 如何获取活动名呢?通常有如下几种方式: 1.询问 Dev 同事 2.adb logcat ActivityMan ...

  2. 安装完Ubuntu后通过shell脚本一键安装软件

    安装完Ubuntu后通过shell脚本一键安装软件 以下代码中#是单行注释 :<<! ! 是多行注释. 运行的时候需要把多行注释去掉. 比如把以下代码保存为install.sh, 那么在终 ...

  3. Centos 6.4上面用Shell脚本一键安装vsftpd

    Centos 6.4上面用Shell脚本一键安装vsftpd install.sh #!/bin/bash if [ `uname -m` == "x86_64" ];then m ...

  4. Centos 6.4上面用Shell脚本一键安装mysql 5.6.15

    Centos 6.4上面用Shell脚本一键安装mysql 5.6.15  #!/bin/bash if [ `uname -m` == "x86_64" ];then machi ...

  5. shell脚本一键同步集群时间

    shell脚本一键同步集群时间 弋嘤捕大 椿澄辄 ψ壤 茇徜燕 ㄢ交涔沔 阚龇棚绍 テ趼蜱棣 灵打了个寒颤也没有去甩脱愣是拖着 喇吉辔 秋北酏崖 琮淄脸酷 茇呶剑 莲夤罱 陕遇骸淫  ...

  6. Shell脚本一键部署——源码编译安装MySQL及自动补全工具

    Shell脚本一键部署--源码编译安装MySQL及自动补全工具 编译安装MySQL 1.软件包 Mysql安装包 将安装包拖至/opt目录下,编辑一个脚本文件,将以下内容复制进去,然后source或者 ...

  7. Shell脚本一键安装LNMP环境

    https://sourceforge.net/projects/opensourcefile/files/ Nginx是一款高性能的HTTP和反向代理服务器.Nginx在反向代理,Rewrite规则 ...

  8. 该死的端口占用!教你用 Shell 脚本一键干掉它!

    1. 前言 大家好,我是安果! 在 Web 开发中,经常会遇到「端口被占用」的场景 常规解决方案是: 使用 lsof -i 命令查询占用端口的进程 PID 利用 kill -9 PID 干掉目标进程 ...

  9. shell脚本一键安装mysql5.7.x

    使用脚本一键安装mysql5.7.x,初始化数据库.启动数据库---- mysql版本号:源代码mysql5.7.10 linux版本号:centos6.5 x86_64 #!/bin/bash GR ...

随机推荐

  1. 各种学习Demo链接

    CSS3: 钟表:http://demo.qpdiy.com/hxw/CSS3/css3_clock.html CSS3各种旋转:http://demo.qpdiy.com/hxw/CSS3/css3 ...

  2. spoj COT2(树上莫队)

    模板.树上莫队的分块就是按dfn分,然后区间之间转移时注意一下就好.有个图方便理解http://blog.csdn.net/thy_asdf/article/details/47377709: #in ...

  3. Android多线程操作sqlite(Sqlite解决database locked问题)(2)使用事务处理的效果

    问题场景描述: 在页面中用到了ViewPager控件,ViewPager中的内容分别是两个ListView,两个ListView的数据都来自本地数据库(先从网络下载数据,然后更新本地数据库),在实际的 ...

  4. hdu 1541

    因为y的输入是从小到大,所以不用考虑y坐标的问题 只考虑x坐标就行 还有个小细节就是0<=x,y,<=32000  x和y取0的时候树状数组处理不到 x++就行了 #include < ...

  5. docker mac

    官网上有安装方法.已安装成功. 容器千万不能随便删 现在已经不用boot2docker,使用dockertools来安装docker,dockertools中包含docker-machine,等等. ...

  6. EBS中查看其他用户或所有用户的请求和输出文件

      R12: How To Configure Access To Request Output Of The Same Responsibility (Doc ID 804296.1) To Bot ...

  7. Android-Java-死锁

    死锁:程序不往下执行了,程序又没有结束,就一直卡在哪里: 在使用synchronized的时候要避免死锁,synchronized嵌套就可能会引发死锁,需要严格的检查代码,排除死锁发生的可能: 特意演 ...

  8. XAMPP配置基于虚拟目录、多域名的环境

      打开Apache 2.x 配置文件 http.conf 搜索Include etc/extra/httpd-vhosts.conf,然后去掉前面的#号 再编辑extra/httpd-vhosts. ...

  9. linux中yum命令的解析

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  10. Java 学习的几个基础实验(Learn by doing)

    0 引子 不少情况下,学生连开发环境都搭建不好,有了实验楼,这个问题基本就解决了. 实验楼是国内首家IT在线实训平台,拥有最丰富的计算机在线实验课,而且全部免费.创业团队对师生的服务非常贴心细致. 1 ...