【问题标题】:Xamarin: use NDK-built .soXamarin:使用 NDK 构建的 .so
【发布时间】:2013-04-09 08:12:17
【问题描述】:

我在 C 中的 Eclipse(Android 项目)上创建了两个简单的函数(设置和返回一个 int)。我使用 ndk-build 生成了一个 .so。我如何在 Xamarin 上使用这个 .so 并在我的 Xamarin.Android 项目中使用这两个函数?

谢谢!

【问题讨论】:

  • “ndk-build”的链接已损坏...

标签: build android-ndk java-native-interface xamarin


【解决方案1】:

假设我们有一个名为 MyTest.so 的共享库,并且我们希望在 Xamarin.Android 项目中使用它。 MyTest.so 包含一个函数

int MyTest_GetValue();

现在,我们需要在 Xamarin.Android 项目上使用此功能。以下是成功的步骤:

第 1 步:在 Xamarin.Android 项目中创建一个名为 lib 的新文件夹和子文件夹 armeabi。复制我的 .so 库以在 armeabi 文件夹中使用,如 here 所述

第 2 步:将 library.so(导入库)的属性设置为“AndroidNativeLibrary”,并将输出复制到“始终复制”。

第 3 步:(在 Xamarin.Android 类中工作,例如:MainActivity.cs)

  • 通过“使用 System.Runtime.InteropServices;”包含命名空间 InteropServices;

  • 使用项目中的标准DllImport导入原生库如下:

    [DllImport("MyTest.so")] 
    public extern static int MyTest_GetValue();// with exact Functtion Name, Type & Params in the .so Lib.
    

第 4 步:在应用程序中使用上述函数 (MyTest_GetValue())。

例如:

int value= MyTest_GetValue();

Console.Writeline(value.ToString());

任务完成!:D

【讨论】:

  • 你能展示一个带有 [out] 参数的示例函数吗?像 bool MyTest_GetValue(string* retVal);谢谢
  • 据我所知,使用 [out] 参数应该没有什么不同。执行第 1 步和第 2 步,然后执行包含带有 [out] 参数的函数的第 3 步,最后执行使用该函数的第 4 步应该可以正常工作。注意:Xamarin 自 2013 年以来发生了很大变化(这个问题)。
猜你喜欢
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多