aapt常用命令

本文详细介绍了Android Asset Packaging Tool (aapt) 的使用方法,包括查看apk包内容、获取apk信息、编译android资源、打包apk、移除或添加文件等操作,并提供了具体实例来帮助开发者理解和应用aapt工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 列出apk包的内容

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

-v 以table形式列出来

-a 详细列出内容

 例如:aapt l <你的apk文件>,这个命令就是查看apk内容

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 assets.

例如:aapt d permissions <apk文件>, 这个就是显示这个apk所具有的权限

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文件的输出

例如:

1). 将工程的资源编译R.java文件

aapt package -m -J <R.java目录> -S <res目录> -I <android.jar目录>  -M <AndroidManifest.xml目录>

2). 将工程的资源编译编译到一个包里

aapt package -f  -S <res目录> -I <android.jar目录> -A<assert目录>  -M <AndroidManifest.xml目录> -F <输出的包目录>

4.  打包好的apk中移除文件

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

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

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

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

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

6.  显示aapt的版本

aapt v[ersion]

例如:aapt v, 就是打印这个结果 Android Asset Packaging Tool, v0.2


========================================================================================

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

同步软件中得到apk信息就是用的这么一个android已经提供好的工具。

[html]  view plain copy
  1. aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]  
  2.    badging          Print the label and icon for the app declared in APK.  
  3.    permissions      Print the permissions from the APK.  
  4.    resources        Print the resource table from the APK.  
  5.    configurations   Print the configurations in the APK.  
  6.    xmltree          Print the compiled xmls in the given assets.  
  7.    xmlstrings       Print the strings of the given compiled xml assets.  

使用aapt dump badging *.apk可以查看这个apk文件的程序名、包名、所用的sdk,程序版本以及权限信息等等。如下:

aapt dump bagging EngineeringTest.apk 得到如下详细信息

[html]  view plain copy
  1. package: name='com.archermind.engineeringtest' versionCode='1' versionName='1.0'  
  2. sdkVersion:'8'  
  3. application-label:'EngineeringTest'  
  4. application-icon-120:'res/drawable-ldpi/ic_launcher.png'  
  5. application-icon-160:'res/drawable-mdpi/ic_launcher.png'  
  6. application-icon-240:'res/drawable-hdpi/ic_launcher.png'  
  7. application: label='EngineeringTest' icon='res/drawable-mdpi/ic_launcher.png'  
  8. launchable-activity: name='com.archermind.engineeringtest.EngineeringTestActivity'  label='EngineeringTest' icon=''  
  9. uses-permission:'android.permission.INTERNET'  
  10. uses-feature:'android.hardware.touchscreen'  
  11. main  
  12. other-activities  
  13. other-receivers  
  14. other-services  
  15. supports-screens: 'small' 'normal' 'large'  
  16. supports-any-density: 'true'  
  17. locales: '--_--'  
  18. densities: '120' '160' '240'  

将上面的信息读入到字符串中,然后用正则表达式匹配一下。就可以把apk的信息放到同步软件中了。

另外同步软件中应该还会涉及到一些,手机固件的信息,比如说手机rom的版本等等,这些信息放在了android系统的system/build.prop文件里面。可以使用adb shell cat进行查看,如果要查看具体的每行的含义可以查看下面的网址:

http://blog.youkuaiyun.com/whatday/article/details/45332651


<think>嗯,用户之前问过如何仅使用Shell脚本修改APK包名,现在又转向询问aapt。我需要先确定他们的使用场景和需求。可能他们正在处理Android应用的修改或逆向工程,比如重打包或者自定义应用。之前的问题中,他们希望不用其他工具,但发现不可行,现在想了解aapt,可能已经接受需要工具,转而寻求使用Android SDK中的工具。 用户可能是开发者或逆向工程师,对Android打包流程不太熟悉,想了解aapt的具体功能和用法。他们可能需要处理APK的解析、资源修改或包信息查看。需要详细解释aapt的作用,常用命令,以及实际例子,帮助他们解决实际问题。 用户可能没有完全理解aapt在Android开发中的重要性,或者需要具体的操作指导。要确保回答结构清晰,分点说明,包括核心功能、常用命令、实际案例、注意事项等。同时,注意用户之前提到的使用Shell脚本的限制,所以在讲解aapt时要强调它作为官方工具的优势,以及如何结合Shell使用。 需要检查是否有技术细节需要补充,比如二进制XML处理,资源编译等,但保持回答简洁实用。还要提醒用户aapt可能已被取代,建议使用aapt2,以及如何处理兼容性问题。最后,确保语言口语化,避免术语堆砌,让用户容易理解。</think>--- ### **aapt核心定位** Android Asset Packaging Tool (aapt) 是Android SDK中处理资源编译与APK分析的基础工具,主要负责: 1. **资源编译**:将XML、图片等资源编译为二进制格式 2. **APK构建**:生成基础APK文件结构 3. **包信息解析**:提取版本号、权限、包名等关键数据 --- ### **核心功能详解** #### **1. APK元数据分析** ```bash # 查看APK基础信息(包名/版本号/权限) aapt dump badging app.apk # 输出示例: package: name='com.example' versionCode='1' versionName='1.0' sdkVersion:'21' uses-permission:'android.permission.INTERNET' ``` #### **2. 资源逆向解析** ```bash # 提取所有资源列表 aapt dump resources app.apk # 查看指定资源类型(如布局) aapt dump xmltree app.apk res/layout/activity_main.xml ``` #### **3. APK文件结构验证** ```bash # 检查APK完整性 aapt verify -v app.apk # 典型错误示例: ERROR: Missing required file 'AndroidManifest.xml' ``` --- ### **实际应用场景** #### **案例1:批量提取APK包名** ```bash #!/bin/bash for apk in *.apk; do pkg=$(aapt dump badging "$apk" | grep "package: name=" | cut -d "'" -f 2) echo "$apk -> $pkg" done ``` #### **案例2:资源文件替换** ```bash # 解压资源到临时目录 mkdir tmp aapt dump --values resources app.apk > tmp/resources.txt # 修改资源后重新打包(需配合其他工具) aapt package -f -F new.apk -M AndroidManifest.xml -S res/ -I android.jar ``` --- ### **技术限制与替代方案** | 功能需求 | aapt可行性 | 替代工具 | |-------------------|------------|--------------------| | 修改已编译资源 | ❌ 不支持 | apktool + 反编译 | | 动态库分析 | ❌ 不支持 | NDK工具链 | | 完整APK签名 | ❌ 不支持 | apksigner/jarsigner| --- ### **版本演进说明** - **aapt2** (Android Gradle Plugin 3.0+默认使用) - 改进资源编译流程 - 支持增量编译 - 更严格的资源验证 ```bash # 新版基本用法 aapt2 compile res/ -o compiled/ aapt2 link compiled/* -o final.apk ``` --- ### **操作注意事项** 1. **环境依赖** 必须配置ANDROID_HOME环境变量: ```bash export ANDROID_HOME=$HOME/Android/Sdk export PATH=$PATH:$ANDROID_HOME/build-tools/30.0.3/ ``` 2. **兼容性问题** 不同Android SDK版本的aapt可能产生差异输出,建议锁定特定版本 3. **输出解析技巧** 结合grep进行关键信息过滤: ```bash # 提取所有权限声明 aapt dump permissions app.apk | grep 'permission:' ``` --- ### **典型错误处理** **问题现象** ```bash ERROR: AndroidManifest.xml is missing required 'package' attribute ``` **解决方案** 检查Manifest文件根节点属性: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.package"> <!-- 必须存在此属性 --> ``` --- ### **开发者进阶建议** - 与**apktool**配合使用实现完整APK逆向: ```bash apktool d app.apk # 解包 vim app/AndroidManifest.xml # 修改包名 apktool b app -o modified.apk # 重打包 ``` - 使用**aapt2**时注意资源编译顺序: ```bash # 正确流程:编译 -> 链接 -> 签名 aapt2 compile -o res.flata res/**/*.xml aapt2 link -o unsigned.apk --manifest AndroidManifest.xml -I android.jar res.flata ``` 通过合理运用aapt,开发者可以快速实现APK基础分析、资源验证等高频操作,但需注意其功能边界,对于深度修改仍需配合其他工具链。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值