私はいくつかのjni動的ライブラリ(* .so)を持っています。これは、CPU機能に関連しています。たとえば、一部のライブラリはarmv7 + neon cpuをサポートし、一部のライブラリはarmv7 + vfpv3 cpuをサポートし、一部のライブラリは非armv7cpusをサポートします。
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関数は失敗します。
たぶん私はそれらをロードする前に元の名前にlibsの名前を変更することができます、それを行う方法は?
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");
}