我需要得到一个Android APK的包名。我已经尝试解压缩APK和读取AndroidManifest.xml文件的内容,但它似乎不是一个文本文件。

如何提取APK的包名?


当前回答

如果你只是想知道包的名称,运行adb logcat,启动你想要的活动,你会得到一个包名称的提示。

其他回答

下面的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"

像这样运行它:

apk_package.sh /path/to/my.apk

如果你使用MS Notepad打开AndroidManifest.xml,搜索短语包,你会发现以下内容:

package manifest $xxx.xxxxxxx.xxxxxxx |

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

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

你可以通过以下方式获取包名:

packageManager.getPackageArchiveInfo(apkFilePath, 0)?.packageName

要在批处理脚本中使用它,让脚本只返回包名是很方便的(例如,当你有APK时卸载应用程序)。

下面是我使用的脚本:

# extract the android package id from a built apk file
# usage ./getPackageName.sh <path-to-apk>
line=`aapt dump badging "$1" | grep package:\ name`

# above returns:
# package: name='com.calvium.myapp' versionCode='1' versionName='1.0'
if [[ $line =~ name=\'(.+)\'\ versionCode ]]; then
    echo ${BASH_REMATCH[1]}
else
    echo "Failed to find package name"
    exit 1
fi

可参考要旨

你可以这样写:

adb卸载`./getPackageName.sh file.apk`

一个简单的解决方案是Open Android Studio -> Build -> Analyze Apk…浏览并选择APK,现在你可以找到包的名称,你可以阅读。