Appium 关于如何获取 apk 包名即 appPackage 和 appActivity

eric · 2014年06月19日 · 最后由 甬力君 回复于 2016年09月12日 · 8165 次阅读
本帖已被设为精华帖!

方法 1:(效率最高的)
问开发人员

方法 2:
a、启动待测 apk
b、开启日志输出:adb logcat>D:/log.txt
c、关闭日志输出:ctrl+c
d、查看日志
找寻:Displayed com.mm.android.hsy/.ui.LoginActivity: +3s859ms
appPackage = com.mm.android.hsy
appActivity = .ui.LoginActivity

欢迎补充其他方法

➜  ContactManager git:(master) ✗ aapt dump badging ContactManager.apk
package: name='com.example.android.contactmanager' versionCode='1' versionName='1.0'
sdkVersion:'5'
targetSdkVersion:'5'
uses-permission:'android.permission.GET_ACCOUNTS'
uses-permission:'android.permission.READ_CONTACTS'
uses-permission:'android.permission.WRITE_CONTACTS'
application-label:'Contact Manager'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Contact Manager' icon='res/drawable-mdpi/icon.png'
application-debuggable
launchable-activity: name='com.example.android.contactmanager.ContactManager'  label='Contact Manager' icon=''
uses-permission:'android.permission.READ_CALL_LOG'
uses-implied-permission:'android.permission.READ_CALL_LOG','targetSdkVersion < 16 and requested READ_CONTACTS'
uses-permission:'android.permission.WRITE_CALL_LOG'
uses-implied-permission:'android.permission.WRITE_CALL_LOG','targetSdkVersion < 16 and requested WRITE_CONTACTS'
uses-feature:'android.hardware.touchscreen'
uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional'
main
other-activities
supports-screens: 'small' 'normal' 'large'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'
共收到 21 条回复 时间 点赞

apt dump badging + 客户端包所在路径 + 客户端包名称,使用这个更快。

直接用工具反编译包,什么都知道了

我一直用的方法是:
adb shell
logcat | grep cmp=

hierarchy view

packagename、activity、控件属性一齐都搞了~

顶一楼,aapt dump 屌炸天,不解释

#3 楼 @newfounder 这个不错,以前一直用一楼的方法。

不是说不需要这两个参数了么…

还可以使用 python,写一个自动化程序,直接分析包,很多数据都可以出来,还可以学习一下后边的原理,例如:apktool 等。

aapt dump

pm list packages -f
或者设备的文件系统 data 分区下/data/system/packagelist.txt 类似文件所有的应用包名都有的

直接用 packageinfo 里的信息写一个类似应用管理的 android 应用,把这应用装手机里,就可以看到手机里所有 APP 的包名和入口 activity 名了。
我就这么干的,一劳永逸,不但方便了自己,也方便了同事们入门。

可借鉴:http://blog.csdn.net/yudajun/article/details/7855270

aapt 工具 android sdk 的 tools 文件夹下,自带的工具。
把 [Android_sdkPath]/sdk/tools 添加到环境变量中,整个 shell 或批处理。

#!/bin/bash
set +x

binary_name=$1

pkg=$(aapt dump badging ${binary_name}|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
act=$(aapt dump badging ${binary_name}|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')

echo ${pkg}
echo ${act}

顶一楼 和楼上!!

用的 10 楼的 pm.....

匿名 #15 · 2014年07月09日

看到了,就说两句,获取 apk 中 Activity 名的最有效方法是用 apktool 反编译 apk,直接得到反编译后的 AndroidManifest.xml,跟看源码一样了~

喜欢 用 aapt dump

直接把 apk 后缀改为 zip 格式,打开压缩包后再打开 AndroidManifest.xml 文件。找到 manifest 和 activity 地方,就是包名跟 activity 名。 不知道这样行不行?

#17 楼 @xiaoxiaoimg 尝试了这个方法,可以。!!!

获取 appPackage 和 appActivity 的方法好多呀,学习了, 谢谢楼主和各位的分享

试过上面各种方法,觉得这 2 种不错,各有优点

1.这种不需要 aapt.exe,不过结果日里内容多也有点不好找,但没有 apk 文件的原生应用也可以找
adb shell
logcat | grep cmp=

2.aapt dump badging + 客户端包所在路径 + 客户端包名称.apk
这个看你有没有 aapt.exe,这个很直观,你也可以执行命令时输出成 log 来看,有 apk 的推荐这种。反编译查看 xml 应该用的也是这种方法。

当然,上面两种方法如果还觉得麻烦就只好写 shell 或者 bat 了。

乙醇 [该话题已被删除] 中提及了此贴 07月05日 14:59

手机自带 busybox:
adb shell "dumpsys window w|grep \/|grep name=|busybox cut -d = -f 3|busybox cut -d ) -f 1"
系统不带 busybox:
adb shell "dumpsys window w|grep \/|grep name=|sed 's/mSurface=Surface(name=//g'|sed 's/)//g'|sed 's/ //g'"

Viking Den LINE 这个 app 怎么启动不了? 中提及了此贴 09月03日 09:45
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册