6

我在我的一个应用程序中遇到问题,我有以下代码来加载应用程序需要的库(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().

您对我如何继续这样做有任何想法吗?

4

2 回答 2

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

PS 未测试

于 2013-03-05T09:19:12.480 回答
1

您可以从派生自 Application 的类中获取 Context。看看例子所以你可以在任何地方使用你的应用程序上下文:)

于 2013-03-05T09:19:40.687 回答