我正在使用第三方库,该库具有一个带有.so文件的文件夹armeabi-v7a。 而且我正在构建一个Cordova插件,该插件使用我之前提到的库。
不幸的是,我为其构建插件的项目也具有一些jni文件,但是具有诸如arm64-v8a
,x86_64
之类的其他文件夹。
当我将项目部署到类似Samsung S6 edge的Android上时,出现以下错误:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/<bla bla>/base.apk"],nativeLibraryDirectories=[/data/app/<bla bla>/lib/arm64, /data/app/<bla bla>/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn't find "lib_so.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
at org.<bla bla>.<clinit>(SomeClass.java:22)
at lib.<bla bla>(SomeClass.java:185)
at lib.<bla bla>.SomeClass.access$200(SomeClass.java:47)
at lib.<bla bla>.SomeClass$1.run(SomeClass.java:149)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at lib.<bla bla>(AnotherClass.java:37)
我理解这是因为该库仅在一个文件夹中提供.so,而我还有其他文件夹。
有没有一种方法可以解决此问题,而无需开发图书馆的人员参与?还是那容易和/或唯一的方法? 我确实尝试将lib添加到插件项目中,但是当我尝试将lib添加到项目中时出现了dex合并错误。
Execution failed for task ':transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
答案 0 :(得分:1)
有没有一种方法可以解决此问题,而无需开发图书馆的人员参与?
恐怕答案是否。
这是因为您需要源代码才能将其编译为 64位机械臂ABI,即您的情况为arm64-v8a
。