Appium Android 获取包名和 Activity 的几种方法

本文介绍多种获取Android APP包名及启动Activity的方法,包括使用adb命令、logcat日志抓取、aapt工具及apktool反编译等手段。适用于自动化测试工程师和技术爱好者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.相关链接:https://testerhome.com/topics/9209

Guide

本文档主要记录“获取包名和 Activity 的方法”,用于自动化测试时启动APP。以下方法主要来源于网络和社区同学的贡献,特此感谢!

1. 方法一: pm list package查看包名

adb shell pm list package -f

将获取手机内所有apk对应的包名和路径

adb shell pm list package -3 -f   #获取第三方apk的包

2. 方法二:dumpsys window(本人最常用)

先打开需要查找的apk后,再敲入以上命令

adb shell dumpsys window w | findstr \/ | findstr name=
或
adb shell dumpsys window |findstr mCurrent
或
adb shell "dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed 's/ //g'"

注:此处用sed 将部分字符串替换为空,格式为“sed 's/要被取代的字串/新的字串/g'”

3. 方法三:logcat日志抓取LAUNCHER

adb shell “ logcat | grep android.intent.category.LAUNCHER "
或
adb logcat ActivityManager:I *:s

4. 方法四:dumpsys activity

先启动需要的查找的apk,再敲入以上命令

adb shell dumpsys activity | grep mFocusedActivity

5. 方法五:logcat日志抓START

C:\Users\Administrator>adb shell
root@msm8916_32_512:/ # logcat | grep START

先启动需要查找的apk,再敲入以上命令,找到最后一个ActivityManager

6. 方法六:aapt工具(推荐使用)

使用aapt工具 ,适合给程序自动获取 apk 的相关信息,非常实用,
//aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1.以微信为例,命令行中切换到aapt.exe目录执行输入以下命令

aapt dump badging D:\weixin658android1060.apk

2.运行后的结果中以下两行分别是应用包名package和入口activity名称,另外可看到应用使用的权限、支持的语言等信息

7. 方法七:apktool反编译app后查看AndroidManifest.xml

1.使用apktool反编译app

java -jar D:\Tools\apktool_2.2.3.jar d D:\Tools\weixin658android1060.apk

2.打开AndroidManifest.xml文件
manifest节点的package属性值是应用的包名:

查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,android.intent.action.MAIN决定应用程序最先启动的Activity,android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里

8. 方法八:使用monkey 命令查看Activity

adb shell monkey -p com.tencent.mm -c android.intent.category.LAUNCHER -v -v 0|findstr Using

注:
1. findstr 和 grep 查找字符串说明
findstr:windows平台查找字符串命令, 一般格式如下:

adb shell  xxx  | findstr xxx

grep:linux平台查找字符串命令,一般先adb shell 进入shell命令行再使用,也可直接使用,把shell 后面带grep的命令加双引号即可:

adb shell  "xxx  | grep xxx"





<think>我们正在讨论Appium自动化试中如何通过包名Activity启动应用。根据引用内容,我们知道启动应用需要包名(appPackage)启动(appActivity)。下面我将介绍几种方法获取这些信息,并说明如何在Appium中使用它们启动应用。 ### 获取包名Activity方法 1. **查看源代码**(引用[^1]): 如果拥有应用的源代码,可以直接在AndroidManifest.xml文件中查找。通常,主Activity的intent-filter中会包含`<action android:name="android.intent.action.MAIN"/>``<category android:name="android.intent.category.LAUNCHER"/>`。 2. **使用aapt工具**(引用[^2]): - 打开命令行,进入Android SDK的build-tools目录(确保aapt.exe存在)。 - 运行命令:`aapt dump bading <apk路径>` - 在输出中查找`package: name='...'``launchable-activity: name='...'`。 3. **使用adb命令**(引用[^2]): - 连接设备,在命令行输入:`adb logcat | grep START` - 然后在设备上点击应用图标,观察命令行输出,会显示启动的Activity。 ### 在Appium中启动应用 在Appium的Desired Capabilities中设置包名Activity: ```java DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("appPackage", "com.example.app"); // 替换为实际包名 caps.setCapability("appActivity", "com.example.app.MainActivity"); // 替换为实际Activity // 其他必要配置... driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), caps); ``` ### 注意事项 - 确保设备已连接并授权调试(`adb devices`可见)。 - 如果应用未安装,需先安装或通过`app` capability指定apk路径。 - Activity必须是全限定(包含包名)。 §§相关问题§§ 1. 如何在没有源代码的情况下获取应用的包名Activity? 2. Appium启动应用时出现“Activity not found”错误如何解决? 3. 除了包名ActivityAppium启动应用还需要哪些配置?</think>### Appium启动应用:指定包名ActivityAppium中,通过包名(appPackage)Activity(appActivity)启动应用是核心操作。以下是详细步骤注意事项: #### 一、启动方法 在Desired Capabilities中配置以下参数: ```java DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("appPackage", "com.example.app"); // 应用包 caps.setCapability("appActivity", "com.example.app.MainActivity"); // 主Activity caps.setCapability("automationName", "UiAutomator2"); // Android驱动 caps.setCapability("platformName", "Android"); // 其他必要配置... driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723"), caps); ``` #### 二、获取包名Activity的技巧 1. **aapt工具(推荐)** 在Android SDK的`build-tools`目录执行: ```bash aapt dump bading app.apk | findstr "package launchable" ``` 输出示例: ```plaintext package: name='com.xxx.android' launchable-activity: name='com.xxx.android.MainActivity' ``` 2. **adb logcat监控** 执行命令后启动目标APP: ```bash adb logcat | grep -i "activitymanager" | findstr "START" ``` 输出示例: ```plaintext START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xxx.android/.MainActivity} ``` 3. **查看APK源码** 反编译APK后检查`AndroidManifest.xml`,查找包含以下标签的Activity: ```xml <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> ``` #### 三、常见问题解决 - **错误:Activity not found** 检查Activity是否包含**完整路径**(如`com.app.test/.MainActivity`) - **首次启动失败** 添加配置:`caps.setCapability("appWaitActivity", "*.MainActivity");` - **跳过初始化页面** 使用`caps.setCapability("skipDeviceInitialization", true);` > **注意**:Activity需区分大小写,且不同版本APP的Activity可能变更[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值