需要从第三方使用Android的共享库,lib的soname和文件名相同,格式为libxx.so.1.2.3,这在linux上很常见。我将lib文件重命名为libxx.so,并使用ndk-build链接libmyjni.so中的libxx.so。在我的java代码中,在调用libmyjni.so中的函数之前,我加载它们:
System.load("/data/local/tmp/libxx.so.1.2.3");
System.loadLibrary("myjni");
我必须手动将libxx.so.1.2.3复制到/ data / local / tmp /。它以这种方式运行良好,在上面加载后,我可以调用libmyjni.so中的函数。
在代码“System.loadLibrary(”myjni“);”中,系统总是试图从某个地方获取libxx.so.1.2.3。我想知道,在现实世界中,如何在安装过程中将libxx.so.1.2.3复制到Android设备上的特定位置?所以我可以System.load()它。
或者android有官方方法将自制的lib安装到/ system / lib /?
如果libxx.so.1.2.3格式为libxx.so,那么我可以使用System.loadLibrary(“xx”)加载它。
答案 0 :(得分:6)
最后我做了什么,保持libxx.so.1.2.3不受影响并用Java做所有事情:
将libxx.so.1.2.3放入android资产中。 在MainApp.OnCreate()中,将文件复制到私有文件夹并从那里加载:
AssetManager am = applicationContext.getAssets();
in = am.open(OPENSSL_SO_LIB_NAME); // source instream
File privateStorageDir = applicationContext.getFilesDir();
String libPath = privateStorageDir.getAbsolutePath(); // copy the lib to here ...
System.load(libPath + "/" + SO_LIB_NAME);