获取android appActivity的四种常用方法

=========不积跬步无以至千里==========

在进行Android的app UI自动化时,从Appium启动制定package是通过获取指定的android activity实现的,那么如何获取目标Activity就成为了启动一个Appium Session的第一步,先总结方法如下:

方法一 从Appium指定安装包

这个方法为最简单粗暴,即下载好了待测package后,在appium的capability中添加待测包的位置,点击start session后,直接从appium-desktop的log window中能看到所有的操作信息,可直接定位到启动对应的android activity。

例如在以下appium capability中指定了app的path,那么appium会自动给Android device安装指定的package并且把相应的操作都通过控制台输出

{
  "platformName": "Android",
  "platformVersion": "6.0",
  "deviceName": "Android Emulator",
  "automationName": "Appium",
  "app": "/Users/cosetteqi/Downloads/llsstaging60.apk",
  "noReset": true,
  "autoGrantPermissions": true,
  "udid": "192.168.56.101:5555"
}

Appium日志定位到的Activity

那么之后通过Appium直接启动package而不需重新安装时,直接指定appActivity即可,capability可设置如下:

{
  "platformName": "Android",
  "platformVersion": "6.0",
  "deviceName": "1111111",
  "automationName": "Appium",
  "appPackage": "com.target.engzo",
  "appActivity": ".app.activity.LauncherActivity",
  "noReset": true,
  "autoGrantPermissions": true
}

 方法二 使用dumpsys命令

应用此方法首先要明确待测package的package name,可通过如下命令获取:

#查看当前device中所有apk对应的package name和path
adb shell pm list package -f

#仅查看第三方的apk package
adb shell pm list package -3 -f

明确了待测包的package name后,即可使用dumpsys命令获取要抓取的appActivity

注意:cmd terminal的查找命令在linux和mac操作系统中对应关键字时grep,在Windows操作系统中对应关键字是 findstr

比如我要获取WeChat的appActivity,第一步我需要打开WeChat,打开后在terminal中输入以下信息:

adb shell dumpsys window w | grep mCurrent

对应定位到的appActivity就会自动被定位到并输出如下:

  mCurrentFocus=Window{bfcb871 u0 com.tencent.mm/com.tencent.mm.ui.LauncherUI}

方法三 使用logcat日志筛选

在terminal中输入以下cmd,然后对待测package进行具体的操作,此命令是能够实时获取appActivity的

adb logcat ActivityManager:I *:s
Cosette:~ cosetteqi$ adb logcat ActivityManager:I *:s
--------- beginning of system
--------- beginning of main
01-23 14:18:07.737  1075  1243 I ActivityManager: [Background Service Priority Adjustment] Set callerFg as false for service.getFlags():292
01-23 14:19:17.163  1075  2071 I ActivityManager: moveTaskToBack: TaskRecord{e0cd18d #22922 A=com.tencent.mm U=0 sz=1}
01-23 14:19:18.623  1075  1389 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[282,960][540,1248]} from uid 10014 from pid 2100 on display 0 from pid 2100 cloneId 0
01-23 14:19:25.214  1075  1090 I ActivityManager: START u0 {cmp=com.tencent.mm/.plugin.appbrand.ui.AppBrandLauncherUI (has extras)} from uid 11126 from pid 13530 on display 0 from pid 13530 cloneId 0
01-23 14:19:26.134  1075  1123 I ActivityManager: [AppLaunch] Displayed Displayed com.tencent.mm/.plugin.appbrand.ui.AppBrandLauncherUI: +867ms
01-23 14:19:34.777  1075  1931 I ActivityManager: START u0 {cmp=com.tencent.mm/.plugin.scanner.ui.BaseScanUI (has extras)} from uid 11126 from pid 13530 on display 0 from pid 13530 cloneId 0
01-23 14:19:35.925  1075  1123 I ActivityManager: [AppLaunch] Displayed Displayed com.tencent.mm/.plugin.scanner.ui.BaseScanUI: +1s93ms

 

方法四 使用dumpsys activity直接进行查找

首先启动待测的package,输入以下cmd

adb shell dumpsys activity | grep mFocusedActivity

此命令能够直接定位到最后一个被执行的Activity,然后直接将此Activity的信息返回到terminal

  mFocusedActivity: ActivityRecord{15e435f u0 com.tencent.mm/.ui.LauncherUI t22922}

以上四种方法都可用于查找定位appActivity,当然还有其他的方法也可以实现,具体的选择要根据个人使用习惯来确定使用哪种方法了。

===========每日有输入,每日有输出==============

要给 Android App 增加扫码功能,可以使用第三方库来实现。一个常用的库是 ZXing,它支持多种码的识别,包括二维码和条形码。 要使用 ZXing,首先需要在项目中引入 ZXing 的依赖库。可以在项目的 build.gradle 文件中添加以下代码: ``` implementation 'com.google.zxing:core:3.3.3' ``` 然后,在需要使用扫码功能的界面中添加一个扫码按钮,并在点击事件中调用 ZXing 的扫码功能。以下是一个简单的示例代码: ``` // 定义扫码请求码 private static final int SCAN_REQUEST_CODE = 0; // 扫码按钮点击事件 public void onScanButtonClick(View view) { // 调用扫码功能 Intent intent = new Intent(this, CaptureActivity.class); startActivityForResult(intent, SCAN_REQUEST_CODE); } // 处理扫码结果 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SCAN_REQUEST_CODE && resultCode == RESULT_OK) { String result = data.getStringExtra(CaptureActivity.EXTRA_RESULT); // 处理扫码结果 } } ``` 这段代码中,onScanButtonClick() 方法中创建了一个 Intent 对象,调用 startActivityForResult() 方法启动扫码界面。扫码界面由 ZXing 的 CaptureActivity 实现,通过 Intent 的方式启动。在 onActivityResult() 方法中处理扫码结果,从 Intent 中获取扫码结果并进行处理。 需要注意的是,使用 ZXing 的扫码功能需要用户授权相机权限,需要在 AndroidManifest.xml 中添加以下代码: ``` <uses-permission android:name="android.permission.CAMERA" /> ``` 另外,需要在 AndroidManifest.xml 中注册 ZXing 的 CaptureActivity: ``` <activity android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="portrait" android:clearTaskOnLaunch="true" android:stateNotNeeded="true" android:theme="@style/AppTheme.NoActionBar" /> ``` 以上是一个简单的示例,具体实现方式还需要根据具体的需求来进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值