76

有没有办法从使用中获取包的可启动活动adb?对于 unroot 电话(即没有从/data/app目录中提取 apk 并使用检查appt)。

我尝试了 dumpsys,但它不包含有关默认可启动活动的信息。

谢谢

4

8 回答 8

100

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

adb shell pm list packages -f

然后你可以使用adb pull

adb pull <APK path from previous command>

然后aapt获取您想要的信息:

aapt dump badging <pulledfile.apk>
于 2012-10-02T23:48:14.110 回答
59
$ adb shell pm dump PACKAGE_NAME | grep -A 1 MAIN
于 2016-03-28T03:54:55.850 回答
27

从 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
于 2016-12-26T01:52:59.373 回答
14
#!/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
于 2015-09-09T04:57:19.613 回答
11

我没有发现它列出所以更新列表。

对于此解决方案,您需要在手机前面安装并运行 apk

Windows 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 名称,那么整个第二部分都可以用作主要活动。

于 2016-04-25T08:24:28.317 回答
3

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

Step1:在命令提示符下启动“adb logcat”。

Step2:打开应用程序(在模拟器或真机中) 在此处输入图像描述

于 2015-02-26T09:31:29.763 回答
1

您还可以将 ddms 用于 logcat 日志,其中只需搜索应用程序名称即可获得所有信息,但您必须选择 Info 而不是详细或其他选项。检查下图。

在此处输入图像描述

于 2016-06-29T10:25:49.483 回答
0

启动您的应用程序并将其保持在前台。

运行以下命令:

adb shell dumpsys 窗口窗口| 找到“mcurrentfocus”

于 2019-11-05T06:42:50.863 回答