Jni 简单实战 c调用java静态方法
来源:互联网 发布:刺客信条4低配优化 编辑:程序博客网 时间:2024/06/05 16:43
本节使用辅助类实现c调用java静态方法
1、新建CCallJava.java文件
<span style="font-size:14px;">public class CCallJava {public static TextView myTestTV =null;public static Activity myActivity=null;public static void getSay(String str){final String say=str;myActivity.runOnUiThread(new Runnable() {@Overridepublic void run() {myTestTV.setText(say);}});}public static void setTestTV(TextView testTV){myTestTV=testTV;}public static void setActivity(Activity activity){myActivity=activity;}}</span>
2、编写MainActivity.java
<span style="font-size:14px;">public class MainActivity extends Activity {public static native String getStringFromC();public static native void setClassLoaderFromInstance(Object obj);public static native void cCallJava();static{System.loadLibrary("jniStudy");}private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView=(TextView) findViewById(R.id.textview);CCallJava.setActivity(this);CCallJava.setTestTV(textView);textView.setText(getStringFromC());setClassLoaderFromInstance(this);cCallJava();}}</span>
3、在jni文件夹下新建CCallJava.cpp、CCallJava.h文件
编写CCallJava.h
<span style="font-size:14px;">#ifndef JNI_CCALLJAVA_H_#define JNI_CCALLJAVA_H_extern void say();#endif /* JNI_CCALLJAVA_H_ */</span>
编写CCallJava.cpp
<span style="font-size:14px;">#include "CCallJava.h"#include "MyJniHelper.h"using namespace Hym;void say(){JniMethodInfo t;if(MyJniHelper::getStaticMethodInfo(t,"com/hym/jni/CCallJava","getSay", "(Ljava/lang/String;)V")){jstring str;str=t.env->NewStringUTF("hello From C");t.env->CallStaticVoidMethod(t.classID,t.methodID,str);t.env->DeleteLocalRef(str);t.env->DeleteLocalRef(t.classID);}}</span>
如果 "com/hym/jni/CCallJava","getSay","(Ljava/lang/String;)V" 信息不会填写可以查看
java jni eclipse javap 函数签名
4、生成native头文件 com_hym_jni_MainActivity.h 编写JavaCallC++.cpp
<pre name="code" class="java"><span style="font-size:14px;">#include "com_hym_jni_MainActivity.h"#include "MyJniHelper.h"#include "CCallJava.h"JNIEXPORT jstring JNICALL Java_com_hym_jni_MainActivity_getStringFromC (JNIEnv *env, jclass){return env->NewStringUTF("hello jni!");}JNIEXPORT void JNICALL Java_com_hym_jni_MainActivity_setClassLoaderFromInstance (JNIEnv *, jclass, jobject obj){Hym::MyJniHelper::setClassLoaderFromInstance(obj);}JNIEXPORT void JNICALL Java_com_hym_jni_MainActivity_cCallJava (JNIEnv *, jclass){say();}</span>
运行程序会出现 hello From C
0 0
- Jni 简单实战 c调用java静态方法
- jni - c 调用java方法
- JNI native多线程调用Java静态方法
- Jni 简单实战 写一个c调用java的辅助类
- JNI调用Java中的静态非静态方法
- 关于JNI的使用(实战linux平台下java调用本地c语言方法)
- 简单的使用jni调用java方法
- 简单的使用jni调用java方法
- 简单的使用jni调用java方法
- 简单的使用jni调用java方法
- java 调用本地C/C++方法:jni
- JNI中C调用Java方法
- JNI中C调用Java方法
- JNI:JAVA调用C库方法
- JNI中C调用Java方法
- JNI中C调用Java方法
- JNI中C调用Java方法
- JNI中JAVA调用C/C++方法
- 黑马程序员-C语言基础九:指针
- 块匹配算法--全搜索
- 算法导论 第十一章:哈希表
- 黑马程序员-OC语言基础:面向对象语法 一
- 基于Halocn的图像拼接--龟兔赛跑
- Jni 简单实战 c调用java静态方法
- C++链表冒泡排序
- day01---Java基础语法--计算机知识点
- myeclipse快捷键使用
- Linux下安装mysql全过程,包括删除。
- 黑马程序员-OC语言基础:面向对象语法 二
- unity 获取某个文件夹下的所有图片
- linux c sscanf函数
- Http协议原理(一)