You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

将登录界面设为主Activity时遇报错:activity must be exported or contain an intent filter

嘿,这个问题我之前也踩过坑,其实是AndroidManifest的配置没到位导致的,咱们一步步来搞定它:

问题根源

Android系统有个硬性要求:作为启动入口的Activity,要么设置android:exported="true",要么包含指定的intent-filter。哪怕你在Run配置里手动选了这个Activity启动,系统也会因为它不符合这个规则而报错。

解决方法

你有两种可选的方案,根据你的需求选就行:

方案1:把登录Activity设为默认启动页(标准做法)

这是最推荐的方式,直接把登录Activity变成应用的默认入口。首先找到你的AndroidManifest.xml文件——就是你截图里的这个位置:
Manifest文件夹

打开后,找到登录Activity的标签,添加主入口的intent-filter,同时显式设置android:exported="true"(API 30+建议必填):

<activity
    android:name=".LoginActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

⚠️ 注意:如果原来的主Activity(比如MainActivity)也有这个intent-filter,记得把它删掉,不然你的应用会出现多个启动图标。

方案2:仅开启exported(适合临时测试)

如果你只是想临时从登录Activity启动测试,不想修改应用的默认入口,可以只给登录Activity添加android:exported="true"属性:

<activity
    android:name=".LoginActivity"
    android:exported="true">
    <!-- 这里不需要添加intent-filter -->
</activity>

这样你之前在Run配置里的设置(就是你截图的这个配置)就可以正常生效了:
Edit Configuration设置

额外小贴士
  • 对于Android 11(API 30)及以上的版本,android:exported是必填属性,不管用哪种方案,都建议显式设置这个值,避免出现兼容性问题。
  • 如果你的登录Activity不需要接收外部应用的Intent,测试完成后可以把exported改回false——但如果它是应用的默认启动入口,就必须保持true或者带有intent-filter。

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

火山引擎 最新活动