需要从第三方使用Android的共享库,lib的soname和文件名是相同的,格式为libxx.so.1.2.3,这是linux上常见的。 我将lib文件重命名为libxx.so,并使用ndk-build将libxx.so链接到libmyjni.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”)加载它。
最后是我做了什么,保持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);