Android项目报错package R does not exist,求解决方案
我是应用开发新手,正在开发一款拼写测验游戏项目。最初在IntelliJ Idea中创建该项目,使用Gradle 4.2,迁移到Android Studio后升级Gradle至7.4,但项目从未成功运行。尝试修改AndroidManifest.xml来解决问题,但无任何效果。
报错信息
C:\Users\admin\Desktop\Educational App\app\src\main\java\com\example\funspelling\GameActivity.java:48: error: package R does not exist setContentView(R.layout.activity_game
AndroidManifest.xml代码
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sinanli.funspelling"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SettingsActivity" android:label="@string/title_activity_settings" android:parentActivityName=".MainActivity" android:theme="@style/AppTheme.NoActionBar"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.sinanli.funspelling.MainActivity" /> </activity> <activity android:name=".GameActivity" android:label="@string/title_activity_game" android:parentActivityName=".MainActivity" android:theme="@style/AppTheme.NoActionBar"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.sinanli.funspelling.MainActivity" /> </activity> <activity android:name=".ScoreActivity" android:label="@string/title_activity_score" android:parentActivityName=".MainActivity" android:theme="@style/AppTheme.NoActionBar"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.sinanli.funspelling.MainActivity" /> </activity> </application> </manifest>
GameActivity.java代码
package com.example.funspelling; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.CountDownTimer; import android.preference.PreferenceManager; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.R; import java.util.Collections; import java.util.List; public class GameActivity extends AppCompatActivity { private TextView questionT; private ImageView foodImage; private TextView timeT; private EditText inputT; private Button buttonC; private CountDownTimer count; private SharedPreferences prefs; private AssetManager assetManager; private SoundManager soundManager; private int clap; private String rightAnswer; private String alertTitle; private int rightAnswerCount; private int quizCount = 1; private List<String> foodNames; private String difOption; private String musicOption; static private final int QUIZ_COUNT = 5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_game); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); questionT = (TextView) findViewById(R.id.questionText); foodImage = (ImageView) findViewById(R.id.foodImage); timeT = (TextView) findViewById(R.id.timeText); inputT = (EditText) findViewById(R.id.inputText); buttonC = (Button) findViewById(R.id.button); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); difOption = prefs.getString("difSelection","1"); assetManager = new AssetManager(this, difOption); foodNames = assetManager.allFoodNames(difOption); soundManager = new SoundManager(this); clap = soundManager.addSound(R.raw.clap); musicOption = prefs.getString("musicSelection", "On"); showNextQuiz(); count = new CountDownTimer(10 * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { timeT.setText("Seconds Remaining: " + millisUntilFinished / 1000); } @Override public void onFinish() { timeT.setText("Done"); buttonC.performClick(); } }; count.start(); } public void showNextQuiz () { questionT.setText("Question " + quizCount + " Out of " + QUIZ_COUNT); Collections.shuffle(foodNames); foodImage.setImageDrawable(assetManager.imageForFood(foodNames.get(0))); rightAnswer = foodNames.get(0); foodNames.remove(0); Collections.shuffle(foodNames); } public void checkAnswer(View view) { String answer = inputT.getText().toString(); inputT.setText(""); if (answer.equals(rightAnswer)){ alertTitle = "Correct!"; rightAnswerCount++; if (musicOption.equals("On")){ soundManager.play(clap); } } else { alertTitle = "Wrong..."; } prefs = getSharedPreferences("value", MODE_PRIVATE); prefs.edit().putInt("Score", rightAnswerCount * 10).apply(); AlertDialog.Builder builder = new AlertDialog.Builder(this); if (quizCount == QUIZ_COUNT) { count.cancel(); builder.setTitle("Game Over"); builder.setMessage("Score: " + rightAnswerCount * 10); builder.setPositiveButton("Close", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(getApplicationContext(), MainActivity.class); startActivity(intent); } }); } else { count.cancel(); builder.setTitle(alertTitle); builder.setMessage("Answer : " + rightAnswer); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { quizCount++; showNextQuiz(); count = new CountDownTimer(10 * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { timeT.setText("Seconds Remaining: " + millisUntilFinished / 1000); } @Override public void onFinish() { timeT.setText("Done"); buttonC.performClick(); } }; count.start(); } }); } builder.setCancelable(false); builder.show(); } }
解决方法
移除错误的R类导入:GameActivity中导入了系统的
android.R,这会覆盖项目自动生成的自定义R类。删除这行代码:import android.R;确保使用项目自身的R类(Android Studio通常会自动导入
com.example.funspelling.R,如果没有可手动添加)。统一包名:Manifest中的包名是
com.example.sinanli.funspelling,但GameActivity的包声明是com.example.funspelling,两者不一致会导致R类生成异常,二选一修改:- 修改GameActivity的包声明为
package com.example.sinanli.funspelling; - 修改Manifest的根标签
package属性为com.example.funspelling,同时将所有<meta-data>中的android:value改为com.example.funspelling.MainActivity
- 修改GameActivity的包声明为
清理重建项目:执行Android Studio菜单栏的
Build > Clean Project,随后执行Build > Rebuild Project,强制重新生成R类文件。检查布局文件:确认
activity_game.xml存在于app/src/main/res/layout目录下,且xml代码无语法错误(如标签未闭合、无效资源引用等),这类错误会阻止R类生成。
内容的提问来源于stack exchange,提问作者setupspawn

