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


72

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

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

谢谢

Answers:


94

您不需要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>

12
和aapt用法可在StackOverflow上找到:stackoverflow.com/a/7502519/26510
Brad Parks

3
1,按照kabuko所说的做2、2 adb pull / data / app / <THE APK.apk>〜/ <在任何你想成为的地方> 3,aapt dump Badging <THE APK.apk>就这样
Oxi

1
我刚刚在答案中添加了aaptadb pull用法,这对许多人来说似乎很有用。
kabuko

1
@Vera否。它是ADT中所有平台的工具。确保已安装构建工具,并在build-tools文件夹下查看。它应该在与您的SDK相对应的另一个子文件夹下。
kabuko

3
我需要“ aapt dump xmltree HiddenMenuLight.apk AndroidManifest.xml”
bobpaul

54
$ adb shell pm dump PACKAGE_NAME | grep -A 1 MAIN

3
$ adb shell pm dump PACKAGE_NAME | grep -A 1 'filter' | head -n 1 | cut -d ' ' -f 12可能有一种更聪明的方法,但我不是* NIX专家。
克里斯托弗

3
pm dump转储许多不必要的服务。而pm本身就是一个java命令所以它需要一些时间来启动。输出的相关部分PackageManager.Dump()无论如何都来自-因此adb shell dumpsys package PACKAGE_NAME产生相同结果的效率将大大提高。但是,Android 7.0甚至有更好的方法,请参见stackoverflow.com/a/41325792/1778421
Alex P.

2
@Kristopher,您的过滤器和@friederbluemle的过滤器都存在一个问题,即可能有多个解析器android.intent.action.MAIN。正确的方法是首先找到android.intent.category.LAUNCHER类别之一。这样的事情会起作用grep -B 10 category\.LAUNCHER | grep -o '[^ ]*/[^ ]*' | tail -n 1
Alex P.

@ m0skit0您正在使用哪个仿真器/设备?检查您使用的是哪个框架版本以及它的内容/system/bin/pm
friederbluemle 18/02/19

20

从Android 7.0开始,您可以使用adb shell cmd package resolve-activitycommand来获取已安装应用的默认活动,如下所示:

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

我在android 9上收到此错误:执行时发生异常:java.lang.IllegalArgumentException:没有提供意图
-AliReza

12
#!/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

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. 如果第二部分与软件包名称完全不同,并且似乎不包含/in out输出之前的pkg名称,则整个第二部分都可以用作主要活动。


3

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

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

第2步:打开应用程序(在模拟器或真实设备中) 在此处输入图片说明


1
仅当该应用程序已经在设备上至少启动了一次时,此方法才有效。
sschuberth'7

1
发现这是最简单的解决方案,不确定为什么要投票。
马塞洛

非常有用的评论。谢谢。但是,adb logcat> log.txt更有用,因为转储了很多信息,以后很难找到所需的数据。
阿夫拉罕·卓巴

最好的解决方案,只需ctrl + f活动,您就会找到所需的东西
Ger Mc

1

您还可以将ddms用于logcat日志,其中仅提供搜索应用程序名称的所有信息,但您必须选择Info而不是冗长的选项或其他选项。检查下面的图像。

在此处输入图片说明


0

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

运行以下命令:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.