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

将项目从VS2019(Professional 16.11.0)迁移至VS2022(Community)后遇Android 12+ `android:exported`配置错误及java.exe退出码1问题求助

解决Xamarin.Android迁移到VS2022后Android 12+的android:exported问题及java.exe exited with code 1错误

我来帮你搞定这个迁移后碰到的Android兼容性问题!你遇到的情况其实是Android 12(API 31)及以上版本的强制安全规则导致的——所有带有<intent-filter>的组件(Activity、Service、Receiver、ContentProvider)都必须显式指定android:exported属性,你只设置了Receiver肯定不够,这就是为啥没生效的原因,另外那个java.exe exited with code 1错误基本是Manifest不合法引发的编译失败,咱们一步步来解决:

1. 全面检查并修复所有带Intent Filter的组件

打开你的AndroidManifest.xml,挨个排查以下组件,确保每个带<intent-filter>的都加上android:exported:

  • 主Activity/其他带启动Intent的Activity:比如带<action android:name="android.intent.action.MAIN" />的启动页,一般要设为android:exported="true"(因为要被系统启动)
  • Services:如果你的服务有对外的Intent Filter,同样要显式设置这个属性
  • Receivers:除了你已经设置的,再确认所有带Intent Filter的Receiver都没漏掉
  • ContentProviders:如果有对外暴露的Provider,也要检查

举个正确的示例:

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

<receiver android:name=".BootCompletedReceiver"
          android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

2. 别忘了处理代码中特性生成的Manifest内容

Xamarin会自动从代码里的[Activity]、[BroadcastReceiver]等特性生成Manifest内容,如果你代码里没设置Exported属性,自动生成的部分就会缺这个字段,也会导致问题。

检查你的代码组件:

  • Activity示例:
[Activity(Label = "@string/app_name", Exported = true, MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
    // 你的代码逻辑
}
  • BroadcastReceiver示例:
[BroadcastReceiver(Exported = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class BootCompletedReceiver : BroadcastReceiver
{
    // 你的代码逻辑
}

小贴士:如果组件只在App内部使用,不需要对外暴露,可以设为Exported = false,但只要有Intent Filter,就必须显式设置这个属性,不能省略。

3. 解决java.exe exited with code 1错误

当你把所有android:exported的问题修复后,这个错误大概率会自动消失。如果还是存在,试试这几个操作:

  • 清理并重建项目:右键项目 → Clean,然后右键 → Rebuild
  • 手动删除bin和obj文件夹:找到项目目录下的这两个文件夹删掉,再重新编译(有时候缓存会搞事情)
  • 检查SDK和目标框架:确认VS2022里安装了API 31及以上的Android SDK,并且项目的目标框架设置为Android 12+(项目属性 → Android Manifest → 目标框架)
  • 更新Xamarin.Android包:在NuGet包管理器里,把Xamarin.Android相关的包更到最新稳定版本

4. 验证最终生成的Manifest

编译后,你可以去obj\Debug\android\AndroidManifest.xml这个路径看最终生成的Manifest文件,确认所有带Intent Filter的组件都有android:exported属性,没有遗漏。

要是做完这些还没解决,可以把生成的Manifest内容和详细的编译错误日志贴出来,这样能更精准定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:27:47