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

React Native升级0.66.2至0.68.2报错需显式指定service的android:exported

问题原因

React Native 0.68.2版本默认将Android端的targetSdkVersion升级到31,对应适配Android 12系统。从Android 12版本开始,所有配置了<intent-filter>的应用组件(包含Activity、Service、BroadcastReceiver),必须显式指定android:exported属性的取值,不再支持系统根据组件配置自动推断默认值,否则在Manifest合并阶段就会直接抛出构建失败的错误。
该报错明确指向<service>组件缺失该属性,这类问题通常由两种情况导致:一是项目引入的第三方原生依赖未适配Android 12的规则,二是项目自身代码里声明的Service没有补全对应属性。

修复方案
  • 定位问题组件
    打开Android Studio导入项目下的android目录,打开app/src/main/AndroidManifest.xml文件,点击编辑器底部的Merged Manifest标签查看所有合并后的清单文件内容,搜索未声明android:exported属性的Service,记录它的全类名和所属依赖。
  • 补全属性声明
    在你项目主模块的AndroidManifest.xml根节点先添加tools命名空间:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      package="你的应用包名">
    
    之后在<application>标签内部,对定位到的目标Service做属性覆盖,按照组件实际使用场景设置取值:
    • 若该服务不需要被其他外部应用调用,设置android:exported="false"
    • 若该服务需要响应外部应用请求、接收系统级调度或跨应用调用,设置android:exported="true"
      参考声明写法:
    <service
      android:name="定位到的Service全类名"
      android:exported="false"
      tools:node="merge"
    />
    
  • 升级适配依赖
    如果定位到问题Service来自第三方React Native原生依赖,可以优先查找该依赖是否已经发布适配Android 12、支持targetSdkVersion 31的新版本,直接升级依赖版本即可从根源解决问题,不需要手动覆盖清单属性。
  • 清理缓存重新构建
    修改完成后,在项目根目录执行清理命令:
    cd android && ./gradlew clean
    
    清理完成后回到项目根目录重新执行构建命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:09:47