我在我的一个应用程序中遇到问题,我有以下代码来加载应用程序所需的库(JNI):
static {
// load the JNI library
Log.i("JNI","loading JNI library...");
System.load("/data/data/com.mypackage.appname/lib/libxxxxxx.so");
Log.i("JNI","JNI library loaded!");
}
所以我得到警告:"Do note hardcode use Context.getFilesDir().getPath() instead"这是完全正确的(它不会在所有设备上都可移植)。 事实是,因为我使用的是静态代码,所以无法调用Context.getFilesDir().getPath()。
您对我该如何进行有任何想法?
您从什么得到警告?
在system.Load中,我得到:不要硬编码" / data /"; 使用Context.getFilesDir()。getPath()代替
由于棉绒警告在Eclipse中表示相同,因此到达此处。 发现了这篇文章(如果正确的话)有点令人担忧:code.google.com/p/android/issues/detail?id=43533
通常,您可以使用System.loadLibrary()来完成此操作,该方法仅使用没有路径,lib前缀或.so扩展名的库名(所有文件都会根据使用的平台自动填充)
您的警告是绝对明确的,请尝试以下方式:
进行以下课程:
public class MyApplication extends Application {
private static Context c;
@Override
public void onCreate(){
super.onCreate();
this.c = getApplicationContext();
}
public static Context getAppContext() {
return this.c;
}
}
在您的android清单中声明以上类:
接着
static {
// load the JNI library
Log.i("JNI","loading JNI library...");
System.load(MyApplication.getAppContext().getFilesDir().getParentFile().getPath() +"/lib/libxxxxxx.so");
Log.i("JNI","JNI library loaded!");
}
PS未测试
感谢您的回答,但我得到:无法从上下文类型对非静态方法getFilesDir()进行静态引用
@Joze检查我的编辑。
刚刚尝试过,但我得到了:/data/data/com.mypackage.appname/files而不是我需要的:/data/data/com.mypackage.appname/(无文件)。 有什么猜想吗?
@Joze,您应该使用getParentFile(),检查我的编辑。
完美运作。 非常感谢 ! 已验证+" +1";)
您可以从派生自Application的类中获取Context。
看一下示例,以便您可以在任何地方使用您的应用程序上下文:)
我现在要尝试。 谢谢。 病情会不断更新。