我有几个jni动态库(*.so),它们与cpu能力有关,例如,一些库支持armv7+neon cpu,一些库支持armv7+vfpv3 cpu,一些库支持非armv7 cpu。
如何根据 CPU 能力动态加载它们?
我尝试了以下代码,但不起作用。
在这个解决方案中,我在安装包中放入了 3 个不同名称的 libs 版本:(原名为 libavcodec.so)
- libavcodec_neon.so 和 libavutil_neon.so
- libavcodec_vfpv3.so 和 libavutil_vfpv3.so
- libavcodec_basic.so 和 libavutil_basic.so
但是 libavcodec.so 依赖于 libavutil.so,所以 loadLibrary 函数会失败,因为它的名字被改变了。
也许我可以在加载它们之前将库重命名为原始名称,该怎么做?
String cpu_ability = getCpuAbility();
if (cpu_ability.equals("cpuinfo_armv7_neon")) {
System.loadLibrary("avutil_neon");
System.loadLibrary("avcodec_neon");
}
else if (cpu_ability.equals("cpuinfo_armv7_vfpv3")) {
System.loadLibrary("avutil_vfpv3");
System.loadLibrary("avcodec_vfpv3");
}
else {
System.loadLibrary("avutil_basic");
System.loadLibrary("avcodec_basic");
}