从 adb 获取包的可启动活动名称

有没有一种方法可以通过使用 adb获得一个包的可启动活动?对于 unroot 电话(也就是说,不需要从 ABC1目录中提取 apk 并使用 appt进行检查)。

我试过 Dumpsys,但它不包括默认启动活动的信息。

谢谢

124560 次浏览

您不需要 root 用户从 /data/app中提取 apk 文件。当然,您可能没有权限列出该目录的内容,但是您可以通过以下方式找到 APK 的文件位置:

adb shell pm list packages -f

然后你可以使用 adb pull:

adb pull <APK path from previous command>

然后 aapt来获得你想要的信息:

aapt dump badging <pulledfile.apk>

下面是另一种查找应用程序包名称和启动程序活动的方法。

步骤1: 在命令提示符中启动“ adb logcat”。

步骤2: 打开应用程序(在模拟器或实际设备中) enter image description here

#!/bin/bash
#file getActivity.sh
package_name=$1
#launch app by package name
adb shell monkey -p ${package_name} -c android.intent.category.LAUNCHER 1;
sleep 1;
#get Activity name
adb shell logcat -d | grep 'START u0' | tail -n 1 | sed 's/.*cmp=\(.*\)} .*/\1/g'

样本:

getActivity.sh com.tencent.mm
com.tencent.mm/.ui.LauncherUI
$ adb shell pm dump PACKAGE_NAME | grep -A 1 MAIN

我没找到,所以更新了名单。

您需要在您的手机上安装并运行 apk 才能获得这个解决方案 :

视窗 CMD 线:

adb shell dumpsys window windows | findstr <any unique string from your pkg Name>

Linux 终端:

adb shell dumpsys window windows | grep -i <any unique string from your Pkg Name>

计算器软件包的输出为:

Window #7 Window{39ced4b1 u0 com.android.calculator2/com.android.calculator2.Calculator}:


mOwnerUid=10036 mShowToOwnerOnly=true package=com.android.calculator2 appop=NONE


mToken=AppWindowToken{29a4bed4 token=Token{2f850b1a ActivityRecord{eefe5c5 u0 com.android.calculator2/.Calculator t322}}}


mRootToken=AppWindowToken{29a4bed4 token=Token{2f850b1a ActivityRecord{eefe5c5 u0 com.android.calculator2/.Calculator t322}}}


mAppToken=AppWindowToken{29a4bed4 token=Token{2f850b1a ActivityRecord{eefe5c5 u0 com.android.calculator2/.Calculator t322}}}


WindowStateAnimator{3e160d22 com.android.calculator2/com.android.calculator2.Calculator}:


mSurface=Surface(name=com.android.calculator2/com.android.calculator2.Calculator)


mCurrentFocus=Window{39ced4b1 u0 com.android.calculator2/com.android.calculator2.Calculator}


mFocusedApp=AppWindowToken{29a4bed4 token=Token{2f850b1a ActivityRecord{eefe5c5 u0 com.android.calculator2/.Calculator t322}}}

主要部分是,第一线:

Window # 7 Window {39ced4b1 u0 com.android.Calculator2/com.android.Calculator2.Calculator } :

输出的第一部分是软件包名称:

com.android.calculator2

输出的第二部分(在 /之后)可以是两件事情,在我们的例子中是:

com.android.calculator2.Calculator

  1. <PKg name>.<activity name> = <com.android.calculator2>.<Calculator>

    所以 .Calculator是我们的活动

  2. 如果第二部分与包名完全不同,并且似乎不包含在 /输出之前的 pkg 名,那么整个 第二部分可以作为主要活动

您也可以使用 ddms 的 logcat 日志,其中只是给出搜索应用程序的名称,你将所有的信息,但你必须选择信息,而不是冗长或其他选项。看看下面的图片。

enter image description here

自从 Android 7.0以来,你可以使用 adb shell cmd package resolve-activity命令来获得已安装应用程序的默认活动,如下所示:

adb shell "cmd package resolve-activity --brief com.google.android.calculator | tail -n 1"
com.google.android.calculator/com.android.calculator2.Calculator

启动你的应用程序,把它放在前台。

运行以下命令:

Adb shell Dumpsys 窗口 | 查找“ mcurrentfocus”

mCurrentFocus在我的 Android 12设备上不起作用。

下面是正确的一步:

  1. 连接设备并打开应用程序。
  2. adb shell dumpsys window windows | grep -E mObscuringWindow
  3. mObscuringWindow=Window{bc78a3 u0 com.yds.demo/com.test.activity.AppActivity}

com.test.activity.AppActivity是活动。