在Android本机AAR上嵌入.NET库的属性和操作

时间:2019-03-20 16:14:02

标签: android xamarin xamarin.android embeddinator

我正在将现有Xamarin.Android .NET库添加到本机Android Studio项目中。我遵循https://docs.microsoft.com/en-us/xamarin/tools/dotnet-embedding/上的指示,并且一切正常,但是我有一个不是Java专家的问题: 还可以将库中存在的C#属性和操作(例如 ReturnAnyText )导出到Java吗?

namespace export_test
{
    [Register("export_test.ClassToExport")]
    public class ClassToExport 
    {
        [Export("ClassToExport")]
        public ClassToExport()
        {
            // ...
        }

        [Export("DoSomething")]
        public void DoSomething()
        {
            // ...
        }

        public Action<string> ReturnAnyText { get; set;}
    }
}

2 个答案:

答案 0 :(得分:0)

内部的属性只是get_PropertyName()和set_PropertyName()方法。所以是的,您也应该能够导出这些内容:

这看起来像:

public bool MyProp
{
    [Export]
    get;
    [Export]
    set;
}

或者,如果您想命名它们:

public bool MyProp
{
    [Export("GetMyProp")]
    get;
    [Export("SetMyProp")]
    set;
}

答案 1 :(得分:0)

我找到的最简单的解决方案是不尝试导出C#委托,而只是在方法执行结束时返回一个包含返回值的对象:

namespace export_test
{
    [Register("export_test.ClassToExport")]
    public class ClassToExport 
    {
        [Export("ClassToExport")]
        public ClassToExport()
        {
            // ...
        }

        [Export("DoSomething")]
        public MyResult DoSomething()
        {
            // ...
        }
    }

    [Register("export_test.MyResult")]
    public class MyResult
    {
        private string _Text;
        private int _Value;

        [Export("MyResult")]
        public MyResult(string text, int val)
        {
            _Text = text;
            _Value = val;
        }

        [Export("GetText")]
        public string GetText() { return _Text; }

        [Export("GetValue")]
        public int GetValue() { return _Value; }
    }
}