Android在运行时从存储文件夹(.so)加载已编译的本机库

Android在运行时从存储文件夹(.so)加载已编译的本机库,android,ffmpeg,Android,Ffmpeg,我在我的应用程序中使用FFmpeg,因此我需要为用户提供一种在应用程序内部运行时加载其版本的FFmpeg的方法。下面是一个应用程序“Bandlab”的例子 我试图用 System.load(PATH_TO_LIBRARY); 但这会使我的应用程序崩溃,日志如下: E/AndroidRuntime(22353):致命异常:主 E/AndroidRuntime(22353):进程:com.insync.loopad,PID:22353 E/AndroidRuntime(22353):java.l

我在我的应用程序中使用FFmpeg,因此我需要为用户提供一种在应用程序内部运行时加载其版本的FFmpeg的方法。下面是一个应用程序“Bandlab”的例子

我试图用

System.load(PATH_TO_LIBRARY);
但这会使我的应用程序崩溃,日志如下:

E/AndroidRuntime(22353):致命异常:主 E/AndroidRuntime(22353):进程:com.insync.loopad,PID:22353 E/AndroidRuntime(22353):java.lang.unsatifiedLinkError:dlopen 失败:库 “/storage/emulated/0/Android/data/com.insync.myApp/files/FFmpeg/libavcodec.so” 需要或打开的 “/apex/com.android.runtime/lib64/libnativeloader.so”不可访问 对于命名空间“classloader命名空间”


我在这里读到,在运行时加载编译后的本机库。所以我想知道这个应用程序是如何做到这一点的?有人能帮我吗?

这与我的问题无关?需要更多信息。检查手机上的架构“adb shell cat/proc/cpuinfo | grep rch”。常见输出:架构7->32位或架构8->64位。检查您是否为此体系结构提供了库版本。此外,请检查是否为以下ABI列表提供了库:armeabi-v7a arm64-v8a x86 x86_64。另外,这个问题可能会有帮助。我使用的是符合arm64-v8a标准的。因此,使用arm64-v8a手机的文件,原因是android不允许您在文章中看到的apk之外以语法方式加载LIB,所以我想知道这些公司是如何做到这一点的。据我所知,这是android 7.0以来不可能做到的。您是否尝试在您提到的应用程序中加载自定义ffmpeg版本?有可能他们在安卓7之前实现了它,并将其留在那里,但实际上它已经不起作用了。