2013-03-05 11 views
6

私のアプリの問題に直面しています。アプリケーションに必要なlib(JNI)をロードする次のコードがあります。JNI loading:警告:Context.getFilesDir()。getPath()を代わりに使用しないでください

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

あなたは何から警告を受け取りますか? – EJP

+0

私はsystem.Loadの中で: "/ data /"をハードコードしないでください; Context.getFilesDir()。getPath()を代わりに使用してください – Joze

+0

Eclipseで同じことを言うリント警告のためにここに到着しました。正しく表示されている場合は、少し心配です。https://code.google.com/p/android/issues/detail?id=43533 – brandall

答えて

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

+0

回答ありがとうございます。非静的メソッドへの静的な参照を作成できませんContext – Joze

+0

からのgetFilesDir()@Joze自分の編集を確認してください。 – NullPointer

+0

ちょうど試しましたが、私は必要なものの代わりに/data/data/com.mypackage.appname/filesを取得します:/data/data/com.mypackage.appname/(ファイルなし)。 推測できますか? – Joze

1

をテストしていないあなたは、アプリケーションから派生したクラスからコンテキストを取得することができます。 exampleを見てくださいどこでもアプリケーションコンテキストを使用できます:)

+0

私は今すぐ試してみるつもりです。ありがとう。私はあなたの更新を保つつもりです。 – Joze

関連する問題