bre*_*one 6 linux java-native-interface android
需要从第三方使用一个共享的lib for 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");
Run Code Online (Sandbox Code Playgroud)
我必须手动将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")来加载它.
最后我做了什么,保持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);
Run Code Online (Sandbox Code Playgroud)