6

アプリの 1 つで問題に直面しています。アプリが必要とするライブラリ (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"これは完全に正当です(すべてのデバイスで移植できるわけではありません)。問題は、 static を使用しているため、 を呼び出すことができないということです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 に答える