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

Xamarin非主Activity配置IntentFilter报java.exe exited with code 1错误

问题描述

学习Xamarin中Action工作机制过程中,给Activity添加IntentFilter配置时项目构建报错java.exe exited with code 1。
经测试:相同的IntentFilter配置在标记MainLauncher=true的主启动Activity中可正常编译,将同类配置添加到其他非主Activity时就会编译失败。检索相关技术资料未找到对应解决方案。

可正常构建的代码
namespace XamarinLearningField
{
    [Activity(Label = "SomeApp", Theme = "@style/AppTheme", MainLauncher = true)]
    [IntentFilter(new[] { Intent.ActionView },
        Categories = new[] { Intent.CategorySampleCode, "my.custom.category" })]
    public class MainActivity : AppCompatActivity, Android.Views.View.IOnClickListener
    {
        TextView tvName;
        Button btnName;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);

            tvName = (TextView)FindViewById(Resource.Id.tvName);
            btnName = (Button)FindViewById(Resource.Id.btnName);
            btnName.SetOnClickListener(this);

            Button btnTime = (Button)FindViewById(Resource.Id.btnTime);
            Button btnDate = (Button)FindViewById(Resource.Id.btnDate);

            btnTime.SetOnClickListener(this);
            btnDate.SetOnClickListener(this);
        }
    }
}
构建失败的代码
{
    [Activity(Label = "Data/Time info", MainLauncher = false)]
    [IntentFilter(new[] { "en.startandroid.intent.action.showtime","en.startandroid.intent.action.showdate" },
        Categories = new[] { Intent.CategoryDefault })]
    public class InfoActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Info_ActivityLayout);

          
            Intent intent = this.Intent;
            String action = intent.Action;
            String format = "", textInfo = "";

            if (action.Equals("en.startandroid.intent.action.showtime"))
            {
                format = "HH:mm:ss";
                textInfo = "Time: ";
            }
            else if (action.Equals("en.startandroid.intent.action.showdate"))
            {
                format = "dd.MM.yyyy";
                textInfo = "Date: ";
            }

            ...
    }
}
故障原因与修复方案

报错和是否为主启动Activity没有直接关系,代码存在两个会触发编译失败的问题:

  1. InfoActivity的Label属性值包含非法字符/。Xamarin在编译阶段会根据Activity特性生成AndroidManifest.xml清单文件,Label值中的斜杠会破坏清单文件的XML结构合法性,最终导致java编译器执行失败。
  2. 失败代码片段中的InfoActivity类外层缺少正确的命名空间包裹,类定义直接放在孤立的大括号块中,会导致Xamarin生成Java代理类时找不到正确的类路径,触发编译错误。

修复步骤:

  • 移除Label中的斜杠,替换为合法字符,例如将Label = "Data/Time info"修改为Label = "Date & Time info"
  • 给InfoActivity补上和项目一致的命名空间,移除类外层多余的孤立大括号,保证类定义的结构和主Activity一致。

修正后的InfoActivity代码结构参考:

namespace XamarinLearningField
{
    [Activity(Label = "Date & Time info", MainLauncher = false)]
    [IntentFilter(new[] { "en.startandroid.intent.action.showtime","en.startandroid.intent.action.showdate" },
        Categories = new[] { Intent.CategoryDefault })]
    public class InfoActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Info_ActivityLayout);

          
            Intent intent = this.Intent;
            String action = intent.Action;
            String format = "", textInfo = "";

            if (action.Equals("en.startandroid.intent.action.showtime"))
            {
                format = "HH:mm:ss";
                textInfo = "Time: ";
            }
            else if (action.Equals("en.startandroid.intent.action.showdate"))
            {
                format = "dd.MM.yyyy";
                textInfo = "Date: ";
            }

            // 剩余业务逻辑
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:54:27