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

如何提取APK的包名?


当前回答

你可以在模拟器上安装Package_Name_Viewer.apk,接下来你可以在模拟器上看到所有已安装应用程序的包名。

其他回答

如果你正在看谷歌播放,想知道它的包名,那么你可以看看url或地址栏。您将得到包名称。这里com.landshark.yaum是包名

 https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd

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

一个非常简单的方法是使用apkanalyzer。

apkanalyzer manifest application-id "${_path_to_apk}"

由于我无法用编辑器在.apk文件中找到包名(如上所述),我检查了我已经安装的应用程序“ES Datei资源管理器”/“ES文件资源管理器”(免费版本)中的功能。 在此工具中,包名称将正确显示。 因为我认为手机上不应该缺少一个好的文件资源管理器,我建议使用这个工具(如果你已经在手机上安装了apk,并且必须知道包的名称)。

如果你没有安装Android SDK,就像在一些测试场景中一样,你可以使用下面的bash方法获取包的名称:

getAppIdFromApk() {
  local apk_path="$1"

  # regular expression (required)
  local re="^\"L.*/MainActivity;"
  # sed substitute expression
  local se="s:^\"L\(.*\)/MainActivity;:\1:p"
  # tr expression
  local te=' / .';

  local app_id="$(unzip -p $apk_path classes.dex | strings | grep -Eo $re | sed -n -e $se | tr $te)"

  echo "$app_id"
}

在mac上测试。'strings'和'unzip'在大多数linux上是标准的,所以也应该在linux上工作。