【转载】Android之webkit内核JNI层与Java层 函数互相调用方法
2014-11-04 20:51
633 查看
转自:http://blog.csdn.net/weiyouyin/article/details/5739659
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内核JNI层与Java层 函数互相调用方法
- Android中java和javascript方法的互相调用示例
- (转载)Java:int 和 String 互相转换的多种方法
- Android中WebView实现Javascript调用Java类方法
- Android的Webview中,javascript如何调用java方法
- android webview中js与java互相调用
- 转载:JavaScript 调用后台方法和函数的方法
- 获取Android的Java源代码并在Eclipse中关联查看的最新方法《转载》
- Android 中Java 和C/C++的相互调用方法
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- 利用WebView通过javascript调用android java方法
- webkit里网页调用android的方法(函数)
- 2011/06/13 android使用html做UI的方法---js与java的相互调用
- Android 在JNI中执行Java方法--C/C++调用Java
- JavaScript调用java方法——dwr步骤(有的地方是转载地)
- Java调用WebService的各种方法总结(转载)
- Android java 与 javascript互访(相互调用)的方法例子
- C#调用存储过程的方法,和简单存储过程创建的方法实例。【转载】为入门的朋友引路,大家互相学习。
- paip.java-asp-php-.net互相调用方法大总结
- Android中WebView实现Javascript调用Java类方法