android在另一个包中加载本机库

时间:2015-03-06 10:43:10

标签: java android java-native-interface

我在我的项目中添加了一个插件sdk。它需要在我的应用程序类的onCreate()中加载本机库。像这样:

package my.package.one;

public class LaunchApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        try {
            System.loadLibrary("sdklib");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

效果很好。

现在我想将所有sdk代码移动到另一个包中。我创建了一个新包并添加了一个类来做sdk的东西。我写了这样一个函数:

package my.package.two;

public class mySDKClass {
    public static void onCreate() {
        try {
            System.loadLibrary("sdklib");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

并像这样更改应用程序类:

package my.package.one;

import my.package.two.mySDKClass;

public class LaunchApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        mySDKClass.onCreate();
    }
}

然后构建并运行,我发现它报告java.lang.NoClassDefFoundError。这意味着无法从此本机库中找到类。但我查了一下日志并找到了:

03-06 18:33:30.273: D/dalvikvm(29421): Trying to load lib /data/app-lib/my.package.one-2/libsdklib.so 0x418cc310
03-06 18:33:30.283: D/dalvikvm(29421): Added shared lib /data/app-lib/my.package.one-2/libsdklib.so 0x418cc310

似乎已经加载了lib。

我不知道为什么无法在另一个包中加载本机库。 system.loadLibrary()如何工作?有没有办法做这样的事情?

感谢。

0 个答案:

没有答案