主要用来学习jniRegisterNativeMethods函数
http://mobile.51cto.com/widget-290464.htm
Android Webkit内核应用层函数调用方法是本文要介绍的内容,主要是来了解并学习Android Webkit的应用,具体内容的实现来看本文详解。Android Webkit内核JNI层与Java层 函数互相调用方法
Java层调用JNI层函数:
例子:
Java层: BrowserFrame::loadurl( )
- 调用JNI别名: Nativeloadurl() ;
JNI 层:WebFrame::loadurl( ) ;
1、在JNI层定义需要用的函数WebFrame::loadurl( )
- static void LoadUrl(JNIEnv *env, jobject obj, jstring url)
2、@ 将java层中该类中的函数对应JNI层中的函数,以方便调用之。
- jniRegisterNativeMethods(JNIEnv* env, const char* className,
- const JNINativeMethod* gMethods, int numMethods)
- // className :java层的类名。
- // gMethods :对应JNINativeMethod的数组。
- typedef struct {
- const char* name; //函数名(java层中声明)
- const char* signature; // 函数参数
- void* fnPtr; // 函数指针(指向JNI层 -> WebFrame::loadurl( ) )
- } JNINativeMethod;
Eg. 将如上JNI函数使用别名:Nativeloadurl( ) (java层中声明),存于注册数组中。
- JNINativeMethod gMethods[]={
- { "nativeLoadUrl", "(Ljava/lang/String;)V", (void*) LoadUrl }
- ...
- }
2、在Java层中声明并调用函数:nativeLoadUrl(String url)
声明:
- private native void nativeLoadUrl(String url);
调用:
- nativeLoadUrl(url);
JNI层调用Java函数:
- void Download::transportUrl(WebCore::FrameView* view, WebCore::String url)
- {
- WebViewCore* viewcore = WebViewCore::getWebViewCore(view);
- JNIEnv* env = JSC::Bindings::getJNIEnv();
- jstring jUrl = env->NewString(url.characters(), url.length());
- // 1. 获得Java该类的 jclass对象
- jclass mODP = env->FindClass("archermind/webkit/Observor/ODP");
- // 2. 通过该对象,取得相应java函数及参数到 -> jmethodID中
- jmethodID msendDownloadRequest = env->GetStaticMethodID(
- mODP, "sendDownloadRequest", "(Larchermind/webkit/core/WebView;Ljava/lang/String;)V");
- // 3. 在JNI层中,通过函数调用CallStaticVoidMethod来调用java函数。
- env->CallStaticVoidMethod(mODP, msendDownloadRequest, viewcore->getWebViewJavaObject(),jUrl);
- // viewcore->getWebViewJavaObject() 为 arg1 .
- // jURL 为arg2 .
- env->DeleteLocalRef(jUrl);
- }
小结:Android Webkit内核应用层函数调用方法的内容介绍完了,希望通过Android Webkit内容的学习能对你有所帮助,更多关于Android Webkit的内容请参考编辑推荐。