You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目构建失败:XML解析错误及代码问题求助

解决':app:parseDebugLocalResources'执行失败问题

任务':app:parseDebugLocalResources'执行失败。
执行com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable时发生失败
无法解析XML文件'/Users/gain/AndroidStudioProjects/Gamin/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_main.xml'
根因:org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException:执行com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable时发生失败

一、activity_main.xml的语法错误

布局文件存在多处XML语法错误,直接导致资源解析失败:

  • 无效属性 android:Button=:这行属于错误写法,Button是控件标签而非ConstraintLayout的属性,需删除
  • 控件属性位置错误:Button的属性(如android:id、android:text等)被错误放置在ConstraintLayout标签外部,应包裹在<Button>标签内
  • 多余闭合符号:末尾的> </androidx.constraintlayout.widget.ConstraintLayout>包含多余的>,需删除
  • 缺少必要控件:布局中未定义代码依赖的EditText(id为editTextTextPersonName)和TextView(id为textView2)

修复后的activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:ignore="ExtraText">

    <!-- 输入名字的EditText -->
    <EditText
        android:id="@+id/editTextTextPersonName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter your name"
        android:layout_marginHorizontal="16dp"
        android:layout_marginTop="16dp"/>

    <!-- 修复后的Button控件 -->
    <Button
        android:id="@+id/buttonSayHello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Say Hello"
        android:onClick="SayHello"
        android:layout_marginTop="16dp"
        android:layout_gravity="center_horizontal"/>

    <!-- 显示问候语的TextView -->
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello!"
        android:layout_marginTop="16dp"
        android:textSize="18sp"/>

</androidx.constraintlayout.widget.ConstraintLayout>

二、Main.java的逻辑与语法错误

代码存在多处会导致崩溃或功能失效的问题:

  • 构造函数中调用findViewById:此时Activity未完成布局初始化(未执行setContentView),会触发空指针异常,需将初始化代码移至onCreate方法内
  • 资源ID引用错误:R.textView2应为R.id.textView2;R.id.button应为布局中定义的R.id.buttonSayHello
  • 控件初始化时机错误:nameText的初始化必须在setContentView之后
  • afterTextChanged方法缺少@Override注解(虽不影响编译,但不符合编码规范)

修复后的Main.java:

package com.example.gamin;

import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements TextWatcher {
    EditText nameText;
    TextView textGreeting;
    Button buttonSayHello;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 所有控件初始化必须在setContentView之后执行
        nameText = findViewById(R.id.editTextTextPersonName);
        textGreeting = findViewById(R.id.textView2);
        buttonSayHello = findViewById(R.id.buttonSayHello);
        
        nameText.addTextChangedListener(this);
        buttonSayHello.setEnabled(false);
    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        // 简化非空判断逻辑
        buttonSayHello.setEnabled(!s.toString().trim().isEmpty());
    }

    public void SayHello(View view) {
        String userName = nameText.getText().toString().trim();
        if(!userName.isEmpty()) {
            textGreeting.setText("Howdy " + userName);
        } else {
            textGreeting.setText("Please enter your name");
        }
    }
}

修复说明

  1. XML布局文件修复了语法错误,补充了代码依赖的EditText和TextView控件
  2. Java代码调整了控件初始化时机,修正了资源ID引用错误,优化了非空判断逻辑
  3. 完成上述修改后,重新构建项目即可解决资源解析失败的问题

内容的提问来源于stack exchange,提问作者Surah brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:53:10