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

时间:2015-03-11 10:57:07

标签: android android-activity

我在Android方面有0经验,所以这个基本问题。

我不是程序员,所以我想要shell命令而不是代码。

在我的手机中,我安装了一组应用程序。我可以通过

知道如何查找应用程序包的列表
adb shell pm list packages

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

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

获取apk文件名
 adb shell pm list packages -f "my package name"

那么请你告诉我从apk文件中列出活动名称的shell命令。

2 个答案:

答案 0 :(得分:2)

  

那么请你告诉我从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

您可以进一步过滤以获取活动名称,但我会自行解决这个问题。 :)

参考文献:

答案 1 :(得分:0)

adb shell dumpsys package <packageName>将列出包中的所有活动以及所有活动名称和对应的意图