Android aapt 工具介绍(转)

目录(?)[-]

  1. AAPT 工具介绍
  2. AAPT 的帮助信息
  3. 查看AAPT的版本
  4. 使用AAPT列出资源包apk文件列表
  5. 使用AAPT打包资源文件
  6. 使用AAPT解压资源包apk

来自:http://mmmyddd.freeshell.net/blog.cgi/Computer/Android/aapt-decompress-apk

AAPT 工具介绍

下面是取自"http://www.androidcn.net/wiki/index.php/Reference/aapt"的介绍

aapt stands for Android Asset Packaging Tool and is included in the tools/ directory of the SDK. This tool allows you to view, create, and update Zip-compatible archives (zip, jar, apk). It can also compile resources into binary assets.

aapt即Android Asset Packaging Tool , 在SDK的tools/目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk). 也可将资源文件编译成二进制文件.

Though you probably won‘t often use aapt directly, build scripts and IDE plugins can utilize this tool to package the apk file that constitutes an Android application.

尽管你可能没有直接使用过aapt工具, 但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序.

For more usage details, open a terminal, go to the tools/ directory, and run the command:

获取更多的实用信息, 请打开终端控制台, 到tools/目录下, 执行命令:

Linux or Mac OS X:

./aapt

Windows:

aapt.exe

AAPT 的帮助信息

执行上述命令,会在控制台打出相应aapt的信息:

Android Asset Packaging Tool

Usage:
 aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.

 aapt d[ump] 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.

 aapt p[ackage] [-f][-u][-m][-v][-x][-M AndroidManifest.xml] /
        [-0 extension [-0 extension ...]] /
        [-I base-package [-I base-package ...]] /
        [-A asset-source-dir] [-P public-definitions-file] /
        [-S resource-sources] [-F apk-file] [-J R-file-dir] /
        [raw-files-dir [raw-files-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.

 aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
   Delete specified files from Zip-compatible archive.

 aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
   Add specified files to Zip-compatible archive.

 aapt v[ersion]
   Print program version.

 Modifiers:
   -a  print Android-specific data (resources, manifest) when listing
   -c  specify which configurations to include.  The default is all
       configurations.  The value of the parameter should be a comma
       separated list of configuration values.  Locales should be specified
       as either a language or language-region pair.  Some examples:
            en
            port,en
            port,land,en_US
       If you put the special locale, zz_ZZ on the list, it will perform
       pseudolocalization on the default locale, modifying all of the
       strings so you can look for strings that missed the
       internationalization process.  For example:
            port,land,zz_ZZ
   -d  one or more device assets to include, separated by commas
   -f  force overwrite of existing files
   -j  specify a jar or zip file containing classes to include
   -m  make package directories under location specified by -J
   -u  update existing packages (add new, replace older, remove deleted files)
   -v  verbose output
   -x  create extending (non-application) resource IDs
   -z  require localization of resource attributes marked with
       localization="suggested"
   -A  additional directory in which to find raw asset files
   -F  specify the apk file to output
   -I  add an existing package to base include set
   -J  specify where to output R.java resource constant definitions
   -M  specify full path to AndroidManifest.xml to include in zip
   -P  specify where to output public resource definitions
   -S  directory in which to find resources
   -0  specifies an additional extension for which such files will not
       be stored compressed in the .apk.  An empty string means to not
       compress any files at all.

根据以上帮助信息,用aapt可以使用以下操作:

查看AAPT的版本

 ./aapt v

得到当前工具的版本:

Android Asset Packaging Tool, v0.2

使用AAPT列出资源包(.apk)文件列表

 aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.

可以用命令查看系统资源包的内容:

./aapt l framework-res.apk
META-INF/MANIFEST.MF
META-INF/CERT.SF
META-INF/CERT.RSA
AndroidManifest.xml
assets/images/android_320x480.png
assets/images/boot_robot.png
assets/images/boot_robot_glow.png

...

assets/webkit/youtube.html
assets/webkit/youtube.png
res/anim/accelerate_decelerate_interpolator.xml
res/anim/accelerate_interpolator.xml
res/anim/app_starting_exit.xml

...

res/raw-de/loaderror.html
res/raw-de/nodomain.html
res/raw/fallbackring.ogg
res/raw/loaderror.html
res/raw/nodomain.html
res/xml-en/autotext.xml
res/xml/apns.xml
res/xml/autotext.xml
res/xml/preferred_time_zones.xml
res/xml/time_zones_by_country.xml
resources.arsc

如果采用-v选项,会将所有文件的详细信息打印出来:

Archive:  framework-res.apk
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
--------  ------  ------- -----   ----   ----   ------    ----
   76217  Deflate   25576  66%  04-16-08 07:40  3b7140fa  META-INF/MANIFEST.MF
   76259  Deflate   25706  66%  04-16-08 07:40  a21d76be  META-INF/CERT.SF
    1714  Deflate    1156  33%  04-16-08 07:40  ca66d55e  META-INF/CERT.RSA
   31768  Deflate    5556  83%  01-16-09 12:04  8c137ee8  AndroidManifest.xml
    3098  Stored     3098   0%  01-15-09 23:16  ed1132c9  assets/images/android_320x480.png
    1001  Stored     1001   0%  01-15-09 23:16  c53ad035  assets/images/boot_robot.png
    2083  Stored     2083   0%  01-15-09 23:16  12acc29d  assets/images/boot_robot_glow.png

... ...

     340  Deflate     155  54%  01-16-09 12:04  cc2ad7f2  res/anim/accelerate_decelerate_interpolator.xml
     368  Deflate     179  51%  01-16-09 12:04  c94b9323  res/anim/accelerate_interpolator.xml
     568  Deflate     260  54%  01-16-09 12:04  e0972304  res/anim/app_starting_exit.xml

... ...

     605  Deflate     296  51%  01-15-09 23:16  88710568  res/raw-de/loaderror.html
     996  Deflate     471  53%  01-15-09 23:16  c42ea004  res/raw-de/nodomain.html
   10975  Stored    10975   0%  01-15-09 23:16  21dc2fce  res/raw/fallbackring.ogg
     579  Deflate     282  51%  01-15-09 23:16  11c56b88  res/raw/loaderror.html
     890  Deflate     418  53%  01-15-09 23:16  393cf037  res/raw/nodomain.html
   25588  Deflate    5051  80%  01-16-09 12:04  cf7826df  res/xml-en/autotext.xml
     164  Deflate      97  41%  01-16-09 12:04  ee886635  res/xml/apns.xml
     116  Deflate      59  49%  01-16-09 12:04  885f246d  res/xml/autotext.xml
     864  Deflate     312  64%  01-16-09 12:04  65ad9d7e  res/xml/preferred_time_zones.xml
   61044  Deflate   11755  81%  01-16-09 12:04  0bc79a58  res/xml/time_zones_by_country.xml
  747776  Stored   747776   0%  01-16-09 12:04  98f996b3  resources.arsc
--------          -------  ---                            -------
 2246729          1774656  21%                            851 files

如果采用-a选项,会在上述文件列表之后,打印出android使用的符号表:

Resource table:
mError=0x0 (Success)
Package Groups (1)
Package Group 0 id=1 packageCount=1 name=android
  Package 0 id=1 name=android typeCount=13
    type 0 configCount=1 entryCount=599
      spec resource 0x01010000 android:attr/theme: flags=0x40000000
      spec resource 0x01010001 android:attr/label: flags=0x40000000
      spec resource 0x01010002 android:attr/icon: flags=0x40000000
      spec resource 0x01010003 android:attr/name: flags=0x40000000
      spec resource 0x01010004 android:attr/manageSpaceActivity: flags=0x40000000
      spec resource 0x01010005 android:attr/allowClearUserData: flags=0x40000000
      spec resource 0x01010006 android:attr/permission: flags=0x40000000
      spec resource 0x01010007 android:attr/readPermission: flags=0x40000000
      spec resource 0x01010008 android:attr/writePermission: flags=0x40000000
      spec resource 0x01010009 android:attr/protectionLevel: flags=0x40000000
      spec resource 0x0101000a android:attr/permissionGroup: flags=0x40000000
... ...

这些符号表的格式还需要进一步研究才能搞明白 -_-!

使用AAPT打包资源文件

使用以下命令查看android的build系统是如何打包framework-res模块的:

cd ~/android/src
make -n --debug framework-res

以下是从输出提取的关键步骤:

1. 第一步,生成资源apk包,由以下命令完成:

out/host/linux-x86/bin/aapt package -z -u -x  -M frameworks/base/core/res/AndroidManifest.xml -S frameworks/base/core/res/res
 -A frameworks/base/core/res/assets  -F out/target/product/generic/obj/APPS/framework-res_intermediates/package.apk

2. 第二步,为生成的资源包做签名:

java -jar out/host/linux-x86/framework/signapk.jar build/target/product/security/platform.x509.pem build/target/product/secur
ity/platform.pk8 out/target/product/generic/obj/APPS/framework-res_intermediates/package.apk.unsigned out/target/product/gene
ric/obj/APPS/framework-res_intermediates/package.apk.signed

3. 第三步,为生成的包做对齐处理:

out/host/linux-x86/bin/zipalign -f 4 out/target/product/generic/obj/APPS/framework-res_intermediates/package.apk.unaligned ou
t/target/product/generic/obj/APPS/framework-res_intermediates/package.apk.aligned

如此生成的framework-res.apk包可以被用来替换system.img中的资源包。(在CupCake前的稳定版本中测试可行)

具体步骤:

  1. 首先用生成的framework-res.apk替换在~/android/src/out/target/product/generic/system/framework中的同名文件。
  2. 用make snod生成新的system.img,替换sdk目录下的images/system.img
  3. 用-wipe-date参数启动emulator

使用AAPT解压资源包(.apk)

./aapt d xmltree framework-res.apk res/anim/fade_in.xml
N: android=http://schemas.android.com/apk/res/android
  E: alpha (line=21)
    A: android:interpolator(0x01010141)[email protected]
    A: android:duration(0x01010198)=(type 0x10)0x12c
    A: android:fromAlpha(0x010101ca)=(type 0x4)0x0
    A: android:toAlpha(0x010101cb)=(type 0x4)0x3f800000
./aapt d xmlstrings framework-res.apk res/anim/fade_in.xml
String #0: interpolator
String #1: fromAlpha
String #2: toAlpha
String #3: duration
String #4: android
String #5: http://schemas.android.com/apk/res/android
String #6:
String #7: alpha

而没有经过编译的文件为:

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@anim/decelerate_interpolator"
       android:fromAlpha="0.0"
       android:toAlpha="1.0"
       android:duration="300" />

相应的R.java文件为:

package com.android.internal;

public final class R {
    public static final class anim {
        public static final int accelerate_decelerate_interpolator=0x010a0004;
        public static final int accelerate_interpolator=0x010a0005;
        public static final int app_starting_exit=0x010a0007;
        public static final int decelerate_interpolator=0x010a0006;
        public static final int dialog_enter=0x010a0008;
        public static final int dialog_exit=0x010a0009;
... ...

也可以从符号表中得到这些索引值:

resource 0x010a0006 android:anim/decelerate_interpolator: t=0x03 d=0x00001132 (s=0x0008 r=0x00) (PUBLIC)

配合系统预定的framework/base/core/res/res目录的模版,就可以重建/res文件.

时间: 2024-10-22 16:03:20

Android aapt 工具介绍(转)的相关文章

Android SDK目录结构和工具介绍

Android SDK目录结构和工具介绍是本文要介绍的内容,主要是来了解并学习Android SDK的内容,具体关于Android SDK内容的详解来看本文. AD: Android SDK目录结构和工具介绍是本文要介绍的内容,主要是来了解并学习Android SDK的内容,具体关于Android SDK内容的详解来看本文. Android SDK目录下有很多文件夹,主要都是干什么的呢? 1.add-ons这里面保存着附加库,比如GoogleMaps,当然你如果安装了OphoneSDK,这里也会

Android SDK中 tools 目录下的工具介绍

Android SDK包含了各种各样的定制工具,简介如下: Android模拟器(Android Emulator )它是在你的计算机上运行的一个虚拟移动设备.你可以使用模拟器来在一个实际的Android运行环境下设计,调试和测试你的应用程序. Android调试桥(Android Debug Bridge (adb) )Adb 工具可以让你在模拟器或设备上安装应用程序的.apk文件,并从命令行访问模拟器或设备.你也可以用它把Android模拟器或设备上的应用程序代码和一个标准的调试器连接在一起

第3章 Android移植平台工具介绍

第3章 通过本章对开发板移植平台工具介绍,如FS_S5PC100拥有丰富的硬件资源网络接口.音频的输入输出.Video输出.串口.红外接口.温度传感器.HDMI接口.VGA接口等.知道了开发板一些基本硬件组成,同时开发板FS_S5PC100软件资源有Android2.1系统源代码.Linux2.6.29 系统源代码.外设接口测试源代码和U-Boot(支持USB.网络通信).接下来说明FS_S5PC100开发平台的Android摄像头功能展示.VGA 720p高清播放功能和HDMI 720P显示功

Android系统性能调优工具介绍

经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优工具介绍 在软件开发过程中,想必很多读者都遇到过系统性能问题.而解决系统性能问题的几个主要步骤是: 测评:对系统进行大量有针对性的测试,以得到合适的测试数据. 分析系统瓶颈:分析测试数据,找到其中的hotspot(热点,即bottleneck). 性能优化:对hotspot相关的代码进行优化. 由上述步骤可知,性能优化的目标对象是hotspot.如果找到的hotspot并非真正的热点,则性能优化的结果必然是事倍

Android NDK 简单介绍、工具安装、环境配置

NDK全称:Native Development Kit. 1.NDK是一系列工具的集合. * NDK提供了一系列的工具,帮助开发人员高速开发C(或C++)的动态库,并能自己主动将so和java应用一起打包成apk.这些工具对开发人员的帮助是巨大的. * NDK集成了交叉编译器,并提供了对应的mk文件隔离平台.CPU.API等差异,开发者仅仅须要简单改动mk文件(指出"哪些文件须要编译"."编译特性要求"等),就能够创建出so. * NDK能够自己主动地将so和Ja

Android反编译工具介绍与简单实用方法

Android反编译工具介绍与简单实用方法 Android反编译的目的无非就是为了看到APK的xml.资源和代码: 得到代码的方式:直接解压APK文件 --> 得到classes.dex文件 --> 使用 dex2jar classes.dex classes.jar生成jar文件 --> [可选的解压jar文件] -->使用XJad或者JDCompiler查看源代码 得到XML的方式: 方式1:直接解压APK文件 --> 通过axmlprinter工具查看XML文件(这种方

Android APP压力测试(一)之Monkey工具介绍

Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动.按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常.此文主要给自己查阅用. [目录] 1.Monkey简介 2.Monkey参数说明 3.Monkey实例 4.Monkey测试结果分析 1.Monkey简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设

Android性能分析工具介绍

1. Android系统性能调优工具介绍 http://blog.csdn.net/innost/article/details/9008691 TraceviewSystraceOprofile 2. [腾讯开源]Android性能测试工具APT使用指南 http://www.csdn.net/article/2014-04-23/2819366-tencent-APT-open-source-tool-guide APT源码地址:https://code.csdn.net/Tencent/a

Android开发环境中的概念和工具介绍

最近学习Android开发,以前使用C/C++多一些,现在再补点Java知识,不管是哪种语言,都不过是一种工具而已,真的学起来,大同小异,无谓优劣.学习Android编程肯定是要先从环境搭建开始,无论是在Windows.还是Linux.Mac环境都可以,在搭建环境之前,有些概念综合了解一下确有必要,本文即是面向Android初学者的文章,作为Android入门的启蒙篇章. Android是Google主导开发的基于Linux开源智能移动终端操作系统,当然这里说的开源,也不是说Google把所有的