【问题标题】:C# .dll library in Android appAndroid 应用程序中的 C# .dll 库
【发布时间】:2011-12-06 02:41:21
【问题描述】:

我目前正在使用 Monodroid 开发一个安卓应用。我对手机应用比较陌生,所以对一些事情感到困惑:

  1. 根据定义,什么是 android 库?我使用 Mono 模板创建 android 库:为 Android 类库创建 Mono => 编写代码并构建到 .dll => 使用 Visual Studio 中的模拟器运行,它在模拟器中运行良好。但是 .dll 文件是 android 库吗?还是在模拟器上工作之前由 Mono 转换,'REAL' android 库应该是 JAR?

  2. 我可以直接使用我用 C# 编写的定义的 .dll 来制作这个应用程序吗?我通过在我的 android 应用程序中直接引用它在 Mono 中进行了尝试,它正在构建,没有错误。但是当模拟器运行这个应用程序时,它卡住了(仍然没有错误)-在Android应用程序项目中使用c#.dll的正确方法是什么?

我意识到有很多话题讨论 c# 和 android 之间的链接以及关于 mono,但在阅读后我仍然无法解决这个库引用问题,所以如果有人能提供任何提示/想法将不胜感激

【问题讨论】:

    标签: c# android dll xamarin.android


    【解决方案1】:
    1. 生成的 DLL 是针对 Mono for Android profile 编译的,它基于 Moonlight(Mono 的 Silverlight 实现)。在运行时,.NET 代码直接针对以part of your application 运行的 Mono 运行时运行。当 .NET 代码从 Java 端子类化某些东西(例如 Java.Lang.Object)时,Android 的 Mono 会生成 callable wrappers 来处理运行时之间的通信。
    2. 从技术上讲,您可以在 Mono for Android 应用程序中使用普通的 .NET DLL,但我不建议这样做。 Mono for Android 公开的配置文件比完整的 .NET 框架小得多(甚至不完全等同于 Silverlight 的配置文件),因此如果您的 DLL 引用了 Mono for Android 中没有的方法,您的应用程序将崩溃。相反,我建议为您的应用程序创建一个单独的类库,并使用文件链接在项目之间共享源文件。我的blog post here 包含一个如何做到这一点的示例。

    【讨论】:

    • 在这里感谢您的回答!因此,既然 .NET 代码是针对 Mono 运行时运行的,这是否意味着 dll 只能用于 android 应用程序,前提是安装了 Monodroid SDK?因为我的主要目标不是应用程序,而是将一些 c# 库移植到 android 库并将它们提供给 android 开发人员.. 在这种情况下,这是否意味着即使我成功地使 dll 与 android 兼容,他们仍然需要 Monodroid 来做运行时包装?
    • 没错 - 使用 Mono for Android 编译的 DLL 仅对使用 Mono for Android 构建的应用程序有用。
    • 如果您想为开发人员提供一个库,那么您应该为该平台编译一个 dll。只要您只使用支持的类,您就可以支持多个平台。理论上 Math.Round 在所有平台上的工作方式完全相同。这假定 Mono 实现与所有输入的 Microsoft .NET 实现匹配(它可能会进行测试,因为他们对其进行了单元测试)。
    • @Ramhound 支持的类是什么意思?假设我正在使用 monodroid 应用程序支持的 .NET 类——也就是说,它们提供了处理这些类的包装器,我是否可以编译一个支持多平台的 dll?因为现在我认为不可能有一个对所有 android 开发人员都有价值的 dll(因为他们中的大多数人用 Java 编写他们的应用程序),而对我来说唯一的方法是使用 Monodroid 库项目将它们构建到 JAR 中,所以Java 开发人员可以使用它。你认为 dll 可以完成这项工作吗?
    • @LynnYiLu - 我所说的“支持的类”是指 Mono 支持的类。没有理由你不能完全像 Monodroid 那样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多