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のルールを追加した後解決