我今天用
Android SDK用Java创建了我的第一个原生调用.
我找到了一些例子但是与功能头部不一致.
我找到了一些例子但是与功能头部不一致.
我一直用
JNIEXPORT void JNICALL Java_com_test_Calculator_calcFileSha1 (jnienv *,jclass,jstring);
但我见过
JNIEXPORT void JNICALL Java_com_test_Calculator_calcFileSha1 (jnienv *,jobject,jstring);
属于头部不同的是获得来电者的等级.
但首选方式是什么?
从C代码我想调用一个java方法.我找到了JNI文档(Calling Instance Methods).
但我不知道第一个参数(对象)应该是什么.
我试图给出我从调用本机方法获得的类实例,该实例方法因AbstractMethodError而失败.
修复源代码:
public class TestCalc extends Activity { static { System.loadLibrary("Test"); } private void setFilesize(long size) { } }
本地图书馆:
// header #ifdef __cplusplus extern "C" { #endif JNIEXPORT void JNICALL Java_com_test_TestCalc_calcFilesize (jnienv *,jstring); void setFilesize(const INT_64 size); #ifdef __cplusplus } #endif #endif // code jnienv * callEnv; jobject callObj; JNIEXPORT void JNICALL Java_com_test_SHA1Calc_calcFileSha1 (jnienv * env,jobject jobj,jstring file) { callEnv = env; callObj = jobj; [...] } void setFilesize(const INT_64 size) { jmethodID mid; jclass cls; cls=callEnv->FindClass("com/test/TestCalc"); mid=callEnv->getmethodID(cls,"setFilesize","(J)V"); if (mid == 0) { __android_log_print(ANDROID_LOG_DEBUG,DEBUG_TAG,"NDK:LC: [%s]","Cannot find method setFilesize"); return; } callEnv->ExceptionClear(); callEnv->CallVoidMethod(callObj,mid,size); if(callEnv->ExceptionOccurred()) { callEnv->ExceptionDescribe(); callEnv->ExceptionClear(); } }
感谢您的任何建议.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。