微软已宣布了.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上添加依赖项: