Manifest报错:MainActivity需继承android.app.Activity,Intent跳转异常
问题现象
- Manifest文件里
MainActivity和SignIn的名称下方出现红线提示:MainActivity must extend android.app.Activity - 应用能在实体手机正常运行,但执行Activity跳转代码时:
Intent intent = new Intent(MainActivity.this, SignIn.class);startActivity(intent);startActivity方法报错:Cannot resolve method 'startActivity' in 'MainActivity',同时MainActivity.this和SignIn.class下方也有红线 - 仅让Activity继承
android.app.Activity时一切正常,但业务需要继承AppCompatActivity,之前误以为AppCompatActivity不继承Activity
已尝试的无效方案
- 使用Stack Overflow提到的
view.getContext方案 - 按照建议清理项目缓存
- 确认Manifest与Gradle配置无错误
- Android Studio提示添加
suppress: Add tools:ignore="instantiatable" attribute,但未解决根本问题
相关代码
Manifest文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.tbgroup"> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.TBGroup" tools:targetApi="31"> <activity android:name=".SignIn" <!-- 此处Activity名称下方有报错 --> android:exported="false" /> <activity android:name=".MainActivity" <!-- 此处Activity名称下方有报错 --> android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Activity代码
MainActivity.java
package com.example.tbgroup; import android.content.Intent; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(MainActivity.this, SignIn.class); startActivity(intent); } }
SignIn.java
package com.example.tbgroup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class SignIn extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in); } }
原因分析
AppCompatActivity实际上是间接继承自android.app.Activity的(继承链:AppCompatActivity → FragmentActivity → ComponentActivity → Activity),出现这类报错并非代码逻辑问题,大概率是Android Studio的索引缓存异常,或者AppCompat依赖未正确同步。
解决方法
检查AppCompat依赖配置
打开模块级build.gradle文件,确保存在以下依赖(版本号可使用最新稳定版):implementation 'androidx.appcompat:appcompat:1.6.1'同步Gradle后再尝试构建项目。
彻底清理Android Studio缓存
点击顶部菜单栏File→Invalidate Caches...,勾选Invalidate and Restart选项,等待IDE重启并重新构建索引。重建项目
先点击工具栏的Sync Project with Gradle Files按钮完成同步,再选择Build→Rebuild Project重新编译整个项目。确认导入的AppCompatActivity包正确
检查两个Activity文件中的导入语句,确保是import androidx.appcompat.app.AppCompatActivity;,而非其他包下的同名类。临时忽略Manifest报错(应急方案)
如果上述方法均无效,可在Manifest的Activity标签中添加tools:ignore="Instantiatable"来消除红线提示,不影响应用运行:<activity android:name=".MainActivity" android:exported="true" tools:ignore="Instantiatable"> <!-- intent-filter内容 --> </activity>
内容的提问来源于stack exchange,提问作者I don't think so

