在原生Android中嵌入C#

微软已宣布了.NET Embedding,以便在Android应用程序中使用C#库。

更多了解:C#

如果预览技术似乎有问题,您还可以使用Xamarin.Android嵌入C#。

这是基本的依赖关系结构。箭头表示“依赖”关系:

App模块使用ServiceFactory提供的Kotlin IHelloService的实现。 ServiceFactory提供了C#HelloXamarinService类的Android可调用包装器。

更多了解:Android

设置

在Android Studio一侧,创建具有以下三个模块的应用程序:

App
Xamarin
XamarinInterface

Xamarin模块构建并集成了C#依赖项。

XamarinInterface模块提供了特征和实现之间的分离。

在Xamarin方面,创建一个包含三个项目的应用程序:

XamarinDependency.Application
XamarinDependency.Library
XamarinDependency.BindingsLibrary

专家提示:抵制使用.App后缀您的应用程序项目的冲动。 MacOS会将文件夹视为Finder中的应用程序包。

Gradle XamarinInterface模块

创建一个Kotlin IHelloService接口,稍后将在C#中实现。

package com.roydammarell.xamarininterface

interface IHelloService {
fun createHello(): String
}

将此模块保持在尽可能低的级别,并且具有最小的依赖性。

Android依赖项将需要Xamarin中相应的Nuget软件包。特别是如果那些依赖项包含资源。

更多了解:C#

Xamarin BindingsLibrary项目

此C#项目接受一个jar文件,该jar文件包含接口模块类的JVM字节码。

更多了解:Android

它为Kotlin接口和抽象类生成Managed Callable Wrappers。

该项目仅需要作为依赖项存在。

Xamarin库项目

此C#项目提供Kotlin接口的实现。

在绑定库上添加项目依赖项,然后在此处创建HelloXamarinService。

using System;
using Android.Runtime;
using Com.Roydammarell.Xamarininterface;

namespace XamarinDependency.Library
{
[Register(“com/roydammarell/xamarindependency/HelloXamarinService”)]
public class HelloXamarinService : Java.Lang.Object, IHelloService
{
public string CreateHello()
{
return “Hello Xamarin!”;
}
}
}

要生成Android可调用包装,HelloXamarinService必须派生自Java.Lang.Object。抽象类也可以在这里工作。

使用RegisterAttribute定义Android Callable Wrapper的完整类名。

ExportAttribute还为方法生成一个Android Callable Wrapper。但是,实现托管可调用包装程序将允许组合使用C#/ Kotlin堆栈跟踪。

Xamarin应用项目

此C#项目将生成一个APK,我们将其解压缩并合并到我们的Android Studio APK中。

在项目设置中,添加对Xamarin库项目的依赖关系。将TargetFrameworkVersion与您的Gradle compileSdkVersion匹配。

compileSdkVersion为26将对应于v8.0的TargetFrameworkVersion。

更多了解:C#

禁用使用最新的平台SDK。使用共享的Mono运行时禁用。如果要使用仿真器,请启用x86支持。

在.csproj中:

v8.0
false
false
armeabi-v7a;x86

Gradle Xamarin模块

在此配置MSBuild C#构建。这里是完整的示例build.gradle(链接)。

在XamarinInterface模块和mono.android.jar上添加依赖项:

详情参阅http://viadean.com

发布了237 篇原创文章 · 获赞 25 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/jiyotin/article/details/105021827