将Android Gradle项目的构建工具升级到21.0.1:aapt抛出异常

60

我们有一个Android Gradle项目。今天我想将Android构建工具版本从20升级到21.0.1,但现在aapt失败了。

* What went wrong:
Execution failed for task ':myproject-android:processDebugResources'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
        c:\_DEVELOP\AndroidSDK\sdk\build-tools\21.0.1\aapt.exe package -f --no-crunch -I c:\_DEVELOP\AndroidSDK\sdk\platforms\android-16\android.jar -M D:\_MY_PROJECT\trunk\myproject_bin\gradle\build\re
lease\myproject-android\intermediates\manifests\full\debug\AndroidManifest.xml -S D:\_MY_PROJECT\trunk\myproject_bin\gradle\build\release\myproject-android\intermediates\res\debug -A D:\_MY_PROJECT\tr
unk\myproject_bin\gradle\build\release\myproject-android\intermediates\assets\debug -m -J D:\_MY_PROJECT\trunk\myproject_bin\gradle\build\release\myproject-android\generated\source\r\debug -F D:\_PIVOSC
ORE_P4\trunk\myproject_bin\gradle\build\release\myproject-android\intermediates\res\resources-debug.ap_ --debug-mode --custom-package com.myproject.app -0 apk --output-text-symbols D:\_MY_PROJECT\trunk\
myproject_bin\gradle\build\release\myproject-android\intermediates\symbols\debug
Error Code:
        255

我收到了一些警告信息:

libpng warning: iCCP: Not recognizing known sRGB profile that has been edited

我修复了那些问题,但是在appcompat-v7库中还有6个问题。

如果我将构建工具版本回退到20,一切都可以正常运行。

有人遇到过这个问题吗?


看起来这个问题已经被报告了:https://code.google.com/p/android/issues/detail?id=77629 - dfritsi
1
请注意,AAPT中存在几个不同但相关的错误;那个错误报告有点混乱。你的错误不是主要错误,主要错误是在返回错误-1073741819的位置报告的。请跟进,如果该错误已被关闭并且您仍然遇到问题,请打开一个新的错误报告。 - Scott Barta
展示你的 build.gradle 文件。 - Jared Burrows
9个回答

40

这对我有用:

这是由像Photoshop这样的工具添加的元数据,甚至在Android上也不被支持。请将其删除。

brew install exiftool
find . -path '*src/main/res/*' -name '*.png' -exec exiftool -overwrite_original -all= {} \;

来源: https://groups.google.com/forum/#!msg/adt-dev/rjTQ_STR3OE/-UcNQRISTKsJ

P.S. 仅在Mac上测试过。


2
提供的链接中实际的命令是 find . -path '*src/main/res/*' -name '*.png' -exec exiftool -overwrite_original -all= {} \;。如果在 path 中没有 *,该命令将无法正常工作。 - Jedidja
这些代码应该放在哪里? - Mann
终端。在终端中输入“cd”命令进入你的根项目文件夹,然后粘贴命令。 - marius bardan
我在使用Mac电脑时无法运行,所以我使用了find ./ -name '*.png' | xargs -L 1 -I '{}' exiftool -overwrite_original -all= '{}'。谢谢。 - kevinkl3
它还可以与TinyPNG一起使用,这是一个在线(破坏性)压缩工具。 - bgondy
显示剩余2条评论

38

这是由于一个有问题的aapt造成的。在21.0.0版本中也存在类似的问题(Error Code: -1073741819)。你需要再次更新build-tools以解决它。

  • 打开SDK管理器并安装build-tools 21.1.2

  • 然后修改您的build.gradle文件使其如下所示。

apply plugin: 'com.android.application'
    android {
        compileSdkVersion 21
        buildToolsVersion "21.1.2"

如果需要,请将版本号替换为最新版本。

旧的buildToolsVersion为21.0.2,建议使用21.1.2或更高版本。


23
即使我更新到21.1.1版本,仍然出现相同的错误。 - PPD
12
即使是 21.1.2 版本,问题仍然存在。 - slott
8
22.0.1版仍在发生。 - geekoraul
7
仍然发生在22.1.2。 - worked
8
仍然发生在23.0.0 rc3版本中。 - micnoy
显示剩余12条评论

14

这里报告了有关libpng的警告,但可以忽略

https://code.google.com/p/android/issues/detail?id=77704

项目成员表示,他们构建的新版本libpng在颜色配置方面更加严格。他们将在即将发布的版本中修复此问题,但这不应该是一个问题。

而21.0.2解决了其他问题。


请参见https://dev59.com/jGEh5IYBdhLWcg3wKQnY。 - Jesse W at Z - Given up on SE
3
我肯定是在使用版本为22.0.1的构建工具,但我仍然遇到了这个问题。 - Jeffrey Blattman

5
我发现使用pngcrush可以从png文件中删除颜色配置文件,以避免此警告关于pngcrush的维基百科。如果您在MacOS上工作,还可以使用一个名为ImageOptim的工具来运行pngcrush并即时替换剥离的.png文件。

1
安装完成后(在Ubuntu上使用apt-get install pngcrush),您可以像这样运行它:find . -path '*src/main/res/*' -name '*.png' -exec bash -c 'pngcrush $0 ${0}' {} \; - SanThee

2

21.0.1版本也破坏了我的项目,aapt无法将任何字符串资源添加到APK中。 通过编辑project.config,回退到20.0.0版本:

sdk.buildtools=20.0.0

你遇到了什么问题或错误?它运行得非常完美。 - Jared Burrows
PackageManager在找不到应用程序名称的字符串资源时崩溃。Aapt d strings在APK中根本没有显示任何字符串。 - Vaiden

1
如果手动从文件中删除元数据不切实际,您可以通过在build.gradle中设置以下内容来禁用使用新的严格PNG破碎机。
aaptOptions.useNewCruncher = false

1

我之前使用的构建工具版本是21.0.0,也遇到了同样的问题。但是,升级到21.0.1版本后,问题得到了解决。


0

我遇到了相同的警告,即使使用22.0.1版本的构建工具,aapt仍然会卡住。我在设置>编译器中勾选了并行编译独立模块的选项,导致多个aapt实例运行,构建成功。


-4

移除 com.android.support:appcompat-v7:xxx 依赖


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接