2017-01-18 58 views
0

問題:proguard的不使用JNI(本地字符串)工作

使得在Android工作室proguard的共同JNI不可能完成,因爲這個錯誤的項目:

注:共有11訪問班級成員通過自省。 你應該考慮明確保持提到的類成員

源代碼如下:

JNI代碼:

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

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

} 

java代碼:

public native String example(); 

嘗試:

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

application package id是app.myapplication(應用程序完全沒有proguard的工作) –

回答

0

所以答案很簡單 - 你需要像這樣改變C函數:

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

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

} 
+0

已經和所以這是一個例子,我的問題是啓用proguard(與jni顯示錯誤注意:通過內省有N次訪問類成員,您應該考慮明確地保留提到的類成員 –

+0

您是否嘗試添加:-keep class app.myapplication。* {*;}到您的proguard-rules.pro? –

+0

失敗:建立失敗,一個異常 *出了什麼問題。 執行失敗的任務「:應用程序:transformClassesAndResourcesWithProguardForRelease」。 > java.io.IOException異常:請首先糾正上述警告 –