aapt 命令详解

| 选择喜欢的代码风格  

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

aapt 命令安装:


-bash: aapt: command not found

#Windows
1. 找到本机上aapt工具的安装路径(或 aapt2)
/Users/CommandNotFound/android-sdk/build-tools/28.0.3/aapt

2. 切换目录到/usr/local/bin,将aapt复制到该目录下
/Users/CommandNotFound/android-sdk/build-tools/28.0.3/aapt /usr/local/bin

3. 运行aapt成功
$ aapt v
Android Asset Packaging Tool, v0.2-5747142

--------------------------
#Debian
apt-get install aapt

#Ubuntu
apt-get install aapt

#Kali Linux
apt-get install aapt

#Raspbian
apt-get install aapt

aapt 命令语法:


aapt l[ist] [-v] [-a] <你的应用>

-v 以table形式列出来
-a 详细列出内容

#例如:aapt l <你的apk文件>,这个命令就是查看apk内容

aapt(APKTool)扩展阅读:


aapt 命令选项和参数:


提示:由于我们工作中需要使用badging参数来查看versioncode,因此可以使用命令aapt dump badging | findstr “versionCode”来查看

选项 说明 例子
badging 查看apk包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息 aapt dump badging file_path.apk
permissions 查看apk包的权限信息 aapt dump permissions file_path.apk
resources 查看资源列表 aapt dump resources file_path.apk >1.txt
configurations 查看apk配置信息 aapt dump configurations file_path.apk
xmltree 以树形结构输出的xml信息。 aapt dump xmltree file_path.apk res/***.xml
xmlstrings 查看指定apk的指定xml文件。 aapt xmlstrings resources file_path.apk res/***.xml
aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]
#例如:aapt d permissions <apk文件>, 这个就是显示这个apk所具有的权限


#android 编译资源打包资源文件的命令
aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \
        [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \
        [--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \
        [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \
        [--rename-manifest-package PACKAGE] \
        [--rename-instrumentation-target-package PACKAGE] \
        [--utf16] [--auto-add-overlay] \
        [--max-res-version VAL] \
        [-I base-package [-I base-package ...]] \
        [-A asset-source-dir]  [-G class-list-file] [-P public-definitions-file] \
        [-D main-dex-class-list-file] \
        [-S resource-sources [-S resource-sources ...]] \
        [-F apk-file] [-J R-file-dir] \
        [--product product1,product2,...] \
        [-c CONFIGS] [--preferred-density DENSITY] \
        [--split CONFIGS [--split CONFIGS]] \
        [--feature-of package [--feature-after package]] \
        [raw-files-dir [raw-files-dir] ...] \
        [--output-text-symbols DIR]

-d:包括一个或多个设备资源,由逗号分隔;
-f:覆盖现有的文件命令,加上后编译生成直接覆盖目前已经存在的R.java;
-m:使生成的包的目录放在-J参数指定的目录;
-u:更新现有的包 u = update;
-v:详细输出,加上此命令会在控制台输出每一个资源文件信息,R.java生成后还有注释。
-x:创建扩展资源ID;
-z:需要本地化的资源属性标记定位。
-M:AndroidManifest.xml的路径
-0:指定一个额外的扩展. apk文件将不会存储压缩
-g:制定像素迫使图形的灰度
-j:指定包含一个jar或zip文件包,这个命令很特别
–debug-mode:指定的是调试模式下的编译资源;
–min-sdk-versopm VAL:最小SDK版本 如是7以上 则默认编译资源的格式是 utf-8
–target-sdk-version VAL:在androidMainfest中的目标编译SDK版本
–app-version VAL:应用程序版本号
–app-version-name TEXT:应该程序版本名字;
–custom-package VAL:生成R.java到一个不同的包
–rename-mainifest-package PACKAGE:修改APK包名的选项;
–rename-instrumentation-target-package PACKAGE:重写指定包名的选项;
–utf16:资源编码修改为更改默认utf – 16编码;
–auto-add-overlay:自动添加资源覆盖
–max-res-version:最大资源版本
-I:指定的SDK版本中android.jar的路径
-A:assert文件夹的路径
-G:一个文件输出混淆器选项,后面加文件逗号隔开.
-P:指定的输出公共资源,可以指定一个文件 让资源ID输出到那上面;
-S:指定资源目录 一般是 res
-F:指定把资源输出到 apk文件中
-J:指定R.java输出的路径
raw-file-dir:附加打包进APK的文件

aapt 命令实例:


常用:查看APK的信息

[root@dsp_web_95 09]$aapt d badging Z5GoecB71543801820973OhhMig9T.apk 
package: name='com.tansuotv.vcgame' versionCode='20406' versionName='2.4.6'
sdkVersion:'17'
targetSdkVersion:'21'
uses-permission:'android.permission.ACCESS_DOWNLOAD_MANAGER'
uses-permission:'android.permission.ACCESS_WIFI_STATE'
uses-permission:'android.permission.CHANGE_WIFI_STATE'
uses-permission:'android.permission.INTERNET'
uses-permission:'android.permission.ACCESS_NETWORK_STATE'
uses-permission:'android.permission.KILL_BACKGROUND_PROCESSES'
uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission:'android.permission.READ_EXTERNAL_STORAGE'
uses-permission:'android.permission.MOUNT_UNMOUNT_FILESYSTEMS'
uses-permission:'android.permission.DOWNLOAD_WITHOUT_NOTIFICATION'
uses-permission:'android.permission.READ_PHONE_STATE'
uses-permission:'android.permission.ACCESS_COARSE_LOCATION'
application: label='家嬉兔游戏' icon='res/mipmap-xhdpi-v4/icon_launch200.png'
launchable activity name='com.tansuotv.vcgame.activity.SplashActivity'label='' icon=''
uses-feature:'android.hardware.location'
uses-feature:'android.hardware.location.network'
uses-feature:'android.hardware.wifi'
uses-feature:'android.hardware.touchscreen'
main
other-activities
other-receivers
other-services
supports-screens: 'small' 'normal' 'large' 'xlarge'
supports-any-density: 'true'
locales: '--_--' 'ca' 'da' 'fa' 'ja' 'nb' 'de' 'af' 'bg' 'th' 'fi' 'hi' 'vi' 'sk' 'uk' 'el' 
'nl' 'pl' 'sl' 'tl' 'am' 'in' 'ko' 'ro' 'ar' 'fr' 'hr' 'sr' 'tr' 'cs' 'es' 'it' 'lt' 'pt' 
'hu' 'ru' 'zu' 'lv' 'sv' 'iw' 'sw' 'fr_CA' 'lo_LA' 'en_GB' 'bn_BD' 'et_EE' 'ka_GE' 'ky_KG' 
'km_KH' 'zh_HK' 'si_LK' 'mk_MK' 'ur_PK' 'sq_AL' 'hy_AM' 'my_MM' 'zh_CN' 'pa_IN' 'ta_IN' 
'te_IN' 'ml_IN' 'en_IN' 'kn_IN' 'mr_IN' 'gu_IN' 'mn_MN' 'ne_NP' 'pt_BR' 'gl_ES' 'eu_ES' 
'is_IS' 'es_US' 'pt_PT' 'en_AU' 'zh_TW' 'ms_MY' 'az_AZ' 'kk_KZ' 'uz_UZ'
densities: '160' '240' '320' '480' '640'
native-code: 'armeabi'

打包好的apk中移除文件

#aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
#例如:这个就是将apk中的AndroidManifest移除掉

aapt r {你的apk文件} AndroidManifest.xml

添加文件到打包好的apk中

#aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
#例如:这个就是将文件添加到打包好的apk文件中

aapt a {你的apk文件} {要添加的文件路径}

显示aapt的版本

#aapt v[ersion]

[root@Dev ~]$aapt v
Android Asset Packaging Tool, v0.2

aapt 命令的坑:


在 Windows 上执行 aapt 命令的小伙伴,可能有时候发现出来的结果是乱码?其实是 Windows 下的命令窗口默认是采用非UTF-8编码的,有时候运行一些UTF-8编写的批处理文件在控制台中的输出就是乱码..

解决办法
CHCP 设置编码,这是MD DOS中的命令,用来显示或设置活动代码页编号的。用法是:

CHCP [num] 
#其中num指定的是代码页的编号。
#这个参数是可选的,如果,在默认的cmd窗口中,我们只输入chcp,
显示的将类似活动的代码页: 936 

以下是几种常用的编码:

  1. 936 GBK(一般情况下为默认编码)
  2. 437 美国英语
  3. 65001 utf-8

#要设置CMD窗口编码格式为UTF-8,运行cmd,输入下面命令:

chcp 65001

aapt/aapt2 扩展阅读:




aapt 命令评论