AAPT简介
AAPT 是Android Asset Packaging Tool的缩写,它存放在SDK的tools目录下,AAPT的功能相对比较强大,可以通过它查看、创建、更新压缩文件(如.zip文件,.jar文件,.apk文件),它可以把 资源 编译为二进制文件,同时生成resources.arsc,AAPT这个工具在APK打包过程中起到了非常重要的作用,在打包的过程中,用AAPT对APK中使用到的资源进行打包,这里不对AAPT这个工具做过多的讨论。
我们来看一下AAPT打包的流程:
AAPT这个工具在 打包 的过程中主要做了以下工作:
1.把“assets”和“res/raw”目录下的所有资源进行打包(会根据不同的文件后缀选择压缩或不压缩),“res/”目录下的其他资源进行编译或者其他处理(具体的处理方式视文件后缀的不同而不同,例如:“.xml”会编译成二进制文件,“.png”文件会进行优化等等)后才进行打包。
2.会对除 assets资源 之外的所有资源赋予一个资源ID常量,并且会生成一个资源索引表resources.arsc;
3.编译AndroidManifest.xml成二进制的XML文件。
4.把上面3个步骤中生成结果保存在一个“.ap_”文件,并把各个资源ID常量定义在一个R.java中;
.ap_文件会在生成APK时放入APK包中,.ap_这个文件本身是一个zip包,他里面包含了resources.arsc、AndroidManifest.xml、assets以及所有的资源文件。
aapt命令查看APK信息
? ? ? ? 近期在GooglePlay发布版本时遇到一个问题,新版本合入了应用内付费的功能,但是升级到新版本的用户比以往少太多,不足20%。分析这个问题的原因,原来是由于新版本由于需要做应用内付费,就需要用到一个权限com.android.vending.BILLING,这个权限是新版本的新增权限。
? ? ? ? GooglePlay有一个自动更新应用的功能,且该功能默认是开启的,因此大部分用户的应用更新都是通的GooglePlay的自动更新,但是如果新版本较旧版本而言有新增权限的话,GooglePlay就不会帮你默认更新,则完全需要用户手动更新升级了。
? ? ? ? 综上,版本发布前除了测试版本的新增功能之外,检查版本的权限也是很有必要的,如果有新增的权限就需要权衡,是针对该权限的功能重要,还是用户升级重要。如果新增权限至是为了一个用户完全无法感知,对产品完全没有正面影响的话,那么就可以考虑去掉该功能。
? ? ? 说了这么多,那么回到正题,版本发布前需要坚持版本的权限,并且与上一版本对比校验,确认是否有新增或者减少权限,是版本发布前很有必要执行的一个环节。就想需要确认版本号一样。那么怎么样去查看一个APK的权限信息呢?古老一点的办法就是手机上先安装老版本,在覆盖安装新版本,在手机上看提示。但是这个版本并不靠谱,因为有些权限是不会展示给用户的,就想应用内付费需要的权限com.android.vending.BILLING,我在升级安装的时候,是提示我没有新增权限的。因此想要查看一个是否有新增权限,还是得查看APK完整的权限信息。我在网上找了下办法,发现可以通过aapt命令达到我想要的目的。接下来我就简单讲讲aapt命令。
? ? ? ?aapt即Android Asset Packaging Tool,我们可以在SDK的platform-tools目录下找到该工具。aapt可以查看、 创建、 更新ZIP格式的文档附件(zip, jar, apk)。 也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序。接下来我就简单讲下aapt一些简单的应用。
aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]
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.1 查看apk包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息
? ? ? aapt dump badging
? ? ? 部分效果图:
1.2 查看权限
? ? ? ? aapt dump permissions
? ? ? ? 效果图:
1.3 查看资源列表
? ? ? ?aapt dump resources
? ? ? ?一般都会输出很多的信息,如要全部查看,请用下面这两句:
? ? ? ?aapt dump resources ?? > sodino.txt
? ? ? ?sodino.txt
? ? ? ?这样会把所有的信息通过重定向符">"输出到sodino.txt文件中,然后再打开该文件即可查看。
1.4 查看apk配置信息
? ? ? aapt dump configurations
? ? ? ?部分效果图:
1.5 查看指定apk的指定xml文件。
? ? ? aapt dump xmltree res/***.xml
? ? ? 以树形结构输出的xml信息。
? ? ? aapt dump xmlstrings res/***.xml
? ? ? 输出xml文件中所有的字符串信息。
? ? ? ?以上介绍的只是aapt比较简单的查看应用命令,还有其他一些命令没有做介绍,后续再工作中用到后会继续讲解。
aapt不是内部或者外部命令,也不是可运行的程序或批处理文件
aapt不是内部或者外部命令,也不是可运行的程序或批处理文件是因为没有设置环境变量的缘故。解决步骤如下:
1、首先第一步就是要进行鼠标右键点击计算机或我的电脑,然后进行点击选择“属性”即可。
2、接着就是点击进行选择“高级系统设置”,如下图所示。
3、然后就是进行选择“环境变量”即可。
4、接着就是打开之后,这时候要在系统变量中找到“Path”变量,并点击进行编辑。
5、然后就是进行加英文的分号,并输入PHP的所在目录。这时候点击编辑完成后,记得点击确定,以保存修改的变量即可。
6、最后点击完确定之后进行重新运行php,电脑重启,这时候就可以使用php命令了。
AAPT代表什么意思?
aapt即Android
Asset
Packaging
Tool
,
在SDK的tools/目录下.
该工具可以查看,
创建,
更新
ZIP格式
的文档附件(zip,
jar,
apk).
也可将
资源文件
编译成
二进制文件
.尽管你可能没有直接使用过aapt工具,
但是build
scripts和IDE插件会使用这个工具打包apk文件构成一个Android
应用程序.
aapt2 工具介绍
aapt 是Android Asset Packaging Tool的缩写,是编译和打包资源的工具。而aapt2是在aapt上做了优化。Android Gradle Plugin 3.0.0或者更高版本默认开启aapt2。当然也可以在配置文件中手动关闭aapt2。
一般打包过程情况下,都是由gradle自动调用aapt2,将资源文件编译成二进制文件。当然,我们也可以使用命令行进行手动打包资源。aapt2打包资源的流程如下图。
aapt2将原先的资源编译打包过程拆分成了两部分,即编译和链接。
这种方式可以很好的提升资源的编译性能,比如只有一个资源文件发送改变时,你只需要重新编译改变的文件,然后将其与其他未改变的资源进行链接即可。而之前的aapt是将所有资源进行merge,merge完后将所有资源进行编译,产生一个 资源ap_ 文件,该文件是一个压缩包,这样带来的后果就是即使只改变了一个资源文件,也要进行全量编译。
aapt2支持编译所有的资源文件,并产生.flat格式的文件。
编译语法
下面我们在Android项目目录下,使用aapt2 命令行编译资源文件
可以在myBuild/目录下,找到values_strings.arsc.flat文件
可以在myBuild/目录下,找到mipmap-xhdpi_ic_launcher.png.flat文件
在链接阶段,aapt2首先合并编译阶段生成的文件,像二进制XML文件,处理后的PNG文件等,然后,将其打包成一个apk文件。此外,在此阶段可以生成其他辅助文件,如R.java和ProGuard规则文件。当然,此时生成的apk文件并不包含dex文件,也没有签名。
连接语法
常用link命令行参数
更多命令行可以参见 aapt2#link
在上一节,我们编译后得到两个文件values_strings.arsc.flat和mipmap-xhdpi_ic_launcher.png.flat文件。现在,我们使用aapt2 link命令将这两个文件打包到output.apk 中。
执行上述命令,即可在当前目录生成output.apk。
dump用于打印通过link命令产生的APK文件的资源和配置文件。可以使用以下命令将其打印到终端。
使用aapt2 dump命令将链接后生成的output.apk打印出来。
输出结果如下