错误:com.android.tools.aapt2.Aapt2Exception:AAPT2错误:查看日志以了解详细信息


137

这是我的Gradle控制台的输出,我无法构建我的项目

D:\Android Projects\....\app\src\main\res\layout\topic_view_header.xml
Error:error: resource attr/?? (aka -packagename- :attr/??) not found.
Error:error: resource attr/?? (aka -packagename-:attr/??) not found.
Error:error: resource attr/?? (aka -packagename-:attr/??) not found.
Error:resource attr/?? (aka -packagename-:attr/??) not found.
Error:resource attr/?? (aka -packagename-:attr/??) not found.
Error:resource attr/?? (aka -packagename-:attr/??) not found.
Error:failed linking file resources.
Error:java.util.concurrent.ExecutionException: 
java.util.concurrent.ExecutionException: 
com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:java.util.concurrent.ExecutionException: 
com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for 
details
Error:Execution failed for task ':app:processDebugResources'.
> Failed to execute aapt
Information:BUILD FAILED in 27s
Information:11 errors
Information:0 warnings

Android Studio 3.0 RC 2


看到这个问题
Enzokie

您可以尝试运行assembleDebug任务来识别问题。有关更多信息,请阅读此处stackoverflow.com/a/47941174/1573414
AnteGemini

Answers:


112

更新2(遵循此方法)

您现在不应该这样做。而是修复所有错误。在删除之前,这只是一个解决方法。之后,您仍然需要手动修复错误。

尝试更新gradle插件以3.3.0-alpha06检查是否可以解决您的问题。

更新1:

现在,非ASCII字符问题已在AAPT2和android gradle插件中修复(是!)。现在您可以仅使用android gradle插件版本3.2.0-alpha11或更高版本来代替禁用AAPT2,并且不再遇到此错误。

原始答案

当您使用Gradle 3.0的Android插件时,默认情况下会启用Aapt2。

这是为了

改善增量资源处理

如规定在这里

但是,如果您遇到此问题,可以通过在 gradle.properties

android.enableAapt2=false

但是之后,运行androidTest会出现问题。它给出了未找到的错误类:“ com.app.someapp.TheTestClass”空测试套件。看到这里stackoverflow.com/questions/47969959/…–
K.Os

29
这个动作后,我得到这个味精Process 'command 'D:\Android\sdk\Sdk\build-tools\27.0.3\aapt.exe'' finished with non-zero exit value 1
AN

1
现在,非ASCII字符问题已在AAPT2和android gradle插件中修复(是!)。现在您可以仅使用android gradle插件版本3.2.0-alpha11或更高版本来代替禁用AAPT2,并且不再遇到此错误。
伊莎贝拉(Izabela Orlowska)'18年

2
它有效,但是我得到消息:The option 'android.enableAapt2' is deprecated and should not be used anymore. Use 'android.enableAapt2=true' to remove this warning. It will be removed at the end of 2018..
Mikemike '18

1
请勿使用此!禁用任何新功能仍将在将来破坏该项目。正如Pranav Karnik所说,它已过时并计划删除:这只是一个解决方法,直到将其删除。之后,您仍然需要手动修复错误。
佐伊

102

更新

有新版本的Gradle和Android-gradle-plugin可以解决这些问题。

build.gradle (顶层)

buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-all.zip

上一个答案

如果禁用AAPT2,则只会隐藏真正的问题。

请注意,AAPT1将来可能会删除它,因此您不得不使用AAPT2。实际上,迁移指南并不难遵循,因为您不会以这种方式同时看到太多变化,这是未来的证明。

Android清单中的元素层次结构

在AAPT的早期版本中,嵌套在Android清单中错误节点中的元素将被忽略或导致警告。例如,考虑以下示例:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.myname.myapplication">
   <application
       ...
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
           <action android:name="android.intent.action.CUSTOM" />
       </activity>
   </application>
</manifest>

因此,您必须首先检查您是否确实遵循正确的清单结构,如下所示。

清单文件结构

下面的代码段显示了清单文件的一般结构以及它可以包含的每个元素。每个元素及其所有属性都完整记录在一个单独的文件中。

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <application>

        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>

        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>

        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>

        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>

        <provider>
            <grant-uri-permission />
            <meta-data />
            <path-permission />
        </provider>

        <uses-library />

    </application>

</manifest>

7
@Downvoters请。解释一下此答案到底有什么问题,以便我解决。
Enzokie

嗨,Enzokie,我有同样的aapt2异常。我要做的是将compileSdkVersion从21更新为26,然后aapt2崩溃。您知道我在哪里找到错误日志吗?
忍者

@Ninja可以在Gradle控制台中检查日志,就像Logcat一样。
Enzokie

3
您尚未提供解决方案,只是提供了可能与否相关的背后原因的理论。
克里斯-Jr

1
@AhamadullahSaikat您是否具有与OP类似的stacktrace?
Enzokie


13

检查android studio中的gradle控制台标签(默认情况下位于右下角)。就我而言,有这样的错误:

C:\Users\Jozef Bar??k\.gradle\caches\transforms-1\files-1.1\appcompat-v7-25.4.0.aar\d68bb9d2059935a7891196f4dfb81686\res\drawable-hdpi-v4\abc_ic_menu_share_mtrl_alpha.png: error: file not found.

Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
:app:mergeDebugResources FAILED

我解决了将gradle用户设置为不带白色或特殊字符的其他位置的问题:

C:\Android\.gradle

您可以在Gradle设置对话框中通过设置“ Service directory path ” 来配置它。就我而言,有必要删除先前位置上的旧.gradle目录,然后重新启动android studio。


对我来说,问题是运行构建即服务C:\ Windows \ System32 \ config \ systemprofile \ .gradle \ .........时文件名过长设置GRADLE_USER_HOME = d:\。gradle已修复问题(以我为系统环境变量)
Marc

谢谢您,因为我的服务目录路径中有一个拉丁字母“é”,这可以帮助我解决问题。
让-塞巴斯蒂安·热尔韦

1
在Android Studio 3.1之后,Gradle控制台标签被删除。现在位于“构建”选项卡中。单击“切换视图”按钮(在左侧“构建”选项卡中,在“锤子”按钮下方)以将视图更改为原始Gradle输出,以查看引起AAPT2错误的实际错误
georgiecasey

8

我的问题是由于图像文件名以.9.png结尾。我将结尾更改为.png,问题消失了。我从堆栈跟踪提示在摇篮控制台:顶部的消息是“执行失败的任务:应用程序:mergeDebugResources ”和底部的消息是“ com.android.builder PNG .AaptProcess $ NotifierProcessOutput.out”

我期待Gradle输出更多有用的错误消息的那一天...


8

尝试使用数据绑定并声明布局标签时,我只是遇到了这个问题。我知道这有点晚了,但为了任何人遇到这个问题,经过多次尝试后我为解决此问题所做的就是在不使用数据绑定的情况下在根布局上说这

  <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">     </android.support.constraint.ConstraintLayout>

去除

xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"

并将其放在您的布局标签上(也就是说,如果您正在使用数据绑定

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

</layout>

希望它能工作。这android.enableAapt2=false对我不起作用,因此我必须删除所有内容并尝试找出为什么在放置布局标签并使用数据绑定时出现错误,因此提出了解决方案。希望能帮助到你


1
多谢,伙计!你为我节省了一个小时。
Siamak SiaSoft

1
多谢,伙计!你为我节省了两个小时!
l33t

7

在这里有同样的问题。如@Izabela Orlowska所指出的,此问题很可能是由路径中的特殊字符(android grandle文件,资源等)引起的。

对我来说:拥有ří文件夹名称会引起所有问题。确保路径中没有任何特殊字符。禁用AAPT2只是一个临时的“解决方案”。您的项目路径包含非ASCII字符android studio


5

我通过三个步骤解决了该错误:
1.检查了问题的源
2.提供了正确的字符串/文本,这是原因
3.我清理了项目,您可以在BUILD下找到它。
我的项目


1
谢谢帮助我确定了我的问题!
Apple Appala '18

5

由于将来某个时候将不再支持AAPT(1),因此最好确定您报告的错误的原因。
您能否提供\ app \ src \ main \ res \ layout \ topic_view_header.xml文件的内容?从问号来看,您可能正在使用非ASCII字符,而AAPT2仍然存在一些问题。如果确实是非ASCII字符,请按照https://issuetracker.google.com/68262818上的错误进行操作。

更新:此问题已在android gradle插件版本3.2.0-alpha11或更高版本中修复。



@Konrad 404,@ izabela在gradle 4.1上仍然是同一问题
Ajay Pandya

@AjayPandya是gradle版本,您需要更新android gradle插件版本。在您项目的build.gradle文件中,您需要更新为具有classpath 'com.android.tools.build:gradle:3.2.0-alpha11'
伊莎贝拉(Izabela Orlowska)'18年

4

重要更新

不要将此行作为其他答案添加到您的项目中。因为它 较新的Gradle版本中解决

您可以将Project级别的build.gradle构建gradle版本更新为最新版本。

buildscript {
    dependencies {
        // choose latest if available
        classpath 'com.android.tools.build:gradle:3.3.0-alpha06'
    }
}

gradle-wrapper.properties

// choose latest if available
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip

就这样!同步并运行,宾果游戏!

更多信息Android文档

如果添加,则会收到警告 android.enableAapt2=false

警告:选项“ android.enableAapt2”已被弃用,不应再使用。使用'android.enableAapt2 = true'删除此警告。它将在2018年底删除。


这是到目前为止看到的最好的答案,因为如果您尝试禁用aapt2,则在撰写本文时会引发错误,我要做的就是更新gradle,并且在更新之后,gradle告诉我实际错误是很重要的事实上,它不允许我在gradle-wrapper.properties文件中使用gradle-4.8,我必须使用4.9最新版本,而且在依赖项路径中,我必须使用gradle:3.3.0-alpha06
Kingston Fortune

我将更新原始帖子,因此更容易理解。
金斯顿财富

我必须在哪个gradle文件中编写android.enableAapt2 = false
Niki

@nTri仅查找答案的“解决方案”部分,无需添加android.enableAapt2=false
Khemraj '18

很高兴为您提供@nTri :)
Khemraj

2

我也遇到了这个错误。对我而言,正是在将目标SDK从26降低到25的时候。我能够通过将appcompat依赖版本从

implementation 'com.android.support:appcompat-v7:26.1.0'

implementation 'com.android.support:appcompat-v7:25.4.0'

这将使编译器可以访问当前无法找到的样式属性。这实际上将解决问题,而不是像Enzokie所建议的那样掩盖实际问题。



2

在进一步开发中禁用AAPT2 mght原因问题,在我的情况下,当我创建应用程序图标时生成了错误。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="Infinity"
    android:viewportHeight="Infinity">
<path android:fillColor="#26A69A"
      android:pathData="M0,0h108v108h-108z"/>
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
      android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>

我通过删除这一行来解决

    android:viewportWidth="Infinity"
    android:viewportHeight="Infinity"

2

正如@Izabela Orlowska所指出的:就我而言,问题是由于在gradle缓存文件夹中找不到某些文件而发生的。(Windows作业系统)

默认的gradle路径在我的用户文件夹内。路径上有变音符和空格。我通过设置GRADLE_HOMEGRADLE_USER_HOME环境变量将gradle文件夹移动到了一些新创建的文件夹,路径中没有变音符号或空格。这为我解决了问题。


2

我尝试了这里和许多其他站点上建议的所有内容,最终发现问题出在Bitdefender阻止aapt...。

如果已安装Bitdefender,则需要分别打开aapt和aapt2“ Application Access ”。

希望这是有用的。


2

如果您在Android Studio 3.0.1的Kotlin项目中尝试运行单个Android实施测试或测试类(通过单击装订线中的运行图标)后看到此错误,则可以通过运行完整的测试包(通过右键单击测试包并选择“在...中运行测试”)。

Android Studio 3.0.1中存在一个已知的错误,该错误会导致IDE以常规JUnit测试的形式运行Kotlin实现测试,这会导致OP的错误消息显示在我的计算机上。该错误已通过https://issuetracker.google.com/issues/71056937进行了跟踪。它似乎已在Android Studio 3.1 Canary 7中修复。


2

正如其他人所建议的那样,

android.enableAapt2=false

是最常见的解决方案。

但就我而言,该错误是由于compileSdkVersionbuildToolsVersion中的版本不同导致的

确保主版本保持不变。


首先检查“ compileSdkVersion和buildToolsVersion”
vgulkevic,

不要使用此android.enableAapt2 = false,
Saurabh Gaddelpalliwar

不要使用此android.enableAapt2 = false,这不是解决方案。找出确切在您的“构建输出”框中显示的错误,单击“切换”视图以查找确切的错误或异常,使用compileSdkVersion 28 buildToolsVersion“ 28.0.3”并按照说明删除或更新外部库或依赖项
Saurabh Gaddelpalliwar

2

当项目名称很长时,我收到了此错误,并在其中添加了保存项目的位置。将项目移动到另一个位置,以便文件名不超过系统限制,为我解决了该错误。

C:\Users\<UserName>\AndroidStudioProjects\From Github\AdvancedAndroid_Emojify-TLIB.02-Exercise-DetectFaces\AdvancedAndroid_Emojify-TLIB.02-Exercise-DetectFaces\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml
Error:error: file not found.
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Execution failed for task ':app:mergeDebugResources'.
Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

2

我也遇到过这样的问题,原来是我计算机的系统托盘的这个路径:

C:\ Users \'出现特殊字符'\ .android以中文出现,

现在我将路径更改为:

C:\ Users \ hjc \ .android。

原因是特殊字符的问题,因此导致砾石appt2Exception问题


现在,此问题已修复。如果您更新到android gradle插件3.2.0-alpha11或更高版本,则现在可以在文件路径中使用非ascii字符。
伊莎贝拉(Izabela Orlowska)'18年

2

我有一个非常类似的问题。通过删除gradle的缓存(在Linux上为〜/ .gradle / caches)解决了该问题,这迫使android studio重新下载并重新生成所有内容。


2

关闭项目并重新启动android studio对我来说解决了这个问题。

重新启动时,android studio通知它需要下载缺少的SDK,因此,解决了该问题。


2

我不确定是否已经为您回答了这个问题,但是请允许我权衡一下。最近我遇到了类似的问题,我能够从logcat旁边的build选项卡中找出确切的问题。我的问题是由XML中的fontfamily错误引起的。我正在使用2018年3月更新的最新版本的Android Studio。


2

确保在src/main/res/raw目录中使用有效的文件类型。就我而言,我已将.mov文件以及其他文件复制到res / raw目录中。我怀疑问题是aapt试图处理.mov文件,但不知道如何处理。


2

我遇到了完全相同的问题:更新到Android Studio 3.1.2之后,我的项目无法通过AAPT2错误进行编译,该错误告诉我一些我的可绘制对象被引用 styles.xml。禁用AAPT2不再是解决方案,因为该设置已弃用,并将于2018年底删除。

在完全不相关的layout.xml文件中,在xml脱节之前,Culprit是一个空行。因此layout.xml文件开始如下:

//empty line//
<?xml version="1.0" encoding="utf-8"?>

删除了空行,一切再次恢复了正常。令人难以置信和不可能,但事实如此。

Android Studio实际上发出了警告,因为该文件不是以xml decleration开始的(因为空行)。但是,只有在编辑器中打开文件时,该警告才可见。


2

此错误消息(AAPT2错误:请查看日志以了解详细信息)没有帮助,因为它没有告诉您真正的问题是什么。

就我而言,这是由于缺少资源XML可绘制文件。

error: failed linking file resources.

org.gradle.tooling.BuildException: Failed to process resources, see aapt output above for details.

我只是想出了原因,因为我撤消了XML文件中的更改,而这次我得到了更有用的消息:

error: resource drawable/ic_filter_off (aka com.xxx:drawable/ic_filter_off) not found.

Message{kind=ERROR, text=error: resource drawable/ic_filter_off (aka com.xxx:drawable/ic_filter_off) not found., sources=[C:\code\xxx\app\src\main\res\layout\app_bar_main.xml:69], original message=, tool name=Optional.of(AAPT)}

2

在我的情况下,真正的问题是,在生成Image Asset为我的项目生成启动器mipmap图标之后,生成的文件ic_launcher_foreground.xml里面有错误(错误生成)。文件末尾缺少关闭的xml标记,缺少</ vector>


2

检查并尝试以下操作。问题应解决。

  1. 首先,从构建窗口的底部检查日志,查看是否有任何与项目显示相关的错误。如果显示错误,则修复所有这些错误。现在,重新构建并运行,修复所有错误。它将消除aapt2问题,而无需将android gradle插件更改为3.2.0。

  2. 其次,如果在构建日志中没有显示任何与项目相关的错误,但仍显示aapt2错误,则可以按照以下步骤进行修复。

build.gradle像下面这样在项目级别文件中更新android gradle插件:

classpath 'com.android.tools.build:gradle:3.2.0-alpha13'

现在更新 android.enableAapt2=true。然后检查并构建您的项目。

这些步骤中的任何一个都可以解决与aapt相关的问题。


2

如果您使用Kotlin,则由于xml文件中的某些错误而出现错误。在kotlin中,很难找到xml错误,简单地构建失败。要知道确切的错误日志,请在Android Studio Terminal中的以下命令中运行,并且很容易修复错误。

./gradlew clean
./gradlew assemble

在终端中使用这些实际上显示了确切的错误。就我而言,这是一个空的可见性属性。谢谢!
拉米·杰姆利 Rami Jemli)

2

我遇到了同样的错误AAPT2错误:检查日志以了解详细信息,然后按照最常见的解决方案应用了上述解决方案,我打开了gradle.properties并添加行

android.enableAapt2 = false

解决方案,但我得到了错误的处理'命令'D:\ Android \ sdk \ Sdk \ build-tools \ 27.0.3 \ aapt.exe'',退出值非零

但是经过多次搜索后,我发现布局的xml文件中存在问题,我在布局的xml文件中重复了以下几行:

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"

从xml文件中删除重复行,然后重建项目并完成。


2

检查项目中的以下内容:

  • 确保任何XML文件在文件开头都没有空格。

  • 确保任何可绘制文件都没有大写字母或名称中任何特殊符号之类的问题。

  • 如果您的aapt2.exe连续丢失,那么请扫描您的整个PC,可能是有病毒删除了adb.exp或aapt2.exe。

希望您能找到解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.