江中游电脑版按键论坛教学总录:http://bbs.anjian.com/showtopic-697741-1.aspx
江中游安卓手机系统教学总录: http://bbs.anjian.com/showtopic-699643-1.aspx
江中游异次元
未来的夏娃
第7课 adb应用管理 1
本课命令有:
取当前应用包名类名
启动应用
关闭应用
注意一下:
因为应用的管理很多涉及到了安全所以部分命令是要root权限才可以,凡涉及到root的命令我会尽量说明
本课之前的文章我都是使用未root的物理手机测试的,可以免root
本课以按键精灵安卓版为例
一、取当前应用包名类名(免root)
如果要启动某一个应用就必须要知道这个应用的包名和类名才能启动,所以我们首先的要获取包名或类名,adb原生命令是这样的
- adb shell dumpsys window | findstr mCurrentFocus
复制代码老办法加入到adb.ini记事本中
- 当前包名类名= shell dumpsys window | findstr mCurrentFocus
复制代码大家可以先写下按键代码,来调试一下返回值
1、按键安卓版点到发现位置
- mCurrentFocus=Window{629eb29 u0
- com.cyjh.mobileanjian.vip/com.cyjh.mobileanjian.vip.activity.MainActivity}|18172|
复制代码2、按键安卓版点到用户中心位置
- mCurrentFocus=Window{2e0ec66 u0 com.cyjh.mobileanjian.vip/com.cyjh.mobileanjian.vip.activity.function.UserCenterActivity}|16776|
复制代码注意:
1、为什么不一样?
原来在应用中每一个界面都是一个类名,所以在使用有ui的应用中大家可以获取其类名并且直接启动到这个界面,是不是非常好?现在我们就来完善按键的代码,主是是过滤出来包名和类名。
2、每个应用获取的类名也不尽类同,比如按键这个返回值 :
com.cyjh.mobileanjian.vip/com.cyjh.mobileanjian.vip.activity.function.UserCenterActivity
理论上"/"斜杠前面 com.cyjh.mobileanjian.vip是包名,后面是类名,但按键这个就没走寻常路,斜杠后面即有包名也有类名,但是也有的应用就不这样表达,所以我并没有进一步过滤,而按键这个类名就是要把包名除掉:activity.function.UserCenterActivity
为了方便大家使用,我这里的按键代码是返回的数组
二、启动应用,启动应用必须要用到 取当前应用包名类名 返回的包名和类名(本命令要root权限)
启动应用adb原版命令是:
adbini记事本这样记录:按键代码,大家一定要注意我上面说的,取类名的方法,这个是进入到按键的变态游戏界面- Dim adb,设备数组,包类数组
- adb = "C:\adb\adb.exe "
- adbs = "C:\adb\adb.exe -s "
- adbcmd = "C:\adb\adb.ini"
- Call 启动服务()
- 设备数组 = 获取设备ID群()
- TracePrint 设备数组(0)
- //Call 安装应用(设备数组(0), "D:\ProgramData\按键精灵\按键精灵手机助手\apk\MobileAnJian.apk")
- 包类数组 = 取当前包类名(设备数组(0))
- TracePrint join(包类数组)'按键的包名类名一定要先记录好,这只不过是一个查询
- //理论上"/"斜杠前面 com.cyjh.mobileanjian.vip是包名,后面是类名,但按键这个就没走寻常路,斜杠后面即有包名也有类名,但是也有的应用就不这样表达,所以我并没有进一步过滤,而按键这个类名就是要把包名除掉:activity.function.UserCenterActivity
- Call 启动应用(设备数组(0), "com.cyjh.mobileanjian.vip", "/.activity.MainActivity")
- Function 取当前包类名(设备ID)
- Dim 命令, adbret, tmps, 位置
- Dim 临时数组(2)
- 命令 = Plugin.File.ReadINI("adb", "当前包名类名", adbcmd)'读取保存在ini文件中的命令
- TracePrint adbs & 设备ID & 命令
- adbret = Plugin.JzyCommand.Command(adbs & 设备ID & 命令, 1000)'使用我的插件来获取连接的设备
- TracePrint adbret
- tmps=split(adbret,"/")
- If UBound(tmps) > 0 Then '万恶的下标越界
- 位置 = instr(tmps(0), " u0 ")
- 包名 = right(tmps(0), len(tmps(0)) - 位置 -3)
- TracePrint 包名
- 位置 = instr(tmps(1), "}")
- TracePrint 位置
- 类名 = "/." & left(tmps(1), 位置 - 1)
- TracePrint 类名
- 临时数组(0) = 包名
- 临时数组(1) = 类名
- End If
- 取当前包类名 = 临时数组
- End Function
复制代码 按键代码,大家一定要注意我上面说的,取类名的方法,这个是进入到按键的用户界面- Dim adb,设备数组,包类数组
- adb = "C:\adb\adb.exe "
- adbs = "C:\adb\adb.exe -s "
- adbcmd = "C:\adb\adb.ini"
- Call 启动服务()
- 设备数组 = 获取设备ID群()
- TracePrint 设备数组(0)
- //Call 安装应用(设备数组(0), "D:\ProgramData\按键精灵\按键精灵手机助手\apk\MobileAnJian.apk")
- 包类数组 = 取当前包类名(设备数组(0))
- TracePrint join(包类数组)'按键的包名类名一定要先记录好,这只不过是一个查询
- //理论上"/"斜杠前面 com.cyjh.mobileanjian.vip是包名,后面是类名,但按键这个就没走寻常路,斜杠后面即有包名也有类名,但是也有的应用就不这样表达,所以我并没有进一步过滤,而按键这个类名就是要把包名除掉:activity.function.UserCenterActivity
- Call 启动应用(设备数组(0), "com.cyjh.mobileanjian.vip", "/.activity.function.UserCenterActivity")
- Function 取当前包类名(设备ID)
- Dim 命令, adbret, tmps, 位置
- Dim 临时数组(2)
- 命令 = Plugin.File.ReadINI("adb", "当前包名类名", adbcmd)'读取保存在ini文件中的命令
- TracePrint adbs & 设备ID & 命令
- adbret = Plugin.JzyCommand.Command(adbs & 设备ID & 命令, 1000)'使用我的插件来获取连接的设备
- TracePrint adbret
- tmps=split(adbret,"/")
- If UBound(tmps) > 0 Then '万恶的下标越界
- 位置 = instr(tmps(0), " u0 ")
- 包名 = right(tmps(0), len(tmps(0)) - 位置 -3)
- TracePrint 包名
- 位置 = instr(tmps(1), "}")
- TracePrint 位置
- 类名 = "/." & left(tmps(1), 位置 - 1)
- TracePrint 类名
- 临时数组(0) = 包名
- 临时数组(1) = 类名
- End If
- 取当前包类名 = 临时数组
- End Function
复制代码 三、关闭应用:关闭应用就很简单喽,adb原生命令是(免root)adbin记事本方式
- 关闭应用= shell am force-stop
复制代码按键代码为:
- Function 关闭应用(设备ID,应用)
- Dim 命令,adbret
- 命令 = Plugin.File.ReadINI("adb", "关闭应用", adbcmd)'读取保存在ini文件中的命令
- TracePrint adbs & 设备ID & 命令 & 应用
- adbret = Plugin.JzyCommand.Command(adbs & 设备ID & 命令 & 应用, 1000)'使用我的插件来获取连接的设备
- TracePrint adbret
- End Function
复制代码 adb下载 - adb.rar (, 下载次数:152)