我有几个jni动态库(*.so),与cpu能力相关,例如,一些库支持armv7 + neon cpu,一些库支持armv7 + vfpv3 cpu,一些库支持非armv7 cpu。
如何根据CPU能力动态加载它们?
我尝试了以下代码,但不起作用。
在这个解决方案中,我将3个版本的库放在安装包中,并使用以下不同的名称: (原始名称是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");
}