从android中的2个不同项目加载2个文件.so native lib

时间:2015-05-12 01:33:12

标签: android android-ndk java-native-interface

我有两个项目A和B.他们都使用本机代码。

现在,我将A设置为java库。

然后,将库A添加到B中。

当我运行B时,Project B无法在B中加载本机库。

请给我一个指示!

1 个答案:

答案 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");
}

以上代码是出于逻辑目的而编写的。为您的使用优化相同。