我有两个项目A和B.他们都使用本机代码。
现在,我将A设置为java库。
然后,将库A添加到B中。
当我运行B时,Project B无法在B中加载本机库。
请给我一个指示!
答案 0 :(得分:0)
我假设“当我运行B时,项目B无法在B中加载本机库”,您的意思是“当我运行B时,项目B无法在A中加载本机库”。为此
1)将项目A中的so文件复制到资产文件夹
2)在项目A中有一个类来加载库。 (一些静态功能)
3)在A的库init函数中,将它们复制到系统文件夹,然后加载库。
以下是代码示例:
public static void copyFileStream(InputStream src, OutputStream dst)
{
try {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = src.read(buffer)) != -1)
dst.write(buffer, 0, bytesRead);
}catch(IOException e) {
e.printStackTrace();
}
}
public static int loadLibraries()
{
AssetManager assetManager = myContext.getAssets();
InputStream verLibIn = null;
OutputStream verLibOut = null;
verLibIn = assetManager.open("libLibrary.so");
verLibOut = myContext.openFileOutput(myContext.getFilesDir().getAbsolutePath() + "/" + "libLibrary.so", Context.MODE_PRIVATE);
copyFileStream(verLibIn, verLibOut);
verLibIn.close();
verLibOut.close();
System.load(myContext.getFilesDir().getAbsolutePath() + "/" + "libLibrary.so");
}
以上代码是出于逻辑目的而编写的。为您的使用优化相同。