Android aapt 工具介绍

AAPT 工具介绍

AAPT,全称是Android Asset Packaging Tool,即Android资源打包工具,这个工具由Android sdk提供。通过AAPT,可以将Android中的资源文件打包成R.java文件,也可以查看资源文件列表或者apk文件解压后的文件列表。

AAPT的配置:

aapt是一个命令。目录在:android sdk 的build-tools/x.y.z(x.y.z是sdk版本号),例如:

//我的目录是:sdk/24.0.2

aapt           dx 

aapt2         i686-linux-android-ld llvm-rs-cc source.properties

aarch64-linux-android-ld jack-coverage-plugin.jar

可以把aapt配置成环境变量或者别名,我采用别名的方式。

在 ~/.bash_profile文件中(macbook):

#aapt
alias aapt=~/sdk/build-tools/24.0.2/aapt

AAPT的使用:

1)查看帮助:直接运行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] [--values] [--include-meta-data] WHAT file.{apk} [asset [asset ...]]

   strings          Print the contents of the resource table string pool in the APK.

   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] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \

......

2)aapt l: 列出压缩文件(zip,jar,apk)中的目录文件列表,只列出文件名称:

% aapt l app-test.apk

AndroidManifest.xml

META-INF/CERT.RSA

META-INF/CERT.SF

META-INF/MANIFEST.MF

META-INF/androidx.activity_activity.version

。。。。。。

classes.dex

res/anim-v21/design_bottom_sheet_slide_in.xml

。。。。。。

res/menu/menu_main.xml

res/mipmap-anydpi-v26/ic_launcher.xml

。。。。。。

resources.arsc

3)aapt l -v:列出压缩文件(zip,jar,apk)中的目录文件列表,列出文件详情:

Archive:  app-test.apk

Length   Method    Size  Ratio   Offset      Date  Time  CRC-32    Name

--------  ------  ------- -----  -------      ----  ----  ------    ----

    3852  Deflate    1136  71%         0  11-30-79 00:00  7c2cf01c  AndroidManifest.xml

    1337  Deflate    1069  20%      1185  11-30-79 00:00  ffffffff8deb31b4  META-INF/CERT.RSA

   72221  Deflate   20948  71%      2301  11-30-79 00:00  ffffffffc29472ba  META-INF/CERT.SF

   72178  Deflate   20219  72%     23295  11-30-79 00:00  39bf94e9  META-INF/MANIFEST.MF

       6  Stored        6   0%     43564  11-30-79 00:00  fffffffffd7ea868  META-INF/androidx.activity_activity.version

。。。。。。

3)aapt l -a:列出压缩文件(zip,jar,apk)中的目录文件列表,列出文件符号表:

Resource table:

Package Groups (1)

Package Group 0 id=0x7f packageCount=1 name=com.test.myapp2

  Package 0 id=0x7f name=com.test.myapp2

    type 0 configCount=2 entryCount=31

      spec resource 0x7f010000 com.test.myapp2:anim/abc_fade_in: flags=0x00000000

      spec resource 0x7f010001 com.test.myapp2:anim/abc_fade_out: flags=0x00000000

4)aapt d[ump]: 打印apk文件的资源内容:

% aapt dump strings app-test.apk

String pool of 2287 unique UTF-8 non-sorted strings, 2287 entries and 0 styles using 88520 bytes:

String #0: %1$d%2$s

String #1: %1$d/%2$d

String #2: %1$s

String #3: %1$s – %2

String #4: %1$s – End da

String #5: %d new notification

 5)aapt dump resources app-test.apk:显示apk的资源列表,部分截图如下:

% aapt dump resources app-test.apk

Package Groups (1)

Package Group 0 id=0x7f packageCount=1 name=com.test.myapp2

  Package 0 id=0x7f name=com.test.myapp2

    type 0 configCount=2 entryCount=31

      spec resource 0x7f010000 com.test.myapp2:anim/abc_fade_in: flags=0x00000000

      spec resource 0x7f010001 com.test.myapp2:anim/abc_fade_out: flags=0x00000000

      spec resource 0x7f010002 com.test.myapp2:anim/abc_grow_fade_in_from_bottom: flags=0x00000000

5)aapt d : 打包AndroidActivity:

android 编译资源打包资源文件的命令。

-d:包括一个或多个设备资源,由逗号分隔;
-f:覆盖现有的文件命令,加上后编译生成直接覆盖目前已经存在的R.java;
-m:使生成的包的目录放在-J参数指定的目录;
-u:更新现有的包 u = update;
-v:详细输出,加上此命令会在控制台输出每一个资源文件信息,R.java生成后还有注释。
-x:创建扩展资源ID;
-z:需要本地化的资源属性标记定位。

-M:AndroidManifest.xml的路径
-0:指定一个额外的扩展. apk文件将不会存储压缩
-g:制定像素迫使图形的灰度
-j:指定包含一个jar或zip文件包,这个命令很特别
–debug-mode:指定的是调试模式下的编译资源;
–min-sdk-versopm VAL:最小SDK版本 如是7以上 则默认编译资源的格式是 utf-8
–target-sdk-version VAL:在androidMainfest中的目标编译SDK版本
–app-version VAL:应用程序版本号
–app-version-name TEXT:应该程序版本名字;
–custom-package VAL:生成R.java到一个不同的包
–rename-mainifest-package PACKAGE:修改APK包名的选项;
–rename-instrumentation-target-package PACKAGE:重写指定包名的选项;
–utf16:资源编码修改为更改默认utf – 16编码;
–auto-add-overlay:自动添加资源覆盖
–max-res-version:最大资源版本
-I:指定的SDK版本中android.jar的路径

(4)-A:assert文件夹的路径
-G:一个文件输出混淆器选项,后面加文件逗号隔开.
-P:指定的输出公共资源,可以指定一个文件 让资源ID输出到那上面;
-S:指定资源目录 一般是 res
-F:指定把资源输出到 apk文件中
-J:指定R.java输出的路径
raw-file-dir:附加打包进APK的文件

通过android 编译资源打包资源文件。

6)aapt v :列出sdk tools的版本号。

    Android Asset Packaging Tool, v0.2-3209611


### 回答1: 当你在使用Android开发中的aapt2编译资源时,可能会遇到"android aapt2 error: check logs for details"的错误提示。这个错误通常是由于资源文件的问题引起的。 首先,我们需要检查错误日志以获取更多的详细信息。你可以在命令行中运行aapt2编译资源的命令时,添加"--verbose"或者"--debug"的参数来获取详细的日志输出。 错误日志可能会包含有关具体资源文件的错误信息。例如,它可能指示某个资源文件不存在、资源文件命名不规范、资源文件中的内容格式错误等。通过查看错误日志,你可以找到具体的错误原因,从而采取相应的修复措施。 在排除资源文件中可能存在的问题后,你还应该检查项目的依赖情况。确保所需的库和插件已正确添加到项目中,并且版本兼容。有时候,错误可能是由于不兼容的库或插件引起的。 此外,你还可以尝试清理项目并重新构建,以确保所有的资源文件都被正确编译和链接。清理项目可以清除可能存在的缓存文件和临时生成的资源文件,从而消除潜在的问题。 总之,"android aapt2 error: check logs for details"是一个相对较常见的错误,通常与资源文件有关。通过检查错误日志以及确定项目的依赖情况是否正确,你应该能够解决这个问题并成功编译你的Android应用程序。 ### 回答2: Android aapt2错误是指在使用aapt2(Android Asset Packaging Tool 2)时出现问题。aapt2是一个用于将资源文件编译和打包成Android应用的工具。当出现aapt2错误时,系统会提示"check logs for details",即检查日志获取详细信息。 要解决这个错误,首先要查看日志以获取具体的错误信息。可以通过以下步骤来检查日志: 1. 在Android Studio中打开项目。 2. 在底部工具栏中找到"Gradle Console"(Gradle控制台)。 3. 点击Gradle Console,在控制台中查看相关错误信息。 在日志中可能会显示以下类型的错误信息: - 缺少资源:aapt2在编译过程中发现某些资源文件缺失。可以通过确认资源文件的存在性,并在项目中确保它们的正确引用来解决此问题。 - 命名冲突:aapt2发现两个或多个资源具有相同的名称。要解决此问题,请确保所有资源的名称唯一,并在代码中正确引用它们。 - 资源格式错误:aapt2无法处理某些资源文件,可能是因为其格式不正确。可以尝试重新生成或转换这些资源文件,以确保其格式符合要求。 调试解决aapt2错误可参考以下方法: 1. 确保使用最新版本的Android SDK和Gradle插件。 2. 清理和重新构建项目,以确保资源文件正确编译。 3. 检查项目中的资源文件,确保它们的格式正确并且没有命名冲突。 4. 检查项目中的引用,确保资源文件的路径和名称正确。 5. 在项目的build.gradle文件中,尝试禁用aapt2并启用aapt1。可以通过将以下代码添加到android块中来实现: ``` aaptOptions { useNewCruncher false } ``` 这将使用aapt1而不是aapt2来处理资源文件。 总之,一般来说,通过查看aapt2的错误日志,并根据其中的提示进行调试和解决,可以解决android aapt2错误。 ### 回答3: 当我们在使用Android开发中遇到"aapt2 error: check logs for details"错误时,这通常表示我们在构建Android项目时遇到问题。具体原因可能有很多,但是我们可以通过检查日志文件来获得详细的错误信息和解决方法。 要查看日志文件,我们可以按照以下步骤操作: 1.打开Android Studio,并定位到项目结构视图。 2.在项目结构视图中,选择app模块,然后展开它。 3.在app模块中,我们可以找到一个名为"Build"或"Gradle"的文件夹。展开该文件夹以查看更多选项。 4.在Gradle文件夹中,我们可以找到名为"aapt2"的文件夹。在该文件夹中,我们可以找到一个名为"aapt2_stderr.log"的日志文件。 5.通过双击"aapt2_stderr.log"文件,我们可以打开它并查看其中的错误信息。 这个日志文件会提供关于错误的详细信息,帮助我们找出造成"aapt2 error"的具体原因。通常,它会包含有关资源文件的问题,比如重复的资源名称、无效的资源文件等。 根据错误日志中提供的信息,我们可以采取适当的措施来解决问题。一些常见的解决方法包括: 1.检查你的资源文件,确保命名正确,没有重复的资源名称。 2.确保所有的资源文件都是有效的,没有损坏或格式错误。 3.尝试清理和重建项目,以防止一些临时的构建问题。 4.确保你的Gradle版本和插件版本是兼容的,可以尝试更新Gradle版本或插件版本来解决一些已知的问题。 需要注意的是,每个错误都有不同的原因和解决方法,因此我们需要根据具体的错误信息来进行调查和处理。如果问题仍然存在,我们可以通过在网上搜索相关错误信息或在社区论坛提问来获取更多帮助。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值