aapt
(Android Assets Packaging Tool
)用于将程序的class
文件、res
、AndroidManifest.xml
等经过压缩和编码,合并到apk
文件中。
aapt
在Android SDK
的build-tools
目录下。
aapt
可以创建、更新、查看zip
格式的 文档附件(zip
、jar
、apk
)。也可将资源文件编译成二进制文件。
尽管你可能没有直接使用过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]
列出资源压缩包里的内容。
查看aapt l[ist]
的帮助:
aapt l[ist] [-v] [-a] file.{zip,jar,apk}
List contents of Zip-compatible archive.
示例:
以table
形式列出来。
示例:
详细列出内容。
示例:
查看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.
示例:
打印出所有需要的权限:
打印出所有需要的资源:
打印出配置相关的信息:
用于生成R.java
、R.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.arsc 、AndroidManifest.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_
从压缩包中删除指定文件。
查看aapt r[emove]
的帮助:
aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
Delete specified files from Zip-compatible archive.
示例:
向压缩包中添加指定文件。
查看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:
打印aapt
工具的版本。
查看aapt v[ersion]
的帮助:
aapt v[ersion]
Print program version.
示例: