无法从SensorEventListener本机JNI方法调用实例方法

时间:2017-11-25 11:28:56

标签: android android-ndk java-native-interface

我在本机方法中实现SensorEventListener如下(为了更快地进行计算):

public class GPSLogger extends Service
    implements SensorEventListener {

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

调用相应的JNI实现。但我试图从本机C代码调用startLocationUpdates(),如下所示:

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);

在这种情况下,methid为NULL。并且ADB日志中有一个例外

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

可能有什么不对?我甚至尝试将objcls作为

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

但同样的问题。

1 个答案:

答案 0 :(得分:0)

添加proguard规则后解决问题(防止模糊方法名称):

-keep class my.package.GPSLogger { void startLocationUpdates(); }