获取APP应用的包名信息
语言: python 3.7
需求:获取APP的包名和程序入口信息,以便在 Appium 脚本中配置 appPackage 和 appActivity 参数。
场景一
资源:已有APP应用的apk安装包, appt 工具
方法:通过appt指令获取。
脚本:
def get_by_apk(path):
# 前提:(1)aapt工具已经配置了环境变量(2)拥有app的安装包apk文件
# 入参:安卓应用的apk安装包完整路径,返回app的包名和应用入口。 logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s') command_package = r'aapt dump badging {} | findstr "package"'.format(path)
command_activity = r'aapt dump badging {} | findstr "launchable-activity"'.format(path) result_package = os.popen(command_package).read()
result_activity = os.popen(command_activity).read() app_package = result_package.split(' ')[1].split('=')[1].replace('\'', '')
app_activity = result_activity.split(' ')[1].split('=')[1].replace('\'', '') logging.info('appPackage: '+app_package)
logging.info('appActivity: '+app_activity) app_info_dict = {'appPackage': app_package, 'appActivity': app_activity}
return app_info_dict
场景二
资源:app已成功安装,但无应用安装包。
方法:将设备连接PC并开启USB调试,保证设备连接成功。然后启动目标APP,保证在前台展示,执行 adb shell 指令获取。
指令: adb shell dumpsys activity
脚本:
def get_by_adb_shell():
# 前提:(1)设备已成功以debug模式连接PC,打开目标应用,并保持app界面置顶。 logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s') command_adb_shell = 'adb shell dumpsys activity'
result = os.popen(command_adb_shell).read() # 缩小查找的结果范围
start = result.find('ACTIVITY MANAGER ACTIVITIES')
end = result.find('ACTIVITY MANAGER RUNNING PROCESSES')
target = result[start:end].split('\n') # 过滤结果
activity_list = []
for i in target:
if i.find('android.intent.category.LAUNCHER') != -1:
cmp = i.split(' ')
for j in cmp:
if j.find('cmp=') != -1:
activity_list.append(j) # (如果后台启动多个app,结果列表的个数会大于1,排列顺序是activities from top to bottom)
# 获取的初始结果的大致样式:
'''
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]
flg=0x10200000 cmp=com.***.***/.ui.activity.***.WelcomeActivity (has extras) }
''' # 格式化结果
app_package = activity_list[0].replace('cmp=', '').split('/')[0]
app_activity = activity_list[0].replace('cmp=', '').split('/')[1]
logging.info('appPackage: '+app_package)
logging.info('appActivity: '+app_activity) app_info_dict = {'appPackage': app_package, 'appActivity': app_activity}
return app_info_dict
------ END
获取APP应用的包名信息的更多相关文章
- 获取app应用的包名
1.获取哪个app包名,就打开哪个app 2.在dos窗口下输入: adb shell "dumpsys window | grep mCurrentFocus" 获取包名
- appium 获取app的应用包名package和activity
第一种,使用sdk自带的工具aapt,在sdk\builds-tools\目录下,切换到aapt所在目录 命令:aapt dump badging app的路径,运行后的结果中以下两行分别是应用包名p ...
- 获取App的PackageName包名和LauncherActivity启动页
第一种情况: 查看手机里面已经安装的App: 用数据线连接手机, 打开开发者模式, 并赋予相关权限: 1. 清除日志: adb logcat -c 2. 启动日志: adb logcat Activi ...
- 在Android手机上获取其它应用的包名及版本
转载请注明出处:http://blog.csdn.net/jason_src/article/details/37757661 获取Android手机上其它应用的包名及版本方法有非常多,能够通过AAP ...
- Android 在Android手机上获取其他应用的包名及版本号
获取Android手机上其他应用的包名及版本号方法有很多,可以通过AAPT从APK包中直接获取,也可以通过代码在手机上获取.显然,对于产品或者用户来说要获取这些信息,在手机上获取更为简便. 下面我们来 ...
- 获取软件的apk包名、查看手机设备名称等
获取软件的apk包名 1.下载aapt,这里使用的是SDK自带的aapt,找到SDK路径下面的aapt.exe,本机路径:E:\downloads\android-sdk_r23.0.2-window ...
- Android在一个APP中通过包名或类名启动另一个APP
开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通 ...
- 获取安卓应用APK包名的方法
应用商店按照符合Android标准的原则进行设计,使用包名(Package Name)作为应用的唯一标识.即:包名必须唯一,一个包名代表一个应用,不允许两个应用使用同样的包名.包名主要用于系统识别应用 ...
- c# 获取 Apk ,Aar 文件包名
最近项目有个需求,需要拿到前端上传的Apk或者Aar文件里面的包名. 在这里贡献出来,方便有需求的小伙伴. 项目是 asp.net core 2.2 需要安装 nuget : AndroidXml S ...
随机推荐
- sublime 浏览器快捷键设置
之前每次忘掉在哪打开,这次认真记一下 菜单栏Preferences-->Package Settings-->Side Bar-->Key Binding-Users [ // ch ...
- percona-toolkit 之 【pt-online-schema-change】说明【转】
背景: MySQL 大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响.在5.1之后随着Plugin Innodb的出现在线加索引的提 ...
- sass进阶—mixin的使用(浏览器兼容性调整)
@mixin content($color:red,$fontSize:14px){ color:$color; font-size: $fontSize;} /*调用含参数的mixin,使用更加灵活 ...
- 微信小程序picker组件 - 省市二级联动
picker 从底部弹起的滚动选择器,现支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器. picker官方文档链接 由于项目需 ...
- thinkPHP中M()和D()的区别
在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法.通俗一点说:M实例化参数是数据库的表名 ...
- kettle使用文件导入到Postgresql出现如下几种问题的总结
1.kettle使用文件导入到Postgresql出现如下几种问题的总结: kettle使用文件导入到Postgresql出现如下几种问题的总结: .第一种错误,报错如ERROR: extra dat ...
- 【数据库】MySql分割字符串
上论坛时看到一个骨骼清奇的分割字符串算法. DROP TABLE IF EXISTS Tmp_AreaCode; CREATE TABLE Tmp_AreaCode( string ) )ENGINE ...
- scrapy 通过FormRequest模拟登录再继续
1.参考 https://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.start_requests 自动提交 ...
- tensorflow例子-【老鱼学tensorflow】
本节主要用一个例子来讲述一下基本的tensorflow用法. 在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律 ...
- oracle下查询的sql已经超出IIS响应时间
场景: 最近一直发生oracle下查询的sql已经超出IIS响应时间,但是后台DB的SQL查询还未终止,一直在查询.这对DB是造成很大的压力. 解决办法 增加OracleCommand 中的Comma ...