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

Android项目Java文件Layout/ID标红+Gradle资源解析异常求助

Android项目资源解析错误与R类无法识别问题排查方案

问题描述

  • MainActivity.java文件中,R.layout和R.id标记为红色,提示错误:cannot resolve symbol 'id'
  • 运行应用时触发Gradle错误:

Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable

已尝试的解决操作:

  • 在gradle.properties中添加org.gradle.jvmargs=-Xmx2048m
  • 清理重建项目、重启Android Studio,问题仍未解决

核心排查与修复步骤

1. 修正错误的R类导入

你的代码中存在致命的导入错误:

import static android.os.Build.VERSION_CODES.R;

这行导入的是Android版本常量类的R,不是项目自动生成的资源R类。

  • 直接删除这行代码
  • 手动导入项目正确的R类(包名对应你的项目包名):
import online.internship.R;

2. 检查资源文件语法与拼写错误

Gradle的资源解析错误大多源于xml资源文件的问题:

  • 检查activity_main.xml中是否存在拼写错误的id:比如代码里使用了R.id.main_remeber,正确拼写应为main_remember,需确认xml中id是否一致
  • 排查所有layout、values、drawable等资源文件,确保没有未闭合的标签、无效的属性值、非法命名(资源文件名只能用小写字母+下划线,不能有大写或特殊字符)

3. 彻底清理并重建R类

  • 执行Build > Clean Project,再执行Build > Rebuild Project
  • 手动删除项目根目录的.gradle、build文件夹,以及app模块下的build文件夹,之后点击File > Sync Project with Gradle Files重新同步

4. 验证Gradle配置兼容性

  • 打开app/build.gradle,确保compileSdkVersion、targetSdkVersion的版本一致,且与依赖库版本兼容
  • 检查依赖列表,移除重复或冲突的第三方库

5. 清理Android Studio缓存

  • 执行File > Invalidate Caches...,选择Invalidate and Restart,彻底清除IDE缓存后重启

附用户提供的MainActivity.java代码(标注错误点)

package online.internship;

// 此处为错误导入,需删除并替换为项目R类导入
// import static android.os.Build.VERSION_CODES.R;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.method.PasswordTransformationMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

public class MainActivity extends AppCompatActivity {

    Button login, signup;
    String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";

    EditText email, password;
    SQLiteDatabase db;

    SharedPreferences sp;
    CheckBox rememberMe;
    ImageView passwordHide, passwordShow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sp = getSharedPreferences(ConstantSp.PREF, MODE_PRIVATE);

        db = openOrCreateDatabase("Online_Internship", MODE_PRIVATE, null);
        String tableQuery = "CREATE TABLE IF NOT EXISTS USERS(USERID INTEGER PRIMARY KEY AUTOINCREMENT,NAME VARCHAR(100),EMAIL VARCHAR(100),CONTACT INT(10),PASSWORD VARCHAR(20),GENDER VARCHAR(6),CITY VARCHAR(50),DOB VARCHAR(10))";
        db.execSQL(tableQuery);

        email = findViewById(R.id.main_email);
        password = findViewById(R.id.main_password);

        passwordHide = findViewById(R.id.main_password_hide);
        passwordShow = findViewById(R.id.main_password_show);

        passwordHide.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                passwordHide.setVisibility(View.GONE);
                passwordShow.setVisibility(View.VISIBLE);
                password.setTransformationMethod(null);
            }
        });

        passwordShow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                passwordHide.setVisibility(View.VISIBLE);
                passwordShow.setVisibility(View.GONE);

                password.setTransformationMethod(new PasswordTransformationMethod());

            }
        });

        // 注意:此处id拼写为main_remeber,需确认xml中id是否一致,正确应为main_remember
        rememberMe = findViewById(R.id.main_remeber);

        signup = findViewById(R.id.main_signup);
        signup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new CommonMethod(MainActivity.this, SignupActivity.class);
            }
        });

        login = findViewById(R.id.main_login);

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (email.getText().toString().trim().equals("")) {
                    email.setError("Email Id Required");
                } else if (!email.getText().toString().trim().matches(emailPattern)) {
                    email.setError("Valid Email Id Required");
                } else if (password.getText().toString().trim().equals("")) {
                    password.setError("Password Required");
                } else if (password.getText().toString().trim().length() < 6) {
                    password.setError("Min. 6 Char Password Required");
                } else {

                    String selectQuery = "SELECT * FROM USERS WHERE EMAIL='" + email.getText().toString() + "' AND PASSWORD='" + password.getText().toString() + "'";
                    Cursor cursor = db.rawQuery(selectQuery, null);

                    if (cursor.getCount() > 0) {

                        while (cursor.moveToNext()) {
                            String sUserId = cursor.getString(0);
                            String sName = cursor.getString(1);
                            String sEmail = cursor.getString(2);
                            String sContact = cursor.getString(3);
                            String sPassword = cursor.getString(4);
                            String sGender = cursor.getString(5);
                            String sCity = cursor.getString(6);
                            String sDob = cursor.getString(7);

                            sp.edit().putString(ConstantSp.ID, sUserId).commit();
                            sp.edit().putString(ConstantSp.NAME, sName).commit();
                            sp.edit().putString(ConstantSp.EMAIL, sEmail).commit();
                            sp.edit().putString(ConstantSp.CONTACT, sContact).commit();
                            sp.edit().putString(ConstantSp.PASSWORD, sPassword).commit();
                            sp.edit().putString(ConstantSp.GENDER, sGender).commit();
                            sp.edit().putString(ConstantSp.CITY, sCity).commit();
                            sp.edit().putString(ConstantSp.DOB, sDob).commit();
                            if (rememberMe.isChecked()) {
                                sp.edit().putString(ConstantSp.REMEMBER, "Yes").commit();
                            } else {
                                sp.edit().putString(ConstantSp.REMEMBER, "").commit();
                            }

                            Log.d("USER_DATA", sUserId + "\n" + sName + "\n" + sEmail + "\n" + sContact + "\n" + sPassword + "\n" + sGender + "\n" + sCity + "\n" + sDob);
                        }

                        new CommonMethod(MainActivity.this, "Login Successfully");
                        new CommonMethod(view, "Login Successfully");
                        new CommonMethod(MainActivity.this, DashboardActivity.class);
                    } else {
                        new CommonMethod(MainActivity.this, "Login Unsuccessfully");
                    }
                }
            }
        });

    }

    @Override
    public void onBackPressed() {
        finishAffinity();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:07:07