需要使用来自第 3 方的 Android 共享库,该库的 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)