NativeScript支持在Android平台上使用.so文件吗?

3

最近我们正在使用nativescript构建一个应用程序,并且需要使用一个提供IOS和Android SDK的第三方库。但是即使我们将.so文件推送到lib文件夹中,仍然失败了,错误是在应用程序运行期间库无法找到预期的.so文件。
所以我想知道nativescript是否支持.so文件以及如何使其正常工作? 谢谢。


您可以在 {N} Google 群组 中了解更多关于此主题的内容。 - Neli Chakarova
3个回答

1

目前在tns CLI中还没有自动化这个任务,但是将您的*.so文件复制到<project>/platforms/android/libs/jni/armeabi-v7a和/或<project>/platforms/android/libs/jni/x86目录中应该是可行的。 Gradle构建尊重这些文件夹,*.so文件将包含在*.apk包中。


将*.so文件复制到jni/arm64-v8a、jni/armeabi-v7a和jni/x86文件夹中一度有效,但当我将tns核心模块升级到最新版本后,它停止工作了。如果我有jni文件夹,则Android应用程序在启动时会崩溃而没有任何错误提示。 - Karthik Sankar

1
更好的推送.so和.jar文件的方法是使用Android Studio将它们重新打包成.aar文件,然后将包装的.aar文件复制到nativescript platform/android/libs文件夹中。以下是将SDK .jar和.so文件打包成aar文件的步骤:
1. 在Android Studio中创建一个带有空白活动的应用程序。 2. 创建一个新的包装器模块yoursdkwrapper(New->New Module->Android Library)。 3. 将SDK .jar文件复制到MyApplication\yoursdkwrapper\libs文件夹中。 4. 在MyApplication\yoursdkwrapper\src\main\文件夹下创建以下目录结构,并将.so文件复制到每个架构文件夹中:jniLibs/arm64-v8a、jniLibs/armeabi、jniLibs/armeabi-v7a、jniLibs/x86。 5. 在MyApplication\epos2wrapper\build\outputs\aar中将生成yoursdkwrapper-debug.aar文件。

0
除了Karthik Sankar的回答之外,还需要补充一点。 我的*.so文件已经被复制到应用程序中,但没有被引用。
在这种情况下,您需要手动引用它们,像这样: java.lang.System.loadLibrary("avcodec");
要检查*.so文件是否被复制,请使用Native Libs Monitor应用程序。
ReLinker也可能有所帮助
详见https://github.com/bytedeco/javacpp-presets/issues/303

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接