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

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

方法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.....

看到了,就说两句,获取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
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册