Android 是否有一个adb shell命令来了解包的所有活动名称

Android 是否有一个adb shell命令来了解包的所有活动名称,android,android-activity,Android,Android Activity,我在安卓方面没有经验,所以这个基本问题 我不是一个程序员,所以我想要一些类似shell命令的东西,而不是代码 在我的手机中,我安装了一套应用程序。我知道如何通过查找应用程序包列表 adb shell pm list packages 从使用上述命令显示的包列表中,一旦我知道我的包名(比如xyz包),我必须使用哪个shell命令来列出该包(xyz包)下的所有活动 有没有办法从apk文件中知道活动名称?我可以使用我的包获取apk文件名 adb shell pm list packages -f

我在安卓方面没有经验,所以这个基本问题

我不是一个程序员,所以我想要一些类似shell命令的东西,而不是代码

在我的手机中,我安装了一套应用程序。我知道如何通过查找应用程序包列表

adb shell pm list packages
从使用上述命令显示的包列表中,一旦我知道我的包名(比如xyz包),我必须使用哪个shell命令来列出该包(xyz包)下的所有活动

有没有办法从apk文件中知道活动名称?我可以使用我的包获取apk文件名

 adb shell pm list packages -f "my package name"
因此,您可以让我知道从apk文件中列出活动名称的shell命令吗

因此,您可以让我知道从apk文件中列出活动名称的shell命令吗

假设您有权访问APK文件,您可以使用
aapt
(Android SDK构建工具附带)读取打包清单的内容:

aapt l -a filename.apk
输出还包括所有资源和标识符的(可能较大)列表。清单特定的输出应该在底部

如果您只对清单感兴趣,而不关心资源和内容,则可以利用
sed
跳过所有其他内容:

aapt l -a filename.apk | sed -n -e '/manifest/,$p'
样本输出:

Android manifest:
N: android=http://schemas.android.com/apk/res/android
  E: manifest (line=2)
    A: android:versionCode(0x0101021b)=(type 0x10)0x2
    A: android:versionName(0x0101021c)="1.1" (Raw: "1.1")
    A: package="com.example.packagename" (Raw: "com.example.packagename")
    E: uses-sdk (line=4)
      A: android:minSdkVersion(0x0101020c)=(type 0x10)0x7
      A: android:targetSdkVersion(0x01010270)=(type 0x10)0xf
    E: uses-permission (line=6)
      A: android:name(0x01010003)="android.permission.WRITE_EXTERNAL_STORAGE" (Raw: "android.permission.WRITE_EXTERNAL_STORAGE")
    E: uses-permission (line=7)
      A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
    E: uses-permission (line=8)
      A: android:name(0x01010003)="android.permission.ACCESS_NETWORK_STATE" (Raw: "android.permission.ACCESS_NETWORK_STATE")
    E: uses-permission (line=9)
      A: android:name(0x01010003)="android.permission.CAMERA" (Raw: "android.permission.CAMERA")
    E: uses-feature (line=11)
      A: android:name(0x01010003)="android.hardware.camera" (Raw: "android.hardware.camera")
    E: application (line=13)
      A: android:theme(0x01010000)=@0x1030007
      A: android:label(0x01010001)=@0x7f0a001e
      A: android:icon(0x01010002)=@0x7f020077
      A: android:name(0x01010003)=".Application" (Raw: ".Application")
      E: activity (line=14)
        A: android:label(0x01010001)=@0x7f0a001e
        A: android:name(0x01010003)=".Activity1" (Raw: ".Activity1")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
        E: intent-filter (line=15)
          E: action (line=16)
            A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
          E: category (line=18)
            A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
      E: activity (line=21)
        A: android:name(0x01010003)=".Activity2" (Raw: ".Activity2")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
        A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x2
      E: activity (line=22)
        A: android:name(0x01010003)=".Activity3" (Raw: ".Activity3")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
      E: activity (line=23)
        A: android:name(0x01010003)=".Activity4" (Raw: ".Activity4")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
      E: activity (line=24)
        A: android:name(0x01010003)=".Activity5" (Raw: ".Activity5")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
        A: android:windowSoftInputMode(0x0101022b)=(type 0x11)0x2
      E: activity (line=25)
        A: android:name(0x01010003)=".Activity6" (Raw: ".Activity6")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
      E: activity (line=26)
        A: android:name(0x01010003)=".Activity7" (Raw: ".Activity7")
        A: android:screenOrientation(0x0101001e)=(type 0x10)0x0
您可能可以进一步筛选,以仅获取活动名称,但我将让您自己来解决这一问题。:)

参考资料:


adb shell dumpsys软件包
将列出软件包的所有活动以及所有活动名称和相应意图