在做android的apk的二次打包工作中会经常使用到aapt,下面做个简单的随笔吧
appt(Android Asset Packaging Tool)是android sdk 里面的一个资源编译工具,AS打包生成apk过程中就使用了aapt,另外使用apktool进行decode和build也用到了aap在我们反编译一个apk后如果修改了AndroidManifest.xml中manifest元素的package属性后,我们需要重新联合res目录、AndroidManifest.xml、android.jar文件来生重新成R.jar文件,再通过dx.jar以及baksmali.jar最终生成R.samli、R$id.samli...,然后替换掉母包中使用到的老的R类或R$xxx引用,就能保证我们新构建的apk正常运行,否则可能报资源ID找不到的异常在android的sdk目录下的build-tools下能找到一个appt.exe文件,如图所示:接下来我们可以使用cmd命令生成R.java文件,首先我们要准备一个apk(母包),然后使用apktool命令(示例:apktool d 7.apk -f --only-main-classes )将其反编译出来得到一个目录,apktool的详细使用可参考CSDNhttps://mp.csdn.net/mp_blog/creation/editor/123645083如下是反编译后的目录,我们将使用这个目录来生成我们的R.java文件 接下来在母包目录下新建一个gen目录,为了方便我们使用命令,可以将aapt.exe以及android.jar 都拷贝到与apktool.jar同级的目录,如果不在同目录下,文件路径必须是绝对路径;然后执行命令aapt p -f -m -J G:workspaceapktool7gen -S G:workspaceapktool7res -I G:workspaceapktoolandroid.jar -M G:workspaceapktool7AndroidManifest.xml,可以看到已经生成了我们想要的R.java文件 p 编译生成R.java文件-f 如果编译出 来的文件已经存在,强制覆盖。-m 使生成的 包的目录放在-J参数指定的目录。-J 指定生成 的R.Java的输出目录-S res文 件夹路径-A assert文 件夹的路径-M AndroidManifest.xml的路径 -I 某个版本平台的android.jar的路径-F 具体指定apk文件的输出



