我在我的项目中添加了一个插件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()如何工作?有没有办法做这样的事情?
感谢。