"GenerateJavaStubs"任务意外失败

16

我在Visual Studio中创建了一个新项目,在.xml文件中放置了两个框架布局,但在调试代码时出现了一个错误,请告诉我解决方法。

Error   1   The "GenerateJavaStubs" task failed unexpectedly.
System.InvalidOperationException: Sequence contains no elements
at System.Linq.Enumerable.Max(IEnumerable`1 source)
at Xamarin.Android.Tools.TypeNameMapGenerator.WriteBinaryMapping(Stream o, Dictionary`2 mapping)
at Xamarin.Android.Tools.TypeNameMapGenerator.WriteJavaToManaged(Stream output)
at Xamarin.Android.Tasks.GenerateJavaStubs.UpdateWhenChanged(String path, Action`1 generator)
at Xamarin.Android.Tasks.GenerateJavaStubs.WriteTypeMappings(List`1 types)
at Xamarin.Android.Tasks.GenerateJavaStubs.Run()
at Xamarin.Android.Tasks.GenerateJavaStubs.Execute()
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext()    TMS_TabletView.Droid

你能发布包含FrameLayout的.xml(.axml?)文件吗? - joe
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - user62171
10个回答

20

如果您使用了其中之一Xamarin插件,例如Plugins.Share,并且有带有[Application]标记的应用程序类,则仍可能会发生这种情况。这是因为在Nuget安装时,它将生成具有相同标记的另一个应用程序类,导致“GenerateJavaStubs”失败。

解决方案很简单,只需删除一个应用程序类/将它们合并为一个。


这几乎每次都会咬我一口。 - Curtis Shipley
我刚被迫添加了这个CrossCurrentActivity。但是如果我没有另一个Application类呢?但是我有一个设置为启动器的活动,可以作为闪屏使用吗? - Dpedrinha

5
我遇到了同样的问题,详细的错误信息是这样说的:“路径太长。名称不能超过248个字符,其他名称不能超过260个字符。”缩短项目名称解决了我的问题。

2
我的项目名称太长了。将其缩短后,一切都正常工作了。 - Paul Bullivant

5
这对我来说是在安装Xamarin Share插件后发生的(https://www.nuget.org/packages/Plugin.Share)。 我在assemblyinfo.cs文件中通过下面这行代码设置了我的Android应用程序的主题:
[assembly: Application(Theme = "@style/AppStyle.myApp")]

只需删除此行即可解决问题,然后像你应该做的那样在MainActivity中设置主题。请注意,保留HTML标记。

1
我之前有写 [assembly: Application(Debuggable = true)],但是删掉这行就解决了 :) - Wojciech Kulik
@WojciechKulik,你在尝试发布时有遇到任何问题吗(“apk是可调试的,上传失败”)? - Yohan Dahmani

3

如果您在Activity类中有构造函数,请添加默认构造函数。 或者您可以删除类中的构造函数。

这是旧的源代码。

[Activity(Label = "MyActivity", ScreenOrientation = ScreenOrientation.Portrait)]
public class MyActivity : BaseActivity
{
    bool param;

    protected override int LayoutResource
    {
        get
        {
            return Resource.Layout.myactivity;
        }
    }

    public MyActivity(bool param = false)
    {
        this.param = param;
    }

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
    }

    ...
}

这是更新后的新源代码。
[Activity(Label = "MyActivity", ScreenOrientation = ScreenOrientation.Portrait)]
public class MyActivity : BaseActivity
{
    bool param;

    protected override int LayoutResource
    {
        get
        {
            return Resource.Layout.myactivity;
        }
    }

    public MyActivity()
    {
    }

    public MyActivity(bool param = false)
    {
        this.param = param;
    }

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
    }

    ...
}

0
我遇到了这个问题,因为我的Android类库不知何故变成了Android应用程序类型 - 因此VS在项目中寻找应用程序类。
解决方案是创建一个空的Android类库,并比较项目文件。 我从损坏的项目中删除了任何与“应用程序”相关的xml标记。 例如[<]AndroidApplication>true[<]/AndroidApplication>。

0

这些答案都没能解决我的问题。以下是解决方法:

在“解决方案资源管理器”中,进入 Android 项目,右键单击 -> 属性 -> Android 选项 -> 链接器 -> 链接,选择 Sdk Assemblies Only。 另外,请确保在 Android 项目 -> 属性 -> Android 选项 -> 高级属性 -> Java Max Heap Size 中设置为1G。

enter image description here


0

我遇到了这个问题,因为我把活动事件放在了 #region 块下面。在移除 #region 块后,我的情况下一切正常运作。


0
我遇到了这个问题,是因为将一个Android库复制到了一个新项目中。Visual Studio自动为我创建了一个新的资源文件,导致项目1的资源文件和项目2的文件之间存在歧义问题。解决了这个问题后,我就不再有Java Stub错误了。我不知道这是否是解决方法,但我没有做其他任何事情,所以几乎肯定是,尽管有点奇怪。

0

我在使用Visual Studio Professional 2015(带有Xamarin)创建我的第一个应用程序时遇到了这个问题,并且得到了所有相同的错误消息。 不知道这对其他人是否有用,但我们偶然发现了一些可以解决问题的东西。

MainActivity.cs中,当您首次打开“空白应用”项目时,会有一些默认代码,但是我们已经删除了其中一些代码,并复制/粘贴了其他代码。 这是初始外观:

    namespace App3
{
    [Activity(Label = "App3", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        int count = 1;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.MyButton);

            button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); };
        }
    }
}

修复方法:我们尝试将这些行代码放回到MainActivity.cs文件中。
[Activity(Label = "App3", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        int count = 1;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.MyButton);

然后我们运行了代码,错误就消失了。可能只是个愚蠢的错误,并不总能解决问题,但对我们来说起作用了。

0

我在进行发布构建时遇到了这个错误

The "GenerateJavaStubs" task failed unexpectedly.
Nullreference Exception

重启 VS 后问题解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接