Android中aapt使用详解

aapt是Android sdk中提供的一个小工具,功能十分强大。appt:Android Asset Packaging Tool ,在sdk的build-tools下,这个工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk). 也可将资源文件编译成二进制文件。我们可能没有直接使用过这个命令,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序,具体位于adt-bundle-mac-x86_64-20140702/sdk/build-tools/  这个目录下,可能在里面存在不同api的目录。


这个和你下载的api版本有关,但里面都有aapt工具,下面来说说具体用法,在windows上aapt存在方式为aapt.exe,直接appt就可以执行;Linux或Mac上是一个可执行文件aapt,通过./aapt 执行。如果没有配置环境变量,可以到aapt所在目录执行对应命令;当然你也可以按照配置adb命令那样配置aapt,这样在Terminal或dos窗口就能直接执行aapt命令。
在~/.bash_profile文件里添加如下:
export PATH=${PATH}:/your_path/sdk/build-tools/25.0.2
具体路径可以先进到build-tools目录,然后执行pwd命令获取路径,其实通过aapt 就会打印所有的用法。
下面简单总结下几个用法
1、列举apk里所有文件
aapt l qq.apk
aapt l 有如下参数:
-v:会以table的形式输出目录,table的表目有:Length、Method、Size、Ratio、Date、Time、CRC-32、Name。
aapt l -v qq.apk


其中Method表示压缩形式,有:Deflate及Stored两种,即该Zip目录采用的算法是压缩模式还是存储模式;可以看出resources.arsc、*.png采用压缩模式,而其它采用压缩模式,Ratio表示压缩率,CRC-32循环冗余校验
-a:会详细输出所有目录的内容.比如想知道apk包名,可以配合grep命令
aapt l -a *.apk | grep "package"
2、aapt d[ump] [--values] [--include-meta-data] 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. 以树形结构输出的xml信息
   xmlstrings       Print the strings of the given compiled xml assets. 输出xml文件中所有的字符串信息
利用aapt dump查看apk包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息
aapt d badging *.apk
当然如果只想查询权限或string只需把badging替换成strings或permissions就行,具体dump后接的参数可以看上面
aapt d permissions *.apk
3、 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]
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.
-f 如果编译出来的文件已经存在,强制覆盖。
-m 使生成的包的目录放在-J参数指定的目录。
-J 指定生成的R.Java的输出目录
-S res文件夹路径
-A assert文件夹的路径
-M AndroidManifest.xml的路径
-I 某个版本平台的android.jar的路径
-F 具体指定apk文件的输出
将工程的资源编译R.java文件
aapt package -m -J <R.java目录> -S <res目录> -I <android.jar目录>  -M <AndroidManifest.xml目录>
将工程的资源编译编译到一个包里
aapt package -f  -S <res目录> -I <android.jar目录> -A<assert目录>  -M <AndroidManifest.xml目录> -F <输出的包目录>
4、从打包好的文件中删除指定文件
aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
aapt r <*.apk> AndroidManifest.xml, 这个就是将apk中的AndroidManifest移除掉
5、添加文件到打包好的apk中
aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
aapt a <*.apk> <要添加的文件路径>, 这个就是将文件添加到打包好的apk文件中
6、对单个资源文件夹或图片文件预处理
aapt c[runch] [-v] -S resource-sources ... -C output-folder ...
Do PNG preprocessing on one or several resource folders and store the results in the output folder.
aapt s[ingleCrunch] [-v] -i input-file -o outputfile
Do PNG preprocessing on a single file.
7、aapt v[ersion] 查看aapt版本号
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值