adb shell am start -W PackageName/ClassName

博客提及了adb shell am start -W PackageName/ClassName这一命令,但未给出更多内容。推测该命令可能用于启动应用组件等操作,在Android开发调试中或有重要作用。
           
import logging import os,time,subprocess import uiautomator2 as u2 #一个基于 ADB(Android Debug Bridge,安卓调试桥)的工具类,封装了近 50 个与安卓设备交互的核心功能,涵盖设备管理、文件传输、应用控制、系统信息查询、性能监控等场景 #定义 AdbDebug 类(继承自 object) class AdbDebug(object): #adb通用处理函数 # def adbCommon(self,target): # list = self.checkDevices() # count = len(list) # if target + 1 > count: # print "请确认连接手机数量,输入正确的序号,0为第一台,依此类推" # return # return list #静态方法,负责接收 ADB 命令字符串、执行命令、捕获输出结果并返回,比如将传入的 command(如 devices)拼接为 adb devices;通过 os.popen 执行命令并读取输出流 # 它不需要访问类的实例属性或方法,仅依赖传入的 command 参数,它可以直接通过类名调用(如 ClassName.call_adb(command)),而不需要先创建类的实例 @staticmethod def call_adb(command): result = '' command_text = "adb %s" % (command) results = os.popen(command_text, "r") while True: line = results.readline() if not line: break result += line results.close() return result def checkDevices(self): res = self.call_adb("devices") devices = res.partition('\n')[2].replace('\n', '').split('\tdevice') return [device for device in devices if len(device) > 2] #停止adb服务 def adbStop(self): return self.call_adb("kill-server") #开启adb服务 def adbStart(self): return self.call_adb("start-server") #查看adb版本 def adbVersion(self): return self.call_adb("version") # 查看当前系统连接wifi ssid 名称 def adbGetCurSSID(self): str = self.call_adb("shell dumpsys netstats | findstr iface=wlan.*networkId") return eval(str.split(" ")[5].split("=")[1])[0] def adbGetCurSSIDSAMSUNG(self): str = self.call_adb("shell dumpsys netstats | findstr iface=wlan.*wifiNetworkKey") while str=="": str = self.call_adb("shell dumpsys netstats | findstr iface=wlan.*wifiNetworkKey") time.sleep(1) ms = str.split(" ")[5].split("=")[1].split("wpa") logging.info(str.split(" ")[5].split("=")) # print(str.split(" ")[5].split("=")) return eval(str.split(" ")[5].split("=")[1].split("wpa")[0]) #开启adb网络调试接口(需连接USB线) def adbTcp(self, target): return self.call_adb("-s %s tcpip 5555"% (target)) #网络调试连接 def adbNetConOpen(self, target, address): return self.call_adb("-s %s connect %s" % (target, address)) #关闭网络调试连接 def adbNetConClose(self, target, address): return self.call_adb("-s %s disconnect %s" % (target, address)) # 将电脑文件拷贝到手机里面 # [电脑上的目录] < 设备里的文件路径 > def push(self, target, local, remote): result = self.call_adb("-s %s push %s %s" % (target, local, remote)) return result # 拉数据到本地 # < 设备里的文件路径 > [电脑上的目录] def pull(self, target, remote, local): result = self.call_adb("-s %s pull %s %s" % (target, remote, local)) return result #电脑端安装应用 # -l 将应用安装到保护目录 / mnt / asec # -r 允许覆盖安装 # -t 允许安装AndroidManifest.xml里application指定android:testOnly = "true"的应用 # -s 将应用安装到sdcard # -d 允许降级覆盖安装 # -g 授予所有运行时权限 def adbInstallApk(self, target, local): return self.call_adb("-s %s install %s"(target, local)) def adbInstallApk(self, var, local): return self.call_adb("install "+ var + local) #电脑端卸载应用 # < packname > 表示应用的包名,-k # 参数可选,表示卸载应用但保留数据和缓存目录。 def adbUninstallApk(self, target, packName): return self.call_adb("-s %s uninstall %s" % (target, packName)) def adbUninstallApk(self, target, var, packName): return self.call_adb("-s %s uninstall %s %s" % (target, var, packName)) #查看应用列表 # 无 所有应用 # -f 显示应用关联的 apk 文件 # -d 只显示 disabled 的应用 # -e 只显示 enabled 的应用 # -s 只显示系统应用 # -3 只显示第三方应用 # -i 显示应用的 installer # -u 包含已卸载应用 def adbGetPmlist(self, target, var): return self.call_adb("-s %s shell pm list packages %s" % (target, var)) # 清除应用数据缓存 def adbCacheClear(self, target, packName): result = self.call_adb("-s %s shell pm clear %s" % (target, packName)) return result.rstrip() # 查看应用详细信息 def adbGetAppInfo(self, target, packName): result = self.call_adb("-s %s shell dumpsys package %s" % (target, packName)) return result.strip() # 启动Activity def adbStartActivity(self, target, activity): result = self.call_adb("-s %s shell am start %s" % (target, activity)) return result.rstrip() # 强制停止Activity def adbStopActivity(self, target, packName): result = self.call_adb("-s %s shell am force-stop %s" % (target, packName)) return result.rstrip() # 获得设备型号 def adbGetDeviceModel(self, target): result = self.call_adb("-s %s shell getprop ro.product.model" % (target)) return result.rstrip() # 获取设备品牌 def adbGetDeviceBrand(self, target): result = self.call_adb("-s %s shell getprop ro.product.brand" % (target)) return result.rstrip() # 获得设备名称 def adbGetDeviceName(self, target): result = self.call_adb("-s %s shell getprop ro.product.name" % (target)) return result.rstrip() # 获得设备处理器型号 def adbGetDeviceBoard(self, target): result = self.call_adb("-s %s shell getprop ro.product.board" % (target)) return result.rstrip() # 设备重启 def adbDeviceReboot(self, target): result = self.call_adb("-s %s reboot" % (target)) return result.rstrip() # 获取电池状况 def adbGetBattery(self, target): result = self.call_adb("-s %s shell dumpsys battery" % (target)) return result.rstrip() # 获取屏幕分辨率 def adbGetScreenSize(self, target): result = self.call_adb("-s %s shell wm size" % (target)) return result.rstrip() # 获取屏幕dpi def adbGetScreenDPI(self, target): result = self.call_adb("-s %s shell wm density" % (target)) return result.rstrip() # 获取屏幕参数 def adbGetScreenInfo(self, target): result = self.call_adb("-s %s shell dumpsys window displays" % (target)) return result.rstrip() # 获取Android系统版本 def adbGetAndroidVersion(self, target): result = self.call_adb("-s %s shell getprop ro.build.version.release" % (target)) return result.strip() # 获取IP地址 def adbGetDevIP(self, target): result = self.call_adb("-s %s shell ifconfig wlan0" % (target)) if int(self.adbGetAndroidVersion(target).split(".")[0]) > 4: if result.rsplit(":")[1][19:23] == "inet": return result.rsplit(":")[2][:13] else: print ("WIFI未开启,请打开WIFI开关") return else: return result.rsplit(":")[1][4:17] # 获取MAC地址 def adbGetDevMac(self, target): result = self.call_adb("-s %s shell cat /sys/class/net/wlan0/address" % (target)) return result.strip() # 获取CPU信息 def adbGetDevCPU(self, target): result = self.call_adb("-s %s shell cat /proc/cpuinfo" % (target)) return result.strip() # 获取系统内存信息 def adbGetDevMem(self, target): result = self.call_adb("-s %s shell cat /proc/meminfo" % (target)) return result.strip() # 获取应用内存信息 def adbGetDevPidMem(self, target, packname): result = self.call_adb("-s %s shell dumpsys meminfo %s" % (target, packname)) return result.strip() # 获取总的CPU使用时间 def adbGetCpuTime(self, target): result = self.call_adb("-s %s shell cat /proc/stat" % (target)) return result.strip() # 获取进程CPU时间片 def adbGetPidJiff(self, target, pid): result = self.call_adb("-s %s shell cat /proc/%s/stat" % (target, pid)) return result.strip() # 获取进程fps def adbGetPidfps(self, target, packname): result = self.call_adb("-s %s shell dumpsys gfxinfo %s" % (target, packname)) return result.strip() # # 获取进程流量信息 # def adbGetPidflow(self, target, packname, flag): # if int(self.adbGetAndroidVersion(target).split('.')[0]) < 8: # uid = AppPerCon.appuid['MATE8'][packname] # rec = self.call_adb("-s %s shell cat /proc/uid_stat/%s/tcp_rcv" % (target, uid)).strip() # sen = self.call_adb("-s %s shell cat /proc/uid_stat/%s/tcp_snd" % (target, uid)).strip() # # print rec, sen # flow = float(rec) + float(sen) # else: # if flag == 1: # # self.adbStartActivity(target, activity) # pid = self.adbGetPid(target, packname) # print pid # lis = self.call_adb("-s %s shell cat /proc/%s/net/dev" % (target, pid)).strip().split() # for k, v in enumerate(lis): # if v == 'wlan0:': # recindex = k + 1 # tranindex = k + 9 # flow = float(lis[recindex])+float(lis[tranindex]) # self.adbStopActivity(target, packname) # break # else: # lis = self.call_adb("-s %s shell cat /proc/net/dev" % (target)).strip().split() # for k, v in enumerate(lis): # if v == 'wlan0:': # recindex = k + 1 # tranindex = k + 9 # flow = float(lis[recindex]) + float(lis[tranindex]) # break # # return flow def adbGetPid(self, target, packname): if int(self.adbGetAndroidVersion(target).split('.')[0]) < 8: pid = self.call_adb("-s %s shell ps | findstr %s"%(target, packname)).rstrip().split("\n") if pid == ['']: print ("this process doesn't exist") return None else: for item in pid: if item.split()[8] == packname: return item.split()[1] else: pid = self.call_adb("-s %s shell top -n 1 | findstr %s" % (target, packname)).strip().split() if pid == []: print ("this process doesn't exist") return None else: return pid[0] def adbGetUid(self, target, packname): pid = self.adbGetPid(target, packname) lis = self.call_adb('-s %s shell cat /proc/%s/status' % (target, pid)).split() uid = 0 for k, v in enumerate(lis): if v == 'Uid:': index = k + 1 uid = lis[index] break return uid def adbGetAPPstartTime(self, target, activity): lis = self.call_adb('-s %s shell am start -W %s' % (target, activity)) for k, v in enumerate(lis): if v == 'TotalTime:': index = k + 1 time = lis[index] break return time def initBTWIFI(self): content = self.call_adb("shell settings get global wifi_on").strip(); content1 = self.call_adb("shell settings get global bluetooth_on").strip(); if content == "0": self.call_adb("shell svc wifi enable"); time.sleep(1); if content1 == "0": self.call_adb("shell svc bluetooth enable"); time.sleep(1); #4. 入口测试模块,用于快速验证类的功能 #快速验证:让开发者在编写或修改 AdbDebug 类后,能直接运行脚本测试核心功能是否正常(无需编写额外的测试脚本); #环境验证:确认 ADB 环境是否正常(设备已连接、ADB 命令可执行)、类中的方法是否按预期工作; if __name__ == '__main__': d = u2.connect("R5CWB30EZJX") ad = AdbDebug() ad.adbGetCurSSIDSAMSUNG() # ad.adbStopActivity("R5CWB30EZJX", "com.android.settings") pass
08-28
D:\platform-tools-latest-windows\platform-tools>adb -s 181QGEYG228VW shell cmd package resolve-activity -c android.intent.category.LAUNCHER com.kuaishou.nebula priority=0 preferredOrder=0 match=0x108000 specificIndex=-1 isDefault=true ActivityInfo: name=com.yxcorp.gifshow.HomeActivity packageName=com.kuaishou.nebula labelRes=0x7f110038 nonLocalizedLabel=null icon=0x0 banner=0x0 enabled=true exported=true directBootAware=false taskAffinity=com.kuaishou.nebula targetActivity=null persistableMode=PERSIST_ROOT_ONLY launchMode=1 flags=0x410200 privateFlags=0x2 theme=0x7f1200ca screenOrientation=1 configChanges=0xff3 softInputMode=0x33 lockTaskLaunchMode=LOCK_TASK_LAUNCH_MODE_DEFAULT resizeMode=RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION knownActivityEmbeddingCerts={} ApplicationInfo: name=com.yxcorp.gifshow.App packageName=com.kuaishou.nebula labelRes=0x7f110038 nonLocalizedLabel=null icon=0x7f0e0003 banner=0x0 className=com.yxcorp.gifshow.App processName=com.kuaishou.nebula taskAffinity=com.kuaishou.nebula uid=10199 flags=0x30d83e44 privateFlags=0xac001110 theme=0x7f120138 requiresSmallestWidthDp=0 compatibleWidthLimitDp=0 largestWidthLimitDp=0 sourceDir=/data/app/~~jn8MVxmMqa9Vv0XJOsjmIQ==/com.kuaishou.nebula-isCLWq46lsEm01_Cfqvt5g==/base.apk resourceDirs=[/product/overlay/NavigationBarMode3Button/NavigationBarMode3ButtonOverlay.apk] overlayPaths=[/product/overlay/NavigationBarMode3Button/NavigationBarMode3ButtonOverlay.apk, /data/resource-cache/com.android.systemui-neutral-kiWE.frro, /data/resource-cache/com.android.systemui-accent-ANU9.frro] seinfo=default:targetSdkVersion=30 seinfoUser=:complete dataDir=/data/user/0/com.kuaishou.nebula deviceProtectedDataDir=/data/user_de/0/com.kuaishou.nebula credentialProtectedDataDir=/data/user/0/com.kuaishou.nebula sharedLibraryFiles=[/system/framework/org.apache.http.legacy.jar] enabled=true minSdkVersion=21 targetSdkVersion=30 versionCode=10955 targetSandboxVersion=1 supportsRtl=true fullBackupContent=true crossProfile=false networkSecurityConfigRes=0x7f14001b HiddenApiEnforcementPolicy=2 usesNonSdkApi=false allowsPlaybackCapture=true nativeHeapZeroInitialized=0 enableOnBackInvokedCallback=false createTimestamp=13407615 knownActivityEmbeddingCerts={}
最新发布
12-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值