Answers:
aapt dump badging <path-to-apk> | grep package:\ name
|
,按Enter键,然后在输出中搜索所需的参数。只需记住,这aapt
需要走在自己的路上
aapt
命令位于下Android\SDK\build-tools\version
。在Windows命令可以是aapt dump badging <path-to-apk> | findstr -i "package: name"
或aapt dump badging <path-to-apk>
您可以将apk安装在手机上,然后
使用adb连接时,您可以启动adb shell并执行pm list软件包-f,其中显示了每个已安装apk的软件包名称。
su
首先使用命令。
pm list packages -f | grep term-to-search-for
基于@hackbod答案...但与Windows有关。
aapt
命令位于Android\SDK\build-tools\version
。如果您需要有关什么的更多信息appt command
(Android资产打包工具),请阅读此https://stackoverflow.com/a/28234956/812915
的dump
子命令aapt
用于显示包中各个元素或部分的值:
aapt dump badging <path-to-apk>
如果您只想查看包含package: name
信息的行,请使用findstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
希望对其他Windows用户有所帮助!
如果您正在看Google Play并想知道其程序包名称,则可以查看网址或地址栏。您将获得包名称。这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
如果您需要以编程方式执行此操作,则不仅要让答案进入您的大脑,还需要更多的精力。我有一个脚本,用于签署所有应用程序,但是每个脚本使用不同的密钥。这有两种获取软件包名称的方法作为输出,因此可以将其放在变量中或使用它进行任何操作。
输出示例:(com.example.appname
仅此而已)
aapt
-Android资产打包工具,是SDK工具下载的一部分
使用awk
指定'
作为字段分隔符,使用搜索行package: name=
,并仅在该行中打印第二个“字段”:
aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'
该方法的一个弱点是,它依赖于aapt以相同的顺序输出包信息字段:
package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'
开发人员没有承诺保留这种格式。
使用awk
指定"
作为字段分隔符,使用搜索行package=
,并仅在该行中打印第二个“字段”:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
该方法的弱点在于它package=
仅依赖于仅在输出的Android Manifest:
部分中输出。开发人员没有承诺保留这种格式。
使用展开apk文件,apktool d
并阅读AndroidManifest.xml。
这将是最好的方法,但是AndroidManifest.xml是一个二进制文件,我看到的将其转换为文本的所有SO回答都行不通。(应该使用apktool d
简单的方法代替简单的unzip
方法,但是不能。)如果您有解决此问题的方法,请发表评论。
另一个解决方案是使用aapt列表并使用sed来解析该列表:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
的Android Manifest:
部分,如果你这样做aapt list -a
您可以从APK中提取AndroidManifest.xml,删除所有NULL字节,跳过所有内容,直到字符串“ manifest”之后,然后是一个长字节,后跟程序包名称(及其后的内容)。对于艰巨的任务,我使用了出色的GEMA工具,因此命令如下所示:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'
当然,您可以使用任何其他工具进行过滤。
如果您没有安装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上工作。
要在批处理脚本中使用此脚本,使脚本仅返回程序包名称非常方便(例如,在拥有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`
对于Windows,以下对我有用:
:: // Initializing variables
SET adb="C:\Users\<User name>\AppData\Local\Android\Sdk\platform-tools\adb"
SET aapt="C:\Users\<User name>\AppData\Local\Android\Sdk\build-tools\22.0.0\aapt"
SET APKPath=C:\Users\<User name>\Desktop\APK\Instant_Instal\
CD %APKPath%
:: // Searching for apk file and storing it
FOR /F "delims=" %%f IN ('dir /S /B *.apk') DO SET "APKFullPath=%%f"
SET apk=%APKFullPath%
:: // Command adb install apk, run apk
%adb% install %apk%
:: // Fetching package name from apk
%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
FOR /F "tokens=2 delims='" %%s IN (temp.txt) DO SET pkgName=%%s
del temp.txt
:: // Launching apk
%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
pause
注意
请根据adb,aapt的路径以及系统中的apk位置编辑adb,aapt,APKPath的路径。
加工:
%adb% install %apk%
如果连接了设备,该命令将安装应用程序。%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
获取包名称和apk的版本等其他一些详细信息,并将其存储在temp.txt文件中,该文件与apk的位置相同。extracts the package name and assigns to
pkgName`变量%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
启动应用程序。实质上,以上代码从桌面“ Desktop \ APK \ Instant_Instal \”中的给定位置将apk安装到设备并启动应用程序。
自从Android文档中提到AAPT已被弃用以来,在Linux中使用AAPT2命令获取软件包名称的方法如下:
./aapt2 dump packagename <path_to_apk>
由于我使用的是Gradle构建的旧版本,因此我必须下载AAPT2的新版本,如此处所述:
在我的SDK-25.0.3、26.0.1和27.0.3中使用构建工具时,执行aapt2命令会显示错误:无法打开“ packagename”:没有这样的文件或目录。这就是为什么我选择较新版本的AAPT2。
我将3.3.0-5013011用于Linux。
您可以Analyze APK...
在Android Studio的“构建”菜单中使用,它将在新窗口顶部显示包名称。