我在本机方法中实现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");
但同样的问题。
答案 0 :(得分:0)
添加proguard规则后解决问题(防止模糊方法名称):
-keep class my.package.GPSLogger { void startLocationUpdates(); }