获取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

posted @ 2019-02-25 15:40  深蓝小佛  阅读(448)  评论(0编辑  收藏  举报