Android AAPT and Overlay

       在研究Android4.4KitKat中Phone模块的变化挺大的,详细可参考http://blog.csdn.net/yihongyuelan/article/details/19930861,当然这不是本文所讨论的重点,在修改编译了package/app/InCallUI后,将生成的InCallUI.apk push到对应的目录下,打电话测试并没有修改后的痕迹,最后经过尝试,编译了package/app/Dialer,将生成的Dialer.apk push到对应的目录,问题解决。为什么修改的InCallUI的内容却要编译Dialer呢?查看mk文件发现

LOCAL_AAPT_FLAGS := \

    --auto-add-overlay \

    --extra-packages com.android.contacts.common \

    --extra-packages com.android.incallui

这样就引出了本来所要讨论的重点:AAPT


1. 什么是AAPT?

AAPT(Android Asset Packaging Tool)   在SDK的tools/目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk). 也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具, 但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序.

2.以下是AAPT的指令


2.1 列出apk包的内容

 aapt l[ist] [-v] [-a] file.{zip,jar,apk}

-v 以table形式列出来

-a 详细列出内容

2.2 查看apk一些信息

 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 asse

比如 aapt dump badging <file_path.apk>


2.3 编译android资源

 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] /
        [-S resource-sources [-S resource-sources ...]]         [-F apk-file] [-J R-file-dir] /
        [--product product1,product2,...] /
        [raw-files-dir [raw-files-dir] ...]

这个比较复杂,只解释几个关键参数。

-f 如果编译出来的文件已经存在,强制覆盖。

-m 使生成的包的目录放在-J参数指定的目录。

-J 指定生成的R.java的输出目录

-S res文件夹路径

-A assert文件夹的路径

-M AndroidManifest.xml的路径

-I 某个版本平台的android.jar的路径

-F 具体指定apk文件的输出

2.4  打包好的apk中移除文件

aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]

例如:aapt r <你的apk文件> AndroidManifest.xml, 这个就是将apk中的AndroidManifest移除掉

2.5. 添加文件到打包好的apk中

 aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]

例如:aapt a <你的apk文件> <要添加的文件路径>, 这个就是将文件添加到打包好的apk文件中

    到这里对于AAPT我们有了一个初步的认识,那么和我们刚开始讨论的问题有什么联系呢?其实上面MK文件中的那段代码是一种将多个工程合并成一个apk的方法。也就是将 com.android.contacts.common和com.android.incallui一起打包到Dialer.apk,具体做法如下:

1. 加入以上的LOCAL_AAPT_FLAGS

  
  
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages com.android.contacts.common \
--extra-packages com.android.incallui

2. 将com.android.contacts.common和com.android.incallui的AndroidManifest.xml文件中的内容移植到Dialer的AndroidManifest.xml

3. 再用mm指令编译并生成Dialer.apk,到此就将com.android.contacts.common和com.android.incallui一起打包到Dialer.apk中了,因此当我们替换InCallUI.apl的时候并不起作用。



  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值