手把手教你使用ADB卸载手机内置App软件(adb卸载系统自带app)
376
2022-08-20
《自拍教程61》Python adb反复启动退出高德地图App
准备阶段
adb shell am start + 指定的Package包名 + Activity活动页面,可以打开App
可以通过adb shell 里边的pm list package | grep amap来查看包名
最终我们获取到高德地图的包名是:com.autonavi.amapauto,
可以在高德地图App界面,通过adb shell 里边的dumpsys window | grep Activity,来查看当前活动窗口的Activity,
最终是: com.autonavi.amapauto/com.autonavi.amapauto.MainMapActivity
adb shell am force-stop + 指定的Package包名,可以直接关闭App,无需加Activity。
注意:自动截取过程中,需要确保后台的logcat日志,高德地图log,tombstone等都是正常在后台打开并持续截取的。
Python批处理脚本形式
记住批处理脚本的精髓:顺序批量执行
# coding=utf-8
import os
import time
for i in range(100000):
print("正在进行第%s轮高德地图重启测试" % i)
os.system("adb shell am start com.autonavi.amapauto/com.autonavi.amapauto.MainMapActivity")
os.system("adb shell screencap -p /sdcard/a.png")
os.system("adb pull /sdcard/a.png D:\\MapTest\\once_%s.png" % i) # App启动中的截图
time.sleep(5)
os.system("adb shell screencap -p /sdcard/a.png")
os.system("adb pull /sdcard/a.png D:\\MapTest\\twice_%s.png" % i) # App启动完成的截图
os.system("adb shell am force-stop com.autonavi.amapauto")
os.system("pause")
Python面向过程函数形式
只需要一个函数reboot_apk,但是需要传递2个参数进去。
# coding=utf-8
import os
import time
# 封装,只留2个参数接口
def reboot_app(package_name, activity_name):
os.system("adb shell am start %s/%s" % (package_name, activity_name))
os.system("adb shell screencap -p /sdcard/a.png")
os.system("adb pull /sdcard/a.png D:\\MapTest\\once_%s.png" % i) # App启动中的截图
time.sleep(5)
os.system("adb shell screencap -p /sdcard/a.png")
os.system("adb pull /sdcard/a.png D:\\MapTest\\twice_%s.png" % i) # App启动完成的截图
os.system("adb shell am force-stop %s" % package_name)
# 调用
for i in range(1000000):
print("正在进行第%s轮高德地图重启测试" % i)
reboot_app("com.autonavi.amapauto", "com.autonavi.amapauto.MainMapActivity")
os.system("pause")
Python面向对象类形式
以"万物皆可归类"的思想, 先抽象化出一个类来,
类名一般建议用"名词", 所以我们命名为"AppRebooter",
代表App反复重启器, 且一般要驼峰式(首字母大写)来规范类的命名.
养成良好的类的初始化(init)的习惯,
初始化过程中,需要说明是什么App的package和acitivity
这个AppRebooter类, 目前只需要一个重启apk的函数(动作功能)就足够了,
函数的命名一般建议用"动词", 所以我们命名为: "reboot_apk" .
类是一个抽象的事物, 必须实例化成具体的对象后,
才能进行调用, 所以我们实例化并命名成了a_obj, 表明是一个对象.
实例化成具体对象后, 对象就可以调用reboot_apk这个函数了.
# coding=utf-8
import os
import time
class AppRebooter():
def __init__(self, package_name, activity_name):
self.package_name = package_name
self.activity_name = activity_name
def reboot_app(self):
os.system("adb shell am start %s/%s" % (self.package_name, self.activity_name))
os.system("adb shell screencap -p /sdcard/a.png")
os.system("adb pull /sdcard/a.png D:\\MapTest\\once_%s.png" % i) # App启动中的截图
time.sleep(5)
os.system("adb shell screencap -p /sdcard/a.png")
os.system("adb pull /sdcard/a.png D:\\MapTest\\twice_%s.png" % i) # App启动完成的截图
os.system("adb shell am force-stop %s" % self.package_name)
if __name__ == '__main__':
a_obj = AppRebooter("com.autonavi.amapauto", "com.autonavi.amapauto.MainMapActivity")
for i in range(1000000):
print("正在进行第%s轮高德地图重启测试" % i)
a_obj.reboot_app()
os.system("pause")
运行方式与效果
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~