Android开发报错:Have you declared this activity in your AndroidManifest.xml? 求助
问题解决指南
1. 先聚焦Manifest注册问题
报错"Have you declared this activity in your AndroidManifest.xml?"是核心提示,优先排查这个点:
- 打开
AndroidManifest.xml,确认第二个游戏的Activity是否有如下格式的注册代码:
<activity android:name="你的包名.第二个游戏Activity的类名" android:exported="true" /> <!-- 若targetSdkVersion≥30,必须设置该属性 -->
- 核对
android:name的路径是否和Activity实际所在包完全一致,比如Activity在com.example.games子包下,就不能只写SecondGameActivity,要写全路径。 - 对照你提供的Manifest截图,确认该Activity的注册项没有遗漏、类名拼写无误。
2. 检查菜单点击逻辑
如果Manifest注册无误,再排查OnOptionsItemSelected的代码:
- 确认第二个菜单项的
itemId匹配正确,且跳转的Activity类名无错误:
@Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.menu_tic_tac_toe) { startActivity(new Intent(this, TicTacToeActivity.class)); return true; } else if (id == R.id.menu_second_game) { // 重点检查这里的Activity类名是否拼写正确、导入是否正确 startActivity(new Intent(this, SecondGameActivity.class)); return true; } return super.onOptionsItemSelected(item); }
- 可以在第二个分支里添加日志,验证是否走到了跳转逻辑:
Log.d("MenuCheck", "触发第二个游戏菜单点击");
如果日志没输出,说明菜单xml里的android:id和代码中判断的itemId不匹配,需同步修正。
3. 额外排查手段
- 执行
Build > Clean Project+Build > Rebuild Project,清理缓存后重新编译,避免Manifest修改未生效。 - 确认第二个游戏的Activity有无无参构造方法,若手动编写了带参构造,必须保留无参构造(系统需要通过它实例化Activity)。
内容的提问来源于stack exchange,提问作者Tiago Moutinho
相关产品推荐
相关产品推荐

