1. 已安装的 APP
假设这个app是安装到Android 设备上了, 以diskinfo这个app为例
查找包名
adb shell pm list packages
这样会列出一大堆,检索一下会更清晰,一般包名都会包含app的名字
adb shell pm list packages | grep diskinfo
结果如下
package:me.kuder.diskinfo
查找 Main Activity
通常我们想要通过adb shell am start 来启动
- 方法 1 'pm dump [package_name]'
adb shell pm dump me.kuder.diskinfo | grep -A 1 MAIN
结果如下
android.intent.action.MAIN:
81106aa me.kuder.diskinfo/.ItemListActivity filter 9a607dd
- 方法 2 'cmd package resolve-activity’
adb shell "cmd package resolve-activity --brief me.kuder.diskinfo | tail -n 1"
结果如下
me.kuder.diskinfo/.ItemListActivity
- 方法 3 ‘logcat’ 适合已经启动的app
对于启动了的app,logcat也可以很快看出 package 和 Activity
logcat | grep cmp=
结果里面包含
ActivityManager: START u0 {flg=0x10000000 cmp=me.kuder.diskinfo/.ItemListActivity} from uid 10014
- 方法 4 'dumpsys package’
dumpsys package me.kuder.diskinfo
结果如下
Activity Resolver Table:
Non-Data Actions:
android.intent.action.MAIN:
81106aa me.kuder.diskinfo/.ItemListActivity filter 9a607dd
Action: "android.intent.action.MAIN"
Category: "android.intent.category.LAUNCHER"
- 方法 5 'dumpsys window’
dumpsys window windows | grep -E 'mCurrentFocus'
结果如下
mCurrentFocus=Window{dd34d27 u0 me.kuder.diskinfo/me.kuder.diskinfo.ItemListActivity}
从设备获取APK
安装过的app原文件在设备上可以pull下来, 通过pm list packages -f
adb shell pm list packages -f | grep diskinfo
结果如下
/data/app/me.kuder.diskinfo-lYCrL1uUxrZz3BIEufaGMA==/base.apk
就可以通过adb pull 这个apk到主机了,这个apk和安装的apk是一样的
2. 未安装APK文件
假设apk名字就是 diskinfo.apk
aapt dump
aapt 工具位于 Sdk/build-tools/xxxx/
路径下
ubuntu也可以通过apt install 安装
- 方法1
aapt dump badging base.apk
其中结果包含
package: name='me.kuder.diskinfo' versionCode='49910' versionName='4.9.9 (build 10)' platformBuildVersionName='4.9.9 (build 10)'
...
launchable-activity: name='me.kuder.diskinfo.ItemListActivity' label='DiskInfo' icon=''
当然这样比较粗糙,可以在下命令的时候加上filter
获取包名
aapt dump badging diskinfo.apk | grep package | awk '{print $2}' | sed s/name=//g | sed s/\'//g
获取Activity
aapt dump badging diskinfo.apk | grep Activity | awk '{print $2}' | sed s/name=//g | sed s/\'//g
- 方法2
解析 AndroidManifest.xml
aapt dump xmltree diskinfo.apk AndroidManifest.xml
其中结果包含
A: package="me.kuder.diskinfo" (Raw: "me.kuder.diskinfo")
A: android:name(0x01010003)="me.kuder.diskinfo.ItemListActivity"
apktool等
非常规手段,就不做记录了