Android Webkit內(nèi)核應用層函數(shù)調(diào)用方法
Android Webkit內(nèi)核應用層函數(shù)調(diào)用方法是本文要介紹的內(nèi)容,主要是來了解并學習Android Webkit的應用,具體內(nèi)容的實現(xiàn)來看本文詳解。Android Webkit內(nèi)核JNI層與Java層 函數(shù)互相調(diào)用方法
Java層調(diào)用JNI層函數(shù):
例子:
Java層: BrowserFrame::loadurl( )
- 調(diào)用JNI別名: Nativeloadurl() ;
JNI 層:WebFrame::loadurl( ) ;
1、在JNI層定義需要用的函數(shù)WebFrame::loadurl( )
- static void LoadUrl(JNIEnv *env, jobject obj, jstring url)
2、@ 將java層中該類中的函數(shù)對應JNI層中的函數(shù),以方便調(diào)用之。
- jniRegisterNativeMethods(JNIEnv* env, const char* className,
- const JNINativeMethod* gMethods, int numMethods)
- // className :java層的類名。
- // gMethods :對應JNINativeMethod的數(shù)組。
- typedef struct {
- const char* name; //函數(shù)名(java層中聲明)
- const char* signature; // 函數(shù)參數(shù)
- void* fnPtr; // 函數(shù)指針(指向JNI層 -> WebFrame::loadurl( ) )
- } JNINativeMethod;
Eg. 將如上JNI函數(shù)使用別名:Nativeloadurl( ) (java層中聲明),存于注冊數(shù)組中。
- JNINativeMethod gMethods[]={
- { "nativeLoadUrl", "(Ljava/lang/String;)V", (void*) LoadUrl }
- ...
- }
2、在Java層中聲明并調(diào)用函數(shù):nativeLoadUrl(String url)
聲明:
- private native void nativeLoadUrl(String url);
調(diào)用:
- nativeLoadUrl(url);
JNI層調(diào)用Java函數(shù):
- 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函數(shù)及參數(shù)到 -> jmethodID中
- jmethodID msendDownloadRequest = env->GetStaticMethodID(
- mODP, "sendDownloadRequest", "(Larchermind/webkit/core/WebView;Ljava/lang/String;)V");
- // 3. 在JNI層中,通過函數(shù)調(diào)用CallStaticVoidMethod來調(diào)用java函數(shù)。
- env->CallStaticVoidMethod(mODP, msendDownloadRequest, viewcore->getWebViewJavaObject(),jUrl);
- // viewcore->getWebViewJavaObject() 為 arg1 .
- // jURL 為arg2 .
- env->DeleteLocalRef(jUrl);
- }
小結:Android Webkit內(nèi)核應用層函數(shù)調(diào)用方法的內(nèi)容介紹完了,希望通過Android Webkit內(nèi)容的學習能對你有所幫助,更多關于Android Webkit的內(nèi)容請參考編輯推薦。