2017-11-25 6 views
0

からインスタンスメソッドを呼び出すことはできません:次のように私は(速く計算を行うために)ネイティブメソッドでSensorEventListenerを実装していますSensorEventListenerネイティブJNIメソッド

public class GPSLogger extends Service 
    implements SensorEventListener { 

    public native void onSensorChanged(SensorEvent event); 
    public void startLocationUpdates() { // some code } 
} 

対応JNI実装が呼び出されます。しかし、私は次のようにネイティブCコードからstartLocationUpdates()を呼び出すようにしようとしています:methidがNULLである。この場合

jclass objcls = (*env).GetObjectClass(obj); 
jmethodID methid = (*env).GetMethodID(objcls, "startLocationUpdates", "()V"); 
if (methid == NULL) 
    __android_log_write(ANDROID_LOG_ERROR, "[IFL]", "startLocationUpdates not found"); 
else 
    (*env).CallVoidMethod(obj, methid); 

を。 ADBログに例外があります

java.lang.NoSuchMethodError: no non-static method "Lmy/package/GPSLogger;.startLocationUpdates()V" 

何が問題なのでしょうか?私はさらに、objclsを

jclass objcls = (*env).FindClass("my/package/GPSLogger"); 

と同じ問題を解決しようとしました。 (メソッド名の難読化を防ぐため)ProGuardのルールを追加した後解決

答えて

0

問題:

-keep class my.package.GPSLogger { void startLocationUpdates(); } 
関連する問題