我在我的某个应用中遇到问题,我有以下代码加载应用所需的lib(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()
。
您对我如何继续这样做有什么想法吗?
答案 0 :(得分:12)
您的警告绝对清楚,请尝试以下方式:
制作以下课程:
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清单中声明上面的类:
<application android:name="com.xyz.MyApplication"></application>
然后
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!");
}
P.S未经过测试
答案 1 :(得分:1)
您可以从派生自Application的类中获取Context。 看看example所以你可以在任何地方使用你的应用程序上下文:)