aapt

aaptAndroid Assets Packaging Tool)用于将程序的class文件、resAndroidManifest.xml等经过压缩和编码,合并到apk文件中。

aaptAndroid SDKbuild-tools目录下。

aapt可以创建、更新、查看zip格式的 文档附件(zipjarapk)。也可将资源文件编译成二进制文件。

尽管你可能没有直接使用过aapt工具,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android应用程序。

64-bit GNU/Linux会出现下面的问题:

解决办法:

yum install glibc.i686

解决办法:

yum install zlib.i686

解决办法:

yum install libstdc++.i686

查看aapt的帮助:

用法:

aapt <sub-command> [option]
1.1、aapt l[ist]

列出资源压缩包里的内容。

查看aapt l[ist]的帮助:

aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.

示例:

1.1.1、-v

table形式列出来。

示例:

1.1.2、-a

详细列出内容。

示例:

1.2、aapt d[ump]

查看apk包内指定的内容。

查看aapt d[ump]的帮助:

aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]
   strings          Print the contents of the resource table string pool in the APK.
   badging          Print the label and icon for the app declared in APK.
   permissions      Print the permissions from the APK.
   resources        Print the resource table from the APK.
   configurations   Print the configurations in the APK.
   xmltree          Print the compiled xmls in the given assets.
   xmlstrings       Print the strings of the given compiled xml assets.

示例:

打印出所有需要的权限:

打印出所有需要的资源:

打印出配置相关的信息:

1.3、aapt p[ackage]

用于生成R.javaR.txt、编译后的资源包(ap_)。

查看aapt p[ackage]的帮助:

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] \
        [-S resource-sources [-S resource-sources ...]] \
        [-F apk-file] [-J R-file-dir] \
        [--product product1,product2,...] \
        [-c CONFIGS] [--preferred-configurations CONFIGS] \
        [raw-files-dir [raw-files-dir] ...] \
        [--output-text-symbols DIR]

   Package the android resources.  It will read assets and resources that are
   supplied with the -M -A -S or raw-files-dir arguments.  The -J -P -F and -R
   options control which files are output.

参数说明:

参数是否可选说明
-S必选指定res文件夹路径
-M必选指定AndroidManifest.xml的路径
-I必选指定某个版本的android.jar的路径
-A可选指定assert文件夹的路径,指定的文件夹必须存在,不然会报错。
-f可选如果编译出来的文件已经存在,强制覆盖。
-m可选使生成的R.java放在-J参数指定的目录。
-J可选指定要生成的R.java的目录,指定的目录必须存在,不然会报错。
--output-text-symbols可选指定要生成的R.txt的目录,指定的目录必须存在,不然会报错。
-F可选指定要生成的ap_文件的路径,ap_文件是apk文件的半成品, 他和apk文件都是zip格式的,ap_文件里包含有resources.arscAndroidManifest.xml等文件,我们可以在ap_文件的基础上,通过appt add命令 往ap_文件中增加其他内容,比如classes.dex和其他文件,最终把ap_文件的后缀名改为apk就是变成了未签名的apk文件。

示例:

1、生成R.java文件:

mkdir gen/
aapt package -f -m -J gen/ -M AndroidManifest.xml -S res/ -I /usr/local/share/android-sdk/platforms/android-26/android.jar

2、生成R.txt文件:

mkdir gen/
aapt package -f -m -J gen/ -M AndroidManifest.xml -S res/ -I /usr/local/share/android-sdk/platforms/android-26/android.jar --output-text-symbols .

3、生成资源压缩包:

mkdir gen/
aapt package -f -m -J gen/ -M AndroidManifest.xml -S res/ -I /usr/local/share/android-sdk/platforms/android-26/android.jar -F res.ap_
1.4、aapt r[emove]

从压缩包中删除指定文件。

查看aapt r[emove]的帮助:

aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
   Delete specified files from Zip-compatible archive.

示例:

1.4、aapt a[dd]

向压缩包中添加指定文件。

查看aapt a[dd]的帮助:

aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
   Add specified files to Zip-compatible archive.

示例1:

aapt add res.ap_ classes.dex
mv res.ap_ app.apk

示例2:

1.5、aapt v[ersion]

打印aapt工具的版本。

查看aapt v[ersion]的帮助:

aapt v[ersion]
   Print program version.

示例: