获取APP应用的包名信息
语言: python 3.7
需求:获取APP的包名和程序入口信息,以便在 Appium 脚本中配置 appPackage 和 appActivity 参数。
场景一
资源:已有APP应用的apk安装包, appt 工具
方法:通过appt指令获取。
脚本:
1 def get_by_apk(path): 2 # 前提:(1)aapt工具已经配置了环境变量(2)拥有app的安装包apk文件 3 # 入参:安卓应用的apk安装包完整路径,返回app的包名和应用入口。 4 5 logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s') 6 7 command_package = r'aapt dump badging {} | findstr "package"'.format(path) 8 command_activity = r'aapt dump badging {} | findstr "launchable-activity"'.format(path) 9 10 result_package = os.popen(command_package).read() 11 result_activity = os.popen(command_activity).read() 12 13 app_package = result_package.split(' ')[1].split('=')[1].replace('\'', '') 14 app_activity = result_activity.split(' ')[1].split('=')[1].replace('\'', '') 15 16 logging.info('appPackage: '+app_package) 17 logging.info('appActivity: '+app_activity) 18 19 app_info_dict = {'appPackage': app_package, 'appActivity': app_activity} 20 return app_info_dict
场景二
资源:app已成功安装,但无应用安装包。
方法:将设备连接PC并开启USB调试,保证设备连接成功。然后启动目标APP,保证在前台展示,执行 adb shell 指令获取。
指令: adb shell dumpsys activity
脚本:
1 def get_by_adb_shell(): 2 # 前提:(1)设备已成功以debug模式连接PC,打开目标应用,并保持app界面置顶。 3 4 logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s') 5 6 command_adb_shell = 'adb shell dumpsys activity' 7 result = os.popen(command_adb_shell).read() 8 9 # 缩小查找的结果范围 10 start = result.find('ACTIVITY MANAGER ACTIVITIES') 11 end = result.find('ACTIVITY MANAGER RUNNING PROCESSES') 12 target = result[start:end].split('\n') 13 14 # 过滤结果 15 activity_list = [] 16 for i in target: 17 if i.find('android.intent.category.LAUNCHER') != -1: 18 cmp = i.split(' ') 19 for j in cmp: 20 if j.find('cmp=') != -1: 21 activity_list.append(j) 22 23 # (如果后台启动多个app,结果列表的个数会大于1,排列顺序是activities from top to bottom) 24 # 获取的初始结果的大致样式: 25 ''' 26 Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] 27 flg=0x10200000 cmp=com.***.***/.ui.activity.***.WelcomeActivity (has extras) } 28 ''' 29 30 # 格式化结果 31 app_package = activity_list[0].replace('cmp=', '').split('/')[0] 32 app_activity = activity_list[0].replace('cmp=', '').split('/')[1] 33 logging.info('appPackage: '+app_package) 34 logging.info('appActivity: '+app_activity) 35 36 app_info_dict = {'appPackage': app_package, 'appActivity': app_activity} 37 return app_info_dict
------ END
Talk is cheap, just show me the code!
本文作者:深蓝小佛
本文链接:https://www.cnblogs.com/amoyshmily/p/10429878.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步