2017-01-18 3 views
0

問題:ProGuardのJNI(ネイティブ文字列)では動作しませ

注:11へのアクセスがあった一緒にこのエラーのためのプロジェクトを完了することはできませんJNIには、AndroidのスタジオにProGuardのを可能に

イントロスペクションによってクラスのメンバとなる。 あなたが明示的に言及したクラスメンバー

ソースコード維持を検討する必要があります。

JNIコード:

JNIEXPORT jstring JNICALL 
Java_example_example(JNIEnv *env, jobject instance) { 

    return (*env)->NewStringUTF(env, "example"); 

} 

Javaコード:

:TRIED

public native String example(); 

を10

1)ProGuardのルールに追加します。

-keep class * { // I also tried to put the class one by one instead of * 

native <methods>; // or "*;" , "public native <methods>" , "public *;" 

} 

2)(成功裏に活動デバイス上で起動しない、ビルド)ProGuardのルールに追加します。

-ignorewarn

+0

あなたのクラス名とjavaパッケージIDを共有できますか? (おそらく問題は、あなたのJNI関数を正しい方法で宣言していないということです) –

+0

アプリケーションパッケージIDはapp.myapplication(proguardなしの完全な仕事アプリ)です。 –

答えて

0

をだから、答えは簡単です - あなたは

JNIEXPORT jstring JNICALL 
Java_app_myapplication_example(JNIEnv *env, jobject instance) { 

    return (*env)->NewStringUTF(env, "example"); 

} 
+0

すでにこれが例でしたので、私の問題はproguardを有効にしていますエラー注:イントロスペクションによってクラスメンバーにN回アクセスしました。上記のクラスメンバーを明示的に保管することを検討する必要があります –

+0

-keep class app.myapplication。* {*;}をproguard-rules.proに追加してみましたか? –

+0

FAILURE: 実行がタスクに失敗しました。:何が悪かったのか*例外で失敗しました を構築「:アプリ:transformClassesAndResourcesWithProguardForRelease」 >にjava.io.IOExceptionを:最初の上記の警告を修正してください –

関連する問題