这里简单说一下ndk中c调用java的方法
至于ndk的环境搭建这里就不说了,有空会贴上来
java调c的感觉相对比较简单,以后有空一并贴上来,这里说下 c去回调java的代码了
首先创建工程就不说了,我们这里展开一个经典例子 helloworld 哈哈哈
第一步,在android工程中 建一个类,里面放个方法,syso一个helloworld。同时建议建立一个activity,这样可以放一个按钮,点击的时候可以看到效果
这里稍微展开下 1:写一个java方法
public void helloFromJava(){
System.out.println("helloFromJava");
}
2:写对应的native方法
static{
System.loadLibrary("Hello");
}
public native void callback1();
3:实现一下调用,放在按钮中去调用,就不说啦
4:这里需要用javah实现一下C头文件的生成,当然也可以不这么做,另外的方法我就不展开了
第二部 在ndk中建立C文件啦
#include <jni.h>
#include "com_itheima15_ndk4_DataProvider.h" //这个头文件由 jdk 中的javah生成,相信来看这个的,就不需要介绍javah怎么用了哦
//日志模块,习惯性的放一个日志模块,方便去调试
#include <android/log.h>
#define LOG_TAG "System.out"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
JNIEXPORT void JNICALL Java_com_xuchulong_ndk4_DataProvider_callback1
(JNIEnv * env, jobject obj){
//C调用java空方法
/*
* 1、 找到该方法存在哪个类中(找到存在该方法的类)
* 2、在该类中找到该方法
* 3、执行该方法
* */
char* classname = "com/xuchulong/ndk4/DataProvider";//这个是我的类名,根据自己情况放,我的helloworld就放在这个里面的
//第一步 找到该类
// jclass (*FindClass)(JNIEnv*, const char*);
jclass clazz = (*env)->FindClass(env, classname);
//第2步 在该类中找到该方法
// jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
// jclass 在那个类中查找
// const char* 查找的方法名称
// const char* 方法的签名 jdk javap -s 得到方法的签名
使用方法: javap -s 包名.类名
jmethodID method = (*env)->GetMethodID(env, clazz, "helloFromJava", "()V");
//执行该方法
//void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
(*env)->CallVoidMethod(env, obj, method);
}
好了C代码部分完成了 ndk-build一下哦,呵呵
分享到:
相关推荐
安卓app开发之NDK入门教程,JAVA代码通过JNI接口调用NDK代码(C语言编写的linux android功能).zip
Android NDK Java 调用C~~~~~~~~~~~~~
java调用C的方法 相关博客http://blog.csdn.net/lang523493505/article/details/53163679
安卓NDK入门,C与Java方法之间的互相调用,本代码很简单的Demo例子。
Easepal_NDK_C调用Java并刷新UI Easepal_NDK_C调用Java并刷新UI Easepal_NDK_C调用Java并刷新UIEasepal_NDK_C调用Java并刷新UI
本人测试总结demo,包括相互基本数据类型 和字符串类型,对象的传递,了解更多内容请关注(https://github.com/wangpengfei1992/NdkBaseDataTransfer)
android平台下基于java语言的md5加密及ndk环境下基于c语言的md5加密。
NDK开发so层与java代码相互调用
使用cywin将C++代码编译成.so文件,android动态调用。源文件包括C++源码,android所有代码,在android2.2上可以运行。
本例使用 Android studio 3.0 gradle:3.2.0 编写在 cpp 线程中调用 java 方法demo
本书顺应Android软/硬件、云计算整合潮流,详细剖析了NDK开发中涉及的各类问题和解决方案:搭建Android NDK开发环境的每一步细节,开发第一个Android NDK程序,Android NDK中Java与C/C++代码的互相调用,Facade设计...
JAVA调用C, C调用JAVA创建一个按钮 这个按钮点击后,又调用一个C函数 改编自NDK例子
android ndk 代码例子,从 HelloWorld 到java 和c 方法互相调用,学习jni的时候写的demo,例子还是很有代表性的
简单的测试android ndk demo,java与C的相互调用
ndk开发c调用java
自己在android studio 环境下集成ndk 、 cmake 、LLDB 等插件 开发的一...可以直接debug到c端代码,eclipse一般追踪不到,遇到c端出问题手机直接一个crash,,,想要了解android studio 下如何进行c 开发的可以借鉴下。
NDK开发时,C/C++调用Java的函数的一些案例; 传递int类型参数: https://blog.csdn.net/niuba123456/article/details/80978500 传递String类型参数: https://blog.csdn.net/niuba123456/article/details/80978916 ...
android ndk开发互调示例demo:包括java代码调用C,及C调用java。
C通过jni调用java的例子,里面有详细的代码和环境配置等。
Android Studio3.0开发JNI流程,C++调用Java以及Java调用C++,C++/Java互相调用一个简单案例