【问题标题】:Adding .so to Xamarin android binding library将 .so 添加到 Xamarin android 绑定库
【发布时间】:2015-09-17 17:24:36
【问题描述】:

我有一个 xamarin android 项目 (VS2015),我添加了一个 Android 绑定库项目来使用 java 库。包装器工作正常,我可以在我的应用程序项目中调用类/方法。然而,其中一个 java 类依赖于

armeabi/libjnisgfplib.so

我尝试在我的应用程序中同时添加 /Assets 和 /libs。 BuildAction = AndroidNativeLibrary,复制 = 始终。然而它找不到库,我不断得到。

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip 文件 "/data/app/com.company-1/base.apk"],nativeLibraryDirectories=[/data/app/com.company-1/lib/arm, /vendor/lib, /system/lib]]] 找不到“libjnisgfplib.so”

我在调用课程之前尝试过Java.Lang.JavaSystem.LoadLibrary("libjnisgfplib");,但我收到了同样的例外。

如何将 libjnisgfplib.so 添加到我的项目中,以便绑定库 jar 可以找到它?

【问题讨论】:

  • .so 是在/lib/ 内还是嵌套在/lib/arm/ 内?根据我的经验,您需要将 .so 文件放在其中一个二进制文件夹(armx86 等)中才能解决。
  • 它在 lib/armeabi/ 中,我也尝试过 arm/ x86/ armeabi-v7a 等。
  • 嗯,好的。下一步是远程进入设备并找到.so 文件所在的位置:adb shell -> run-as com.company-1。在应用程序文件夹中探索。也许这会有一些线索?

标签: android jar xamarin shared-libraries


【解决方案1】:

所以这对我来说完全掌握了为什么它会起作用,但要从

更改名称

libjnisgfplib.so jnisgfplib.so

工作。我假设它是 lib/libjnis 把它扔掉了,但 lib/jnis 很好。

【讨论】:

    【解决方案2】:

    您是否尝试过使用 armeabi 将 .so 文件定义为 AndroidNativeLibrary?

    <ItemGroup>
        <AndroidNativeLibrary Include="path/to/libjnisgfplib.so">
            <Abi>armeabi</Abi>
        </AndroidNativeLibrary>
    </ItemGroup>
    

    http://developer.xamarin.com/guides/android/advanced_topics/using_native_libraries/

    【讨论】:

      【解决方案3】:

      尝试使用libs\armeabi-v7a\libjnisgfplib.so。它解决了我遇到的同样问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        • 1970-01-01
        相关资源
        最近更新 更多