阅读Android APK的包名称

Dag*_*ang 189 android apk

我需要获取Android APK 的包名.我试图解压缩APK并阅读内容AndroidManifest.xml,但似乎它不是文本文件.

如何提取APK的包名?

hac*_*bod 303

aapt dump badging <path-to-apk> | grep package:\ name
Run Code Online (Sandbox Code Playgroud)

  • `aapt`命令位于`Android\SDK\build-tools\version`下.在windows命令上可以是`aapt dump badging <path-to-apk> | findstr -i"package:name"`或`aapt dump badging <path-to-apk>` (15认同)
  • appt dump badging <path-to-apk> | grep包:\name (7认同)
  • @Campiador你可以直接输入管道`|`,按回车键然后只需在输出中搜索你想要的参数.请记住,'aapt`需要在你的道路上 (2认同)
  • macOS 上的“aapt”位于“~/Library/Android/sdk/build-tools/{version}” (2认同)

Dan*_*ail 72

您可以在手机上安装apk

使用adb连接,您可以启动adb shell并执行pm list packages -f,它显示每个已安装的apk的包名称.

这取自 Android应用程序的查找程序包名称,以使用Intent从Web启动Market应用程序

  • 搜索特定的包名称`pm list packages -f | grep term-to-search-for` (4认同)

小智 13

如果您使用MS记事本打开AndroidManifest.xml,搜索短语package,您会发现以下内容:

package manifest $xxx.xxxxxxx.xxxxxxx |
Run Code Online (Sandbox Code Playgroud)

其中xxx.xxxxxxx.xxxxxxx是您的包名,只是在每个字符后面写一个空格.

当您没有安装任何特定工具时,这是有用的方法.

  • 我解压了 APK,但 AndroidManifest.xml 是一个二进制文件。奇怪但真实。 (2认同)

Sha*_*mam 12

如果您正在查看Google Play并想知道其包名,那么您可以查看网址或地址栏.您将获得包名称.这com.landshark.yaum是包名

 https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Run Code Online (Sandbox Code Playgroud)


Bra*_*rks 12

以下bash脚本将显示包名称和主活动名称:

apk_package.sh

package=$(aapt dump badging "$*" | awk '/package/{gsub("name=|'"'"'","");  print $2}')
activity=$(aapt dump badging "$*" | awk '/activity/{gsub("name=|'"'"'","");  print $2}')
echo
echo "   file : $1"
echo "package : $package"
echo "activity: $activity"
Run Code Online (Sandbox Code Playgroud)

像这样运行:

apk_package.sh /path/to/my.apk
Run Code Online (Sandbox Code Playgroud)


use*_*530 12

由于Android文档中提到AAPT已被弃用,因此在Linux中使用AAPT2命令获取包名称如下:

./aapt2 dump packagename <path_to_apk>

由于我使用的是较旧版本的 Gradle 构建,因此我必须下载较新版本的 AAPT2,如下所述:

从 Google Maven 下载 AAPT2

使用我的 sdk - 25.0.3、26.0.1 和 27.0.3 中的构建工具,执行 aapt2 命令显示错误:无法打开“packagename”:没有这样的文件或目录。这就是我选择更新版本的 AAPT2 的原因。

我在 Linux 上使用的是 3.3.0-5013011。


equ*_*man 11

基于@hackbod回答......但与windows有关.

aapt命令位于Android\SDK\build-tools\version.如果您需要更多关于什么的信息appt command(Android资产包装工具),请阅读/sf/answers/1976446951/

所述dump的子命令aapt用于显示一个包的各个元件或部件的值:

aapt dump badging <path-to-apk>

如果您只想查看包含package: name信息的行,请使用findstr

aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"

希望它能帮助其他Windows用户!


Bru*_*sky 8

程序性答案

如果您需要以编程方式进行此操作,则涉及的不仅仅是将答案带入您的大脑。我有一个脚本,用于签署所有应用程序,但每个脚本使用不同的密钥。有两种方法可以获取包名称作为输出,因此可以将其放在变量中或对其进行任何处理。

输出示例:(com.example.appname仅此而已)

要求

aapt-Android资产打包工具,是SDK工具下载的一部分

解决方案1

使用awk指定'作为字段分隔符,使用来搜索一行package: name=,并仅在该行中打印第二个“字段”:

aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'
Run Code Online (Sandbox Code Playgroud)

此方法的弱点在于,它依赖于aapt以相同的顺序输出包信息字段:

package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'
Run Code Online (Sandbox Code Playgroud)

开发人员没有承诺保留这种格式。

解决方案2

使用awk指定"作为字段分隔符,使用来搜索一行package=,并仅在该行中打印第二个“字段”:

aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
Run Code Online (Sandbox Code Playgroud)

该方法的一个弱点是,它package=仅依赖于仅在输出Android Manifest:部分中输出。开发人员没有承诺保留这种格式。

解决方案3

使用展开apk文件,apktool d并阅读AndroidManifest.xml。

这将是最好的方法,但是AndroidManifest.xml是一个二进制文件,我看到的将其转换为文本的所有SO回答都行不通。(应该使用apktool d简单的方法代替简单的unzip方法,但是不能。)如果您有解决此问题的方法,请发表评论

  • 感谢您提供更多信息以供理解,而不仅仅是提供一行命令来复制。 (2认同)

Dan*_*nai 7

您可以从 Android Studio 的“构建”菜单中使用Analyze APK...,它将在新窗口的顶部显示包名称。


Sai*_*Sai 6

一个简单的解决方案是打开 Android Studio -> 构建 -> 分析 Apk... 浏览并选择 APK 现在您可以找到包名称并且几乎可以阅读。