【问题标题】:create a nativescript plugin for Android with compiled C files使用已编译的 C 文件为 Android 创建一个 nativescript 插件
【发布时间】:2018-10-03 00:23:35
【问题描述】:

我正在尝试创建一个nativescript插件,遵循官方文档here

我创建了我的 .aar 文件并将其复制到 platforms/android 文件夹中,当我调用我的插件类时它正在工作。我面临的问题是当我尝试调用一个加载本机库的函数时,给我一个UnsatisfiedLinkError

我已经看过这些链接12 并尝试了所有提到的选项,但似乎没有一个有效。由于这些链接已有两年历史,我想知道这些方法现在是否已弃用。

我的 tns 版本是 4.1.2,tns-android 是 4.1.3。

我已尝试将 *.so 文件添加到以下文件夹:

platforms/android
platforms/android/libs
platforms/android/libs/armeabi
platforms/android/libs/jni
platforms/android/libs/jni/armeabi
platforms/android/armeabi
platforms/android/jni
platforms/android/jni/armeabi
platforms/android/jniLibs
platforms/android/jniLibs/armeabi

如您所见,我已经根据之前的帖子尝试了所有可能的组合(我的 *.so 文件用于 armeabi 架构)

请注意,唯一不会像其他情况一样失败的情况是platforms/android/jniLibs/armeabi。在尝试这个时,我收到一个错误,告诉我在调用 tns debug android 时重复其中一个 .so 文件(合并冲突),当我调用函数时,其他文件在运行时失败

【问题讨论】:

    标签: android plugins nativescript


    【解决方案1】:

    我相信链接器错误完全来自您的本机库。您从插件到本机 Java 类的调用在这里成功,Java 到 C 似乎是问题所在。

    您是否验证了您的本机库(.so 文件)是否已成功编译,可能是通过将它们导入一个简单的 Android 应用程序?如果仍然失败,那么它与 {N} 运行时无关,但可能与 NDK 编译有关。

    【讨论】:

    • 我的插件来自一个示例项目,该项目向我展示了如何连接到第三方设备。示例项目可以加载库并且工作正常,但是当我尝试从加载其中一个库的类调用插件内部的函数时,它会失败。所以这似乎是一个 NativeScript 问题......
    • 是开源库吗?你有任何托管在 Github 中的示例吗?
    • 对不起,它不是开源的,我不允许分享。另外,我没有C文件,只有编译好的.so文件
    • *.so文件是用aar导出的吗?您是否通过验证构建日志/手动检查 ./platforms/android 文件夹来确保将您的 aar 库添加到已编译的项目中
    • 我的 *.so 文件确实也在生成的 .aar 中。关于检查平台文件夹,我的插件位于平台/临时插件文件夹中,但不是 .aar
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多