android - 突然执行 aapt 时出错

标签 android aapt libz

我知道周围有很多这样的话题,但似乎没有一个对我的情况有帮助,也没有一个准确地描述它。最相似的是aapt not found under the right path .

我的问题是,我可以使用 Eclipse 进行整个晚上的编程、编译和使用我的设备,然后我突然收到当前项目的“执行 aapt 错误”,当然 R.java 没有(正确)生成了。然后我重新启动 Eclipse,一切都消失了。不过,我平均每天看到一次。

我最近切换到 amd64 并安装了最新的 Android-2.3 SDK 和匹配工具。我知道现在有一个 platform-tools 文件夹,它有一个 aapt 版本,应该独立工作 SDK 版本。起初我按照 SDK 网站上的说明将此目录添加到我的 PATH 中。我也尝试过不将它添加到我的路径中并创建一个链接 platforms/android-9/tools 以便每个 SDK 版本都可以使用它自己的旧副本。不用说,platform-tools/aapt 就在那里,并且有合适的权限,我已经可以随时在命令行上执行它了。

当我写了一个有问题的 xml 文件或排序,并适本地得到一个错误时,我看到一个额外的行,上面写着“aapt:/lib32/libz.so.1:没有可用的版本信息”。我正在运行最新的 Gentoo linux 系统。我在 amd64 上安装了所有支持 x86 的东西,但为了确定,我重新出现了 emul-linux-x86-baselibs 和 zlib。问题仍然存在。我确实看到了一些 pages这对一些 zlib 错误感到恐惧,但我不确定这是否相关。我意识到我不在引用 Ubuntu 平台上,但肯定差别不会那么大吧?

这很可能是 aapt 或工具本身的错误。为什么它会突然停止工作?我还经历过 R.java 中的 id 不正确,即简单的 findViewById() 代码会因为一次混合 id 而给出 ClassCastExceptions,然后在没有任何更改的情况下完美地工作,只有一个“干净的项目”,在之后失败的 aapt。

最后,我在 aapt 上运行了一些命令,它们似乎没有添加任何额外信息:

#ldd aapt
./aapt: /lib32/libz.so.1: no version information available (required by ./aapt)
 linux-gate.so.1 =>  (0xffffe000)
 librt.so.1 => /lib32/librt.so.1 (0x4f864000)
 libpthread.so.0 => /lib32/libpthread.so.0 (0x4f849000)
 libz.so.1 => /lib32/libz.so.1 (0xf7707000)
 libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/32/libstdc++.so.6 (0x415e9000)
 libm.so.6 => /lib32/libm.so.6 (0x4f876000)
 libgcc_s.so.1 => /lib32/libgcc_s.so.1 (0x4fac6000)
 libc.so.6 => /lib32/libc.so.6 (0x4f5ed000)
 /lib/ld-linux.so.2 (0x4f5ca000)

#file aapt
aapt: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

有人能告诉我我的配置有什么问题吗?它可能闻起来像个错误(否则让我们(再次)报告它)吗?

2010-01-06 更新:

我又学到了一些知识。当我最近尝试导出签名的 apk 时,我遇到了另一条关于 aapt 的错误消息(来自 Eclipse 错误 View 的完整详细信息),这是我以前从未见过的。此处还要注意,我可以重新启动 Eclipse 并再次导出 apk 文件而不会出现问题,至少会持续一小会儿。

我开始认为这与我的系统内存不足有关。消息“onvoldoende geheugen beschikbaar”表示“可用内存不足”。

当我转储 HPROF 文件时,我还在 DDMS 中看到内存不足错误。

这是错误日志(已缩短):

!ENTRY com.android.ide.eclipse.adt 4 0 2011-01-05 23:11:16.097
!MESSAGE Export Wizard Error
!STACK 1
org.eclipse.core.runtime.CoreException: Failed to export application
 at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(Unknown Source)
 at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(Unknown Source)
 at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(Unknown Source)
 at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(Unknown Source)
 at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: com.android.ide.eclipse.adt.internal.build.AaptExecException: Error executing aapt. Please check aapt is present at /opt/android-sdk/android-sdk-linux_x86-1.6_r1/platform-tools/aapt
 at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeAapt(Unknown Source)
 at com.android.ide.eclipse.adt.internal.build.BuildHelper.packageResources(Unknown Source)
 ... 5 more
Caused by: java.io.IOException: Cannot run program "/opt/android-sdk/android-sdk-linux_x86-1.6_r1/platform-tools/aapt": java.io.IOException: error=12, Onvoldoende geheugen beschikbaar
...
Caused by: java.io.IOException: java.io.IOException: error=12, Onvoldoende geheugen beschikbaar
...
!SUBENTRY 1 com.android.ide.eclipse.adt 4 0 2011-01-05 23:11:16.098
!MESSAGE Failed to export application
!STACK 0
com.android.ide.eclipse.adt.internal.build.AaptExecException: Error executing aapt. Please check aapt is present at /opt/android-sdk/android-sdk-linux_x86-1.6_r1/platform-tools/aapt
 at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeAapt(Unknown Source)
 at com.android.ide.eclipse.adt.internal.build.BuildHelper.packageResources(Unknown Source)
 at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(Unknown Source)
 at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(Unknown Source)
 at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(Unknown Source)
 at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(Unknown Source)
 at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: java.io.IOException: Cannot run program "/opt/android-sdk/android-sdk-linux_x86-1.6_r1/platform-tools/aapt": java.io.IOException: error=12, Onvoldoende geheugen beschikbaar
...
Caused by: java.io.IOException: java.io.IOException: error=12, Onvoldoende geheugen beschikbaar

最佳答案

bug确实在emul-linux的32位libz.so.1.2.3!!

我自己刚刚构建了一个 32 位 libz 版本并且它可以工作 - aapt 不会抛出上述错误。如果您使用的是 gentoo - 所有 libz 版本的 emul-linux-x86-baselibs 都有这个问题(目前是 20100915-r1 和 20110129)

在 emul-linux-baselibs 的更新版本发布之前,您需要执行以下步骤:

  • 获取 zlib(1.2.5 可以)
  • 解压
  • 编辑配置
--- configure.old       2011-02-25 03:03:37.739491008 +0100
+++ configure   2011-02-25 03:03:51.760491008 +0100
@@ -105,8 +105,8 @@

 if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then
   CC="$cc"
-  SFLAGS="${CFLAGS--O3} -fPIC"
-  CFLAGS="${CFLAGS--O3}"
+  SFLAGS="${CFLAGS--O3} -fPIC -m32"
+  CFLAGS="${CFLAGS--O3} -m32"
   if test $build64 -eq 1; then
     CFLAGS="${CFLAGS} -m64"
     SFLAGS="${SFLAGS} -m64"
  • 制作
  • 将 libz.so.1.2.5 移动到/lib32

问题是,虽然您自己编译的 64 位版本在 ELF header 中有以下字段:

  [ 5] .gnu.version      VERSYM           00000000000017be  000017be
  [ 6] .gnu.version_d    VERDEF           0000000000001890  00001890
  [ 7] .gnu.version_r    VERNEED          00000000000019e8  000019e8

当前emul-linux-x86-baselibs提供的32bit版本缺少VERDEF字段,只包含

  [ 4] .gnu.version      VERSYM          00000d9c 000d9c 0000b4 02   A  2   0  2
  [ 5] .gnu.version_r    VERNEED         00000e50 000e50 000050 00   A  3   1  4

您可以检查自己的 32 位库的自定义构建是否有 VERDEF 字段 - 我的有,我想知道为什么它在 emul-linux 发行版中丢失..

问候, cmuelle8

ps:有时候电脑程序打印的错误信息是对的..

关于android - 突然执行 aapt 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4567972/

相关文章:

Android Studio 无法以 1080p 录制屏幕

Android FCM 无法在 channel "my_channel_01"上发布通知

ubuntu - Android Studio 1.0.2 在 Ubuntu 14.04 64 位操作系统上构建构建工具修订版 21.1.2 失败

android - 在 travis yml 文件上配置 gradle.properties android.enableAapt=false

compression - GZIP或DEFLATE最多可以增加文件大小?

objective-c - 当我使用 ASIHTTPRequest 和 SBJSON 时 iOS 5.1 出错

Julia 0.4.5 : libz fails to load on Ubuntu

android - 如何找到范围内可用的蓝牙设备?

Android Studio 3.0,AAPT2 编译失败 - 资源文件中的无效维度

java - 如何向预制的 Android 程序添加另一个按钮 (Android Studio)