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

更新Gradle后运行Android应用触发AAPT错误:'TODO'与exported(boolean类型属性)不兼容,寻求解决建议

解决AAPT错误:'TODO' 与 exported 属性不兼容

嘿,这个问题根源很清晰:你在AndroidManifest.xml里给MainActivity的android:exported属性填了TODO,但这个属性必须是布尔值(true/false),再加上你的targetSdkVersion设为31(对应Android 12),系统强制要求所有带<intent-filter>的Activity必须显式声明这个属性的布尔值,这就触发了AAPT报错。

具体修复步骤:

  1. 打开你的AndroidManifest.xml,定位到MainActivity的声明块:
    <activity android:name="com.example.recyclerview.MainActivity" android:exported="TODO" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" android:set="true" />
        </intent-filter>
    </activity>
    
  2. 把android:exported="TODO"改成android:exported="true"——因为这个Activity是应用的启动页(包含MAIN和LAUNCHER的intent-filter),需要被系统外部调用,所以必须设为true。
  3. 顺便删掉<category>标签里无效的android:set="true"属性,这个属性不属于category标签的合法属性,留着可能引发其他编译问题。

修复后的代码片段:

<activity android:name="com.example.recyclerview.MainActivity" android:exported="true" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

为什么会有这个要求?

从Android 12(API 31)开始,Google为了强化应用安全性,强制要求所有带有<intent-filter>的组件(Activity、Service、BroadcastReceiver)必须显式指定exported属性:

  • 如果组件需要被外部应用或系统触发(比如启动页、分享接收页),设为true
  • 如果组件仅在应用内部使用,不需要外部访问,设为false

更新Gradle后触发这个问题,是因为Gradle升级后通常会同步更新编译SDK版本,当编译到API 31及以上时,这个强制校验就会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:18:14