守望者--AIR技术交流

标题: 解密ADT第一篇-aapt详解 [打印本页]

作者: 破晓    时间: 2015-1-19 10:41
标题: 解密ADT第一篇-aapt详解
本帖最后由 破晓 于 2015-1-20 15:14 编辑

我的出发点

接触AIR将近有一年的时间,这一年里遇到很多很多的问题,从AIR FOR ANDROID 的APK签名错误,到ANE的适应所有调用原生,再到APK的加密解密反编译,然后是跨IOS/ANDROID  一路伴随AIR走来,AIR从3.4到现在的4.0,应该说见证了一些东西的发生与过程.一直以来希望找一个切入点 而形成一系列的分析文章,刚好今天临下班前突然奇想,其实我可以从分析AIR的打包工具ADT开始.于是萌发了写这篇(如果有后续的话 包括后续)文章的想法,现在第一篇我想把aapt这个工具的使用详细分析.并最终给出在写ANE过程中困扰我已久的最有效资源处理方式.

PS:为什么我会从一个工具开始说,因为ADT就像汽车一样,而aapt则是ADT的后轮的轮胎中的打气孔


AIR Developer Tool (ADT)

AIR Developer Tool (ADT) 是用于开发 AIR 应用程序的多用途命令行工具。您可以使用 ADT 执行以下任务:
• 将 AIR 应用程序打包为 .air 安装文件
• 将 AIR 应用程序打包为本机安装程序。例如:在 Windows 上打包为 .exe 安装程序文件,在 iOS 上打包为 .ipa,或者在
Android 上打包为 .apk

• 将本机扩展打包为 AIR 本机扩展 (ANE) 文件
• 使用数字证书对 AIR 应用程序签名
• 更改(迁移)用于应用程序更新的数字签名
• 确定连接到计算机的设备
• 创建自签名的数字代码签名证书
• 远程安装、启动和卸载移动设备上的应用程序
• 远程安装和卸载移动设备上的 AIR 运行时
ADT 是一个 Java 程序,它包含在 AIR SDK 中。必须具有 Java 1.5 或更高版本才能使用该程序。SDK 包括用于调用 ADT 的
脚本文件。若要使用此脚本,必须在路径环境变量中包含 Java 程序的位置。如果路径环境变量中还列出了 AIR SDK bin 目录,
您可以在命令行中键入带有适当参数的 adt,以调用 ADT。(如果您不知道如何设置路径环境变量,请参阅操作系统文档。如
需进一步帮助,
关于aapt

aapt,简单的说就是android开发提供的资源处理工具(androidAsset Packaging Tool),随便安装一个版本的AIRSDK 你都可以找到他,例如我的是3.5(\AIR3.5\lib\android\bin\aapt),这个工具负责android所有资源的处理  大体功能有:

除了3,4 我们无视其他的.下面详细介绍aapt编译android资源.

首先是第4点.

例如给打包好的APK添加文件进去,FlashBuilder打包APK是无法打包apk,jar 等特殊资源进去项目里的,若要打包APK等资源进去项目里面  现在除了使用ADT命令行打包之外 还有一种方式就是通过aapt.例如我要把 command.txt文件打包进去anime.apk里面,aapt轻松可以完成:


  1. //aapt a apk文件 需要打包进去的文件

  2. aapt a anime.apk command.txt
复制代码
然后是第3点.

在这里我要对aapt每一个命令进行解释,这篇的内容注定又臭又长,但是没关系 对于我这个健忘症患者来说.
aapt编译资源命令比较复杂:


  1. aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z]/
  2. [-M AndroidManifest.xml] /
  3. [-0 extension [-0 extension ...]]/
  4. [-g tolerance] [-j jarfile] /
  5. [--debug-mode] [--min-sdk-version VAL]/
  6. [--target-sdk-version VAL] /
  7. [--app-version VAL] [--app-version-name TEXT] /
  8. [--custom-package VAL] /
  9. [--rename-manifest-package PACKAGE] /
  10. [--rename-instrumentation-target-package PACKAGE] /
  11. [--utf16] [--auto-add-overlay] /
  12. [--max-res-version VAL] /
  13. [-I base-package [-I base-package ...]] /
  14. [-A asset-source-dir] [-G class-list-file]/
  15. [-P public-definitions-file] /
  16. [-S resource-sources [-S resource-sources ...]]/
  17. [-F apk-file] [-J R-file-dir] /
  18. [--product product1,product2,...] /
  19. [raw-files-dir [raw-files-dir] ...]
复制代码
到此基本上aapt的所有命令都解析了一遍了,下面编写一个命令来编译资源  :
  1. //无资源国际化:
  2. aapt package
  3.    -f -m -J out -S res
  4.     -I D:\ANE\android\android-2.1_r01-windows\platforms\android-17\android.jar
  5.      -M AndroidManifest.xml
  6. //加了-z之后强制资源国际化
  7. aapt package
  8.      -f -m -z -J out -S res
  9.      -I D:\ANE\android\android-2.1_r01-windows\platforms\android-17\android.jar
  10.      -M AndroidManifest.xml
复制代码
现在给出答案,之前编写ANE教程中的打包res资源文字国际化的问题 正是因为ADT在编译android资源的时候增加了 -z 命令~


案例地址


Anti-ADT:https://github.com/recter/Anti-ADT




本文来自:http://shadowkong.com/archives/1393




作者: 破晓    时间: 2015-1-19 11:03
本系列目录:

解密ADT第一篇-aapt详解

解密ADT第二篇-编译APK资源


解密ADT第三篇-java编译工具详解

解密ADT第四篇-编译源码

解密ADT第五篇-案例分析

解密ADT第六篇-DIY MY ADT





欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/)