我知道这些主题很多,但似乎对我的情况没有帮助,也无法准确描述。最好的类似的是aapt not found under the right path

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

我最近切换到了amd64,并安装了最新的Android-2.3 SDK和匹配工具。我知道现在有一个platform-tools文件夹,其中包含一个aapt版本,该版本应独立运行SDK版本。首先,按照SDK网站上的说明,将该目录添加到了PATH中。我还尝试过不将其添加到我的路径中,并创建一个链接platform/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是不正确的,即一次,由于混合的ID,简单的findViewById()代码将给出ClassCastExceptions,然后在没有任何更改的情况下完美地工作,而仅通过一个“干净的项目”就可以了。一个失败的apt。

最后,我在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

有人能告诉我我的配置有问题吗?它闻起来像是个 bug 吗(否则,让我们再次报告一下)?

2010年1月6日更新:

我已经学到了一些知识。最近,当我尝试导出签名的apk时,我遇到了另一条错误消息(Eclipse错误 View 中的完整详细信息),涉及到我以前从未见过的aapt。还要注意,我可以重新启动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

最佳答案

该错误确实存在于emul-linux的32位libz.so.1.2.3中!

我只是自己建立了一个32位的libz版本,它可以正常工作-aapt不会抛出上述错误。如果您使用的是gentoo-emul-linux-x86-baselibs的所有libz版本都存在此问题(当前为20100915-r1和20110129)

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

  • 取得zlib(1.2.5可以)
  • 解压缩
  • 编辑配置

  • --configure.old 2011-02-25 03:03:37.739491008 +0100
    +++配置2011-02-25 03:03:51.760491008 +0100
    @@ -105,8 +105,8 @@

    如果测试“$ gcc” -eq 1 &&($ cc -c $ cflags $ test.c)2>/dev/null;然后
    CC =“$ cc”
    -SFLAGS =“$ {CFLAGS--O3} -fPIC”
    -CFLAGS =“$ {CFLAGS--O3}”
    + SFLAGS =“$ {CFLAGS--O3} -fPIC -m32”
    + CFLAGS =“$ {CFLAGS--O3} -m32”
    如果测试$ build64 -eq 1;然后
    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提供的32位版本缺少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

    您可以检查一下自己的32bit lib自定义版本是否具有VERDEF字段-我的确实如此,我想知道为什么在emul-linux发行版中缺少它。

    问候,
    cmuelle8

    ps:有时计算机程序打印的错误消息是正确的。

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

    10-12 03:51