ndk学习17: jni之Java调用C&C++
2016-08-09 21:32
387 查看
一.Hello World1. 定义函数原型
native关键字定义的函数即为jni函数
2.生成头文件
切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录)javah -jni 包名.类名
在根目录下生成:org_bing_testjni_MainActivity.h
3. 工程中添加jni代码工程右键->添加native code->输入名字->finish
多了如下文
新建一个Application.mk,配置相关选项(详细查看ndk有关Application的说明)APP_ABI := x86APP_PLATFORM := android-14APP_STL := stlport_staticAPP_CPPFLAGS += -fexceptionsAPP_CPPFLAGS += -frtti
同时把刚刚生成的.h文件拷贝到jni目录
4. 实现native函数函数的声明已经在头文件生成了
在CPP实现上述函数:#include "org_bing_testjni_MainActivity.h"#include <stdio.h>#include <string>using namespace std;jstring JNICALL Java_org_bing_testjni_MainActivity_sayHello(JNIEnv* env, jobject obj, jstring name){ const char* pname = env->GetStringUTFChars(name, NULL); string str_info = "Hello World:"; str_info += pname; jstring ret_str = env->NewStringUTF(str_info.c_str()); // C文件使用(*env)->Fun(env,xxx,...)的方式传递 // (*env)->NewStringUTF(env, "Hello World"); return ret_str;}JNIEXPORT jint JNICALL Java_org_bing_testjni_MainActivity_Add (JNIEnv *env, jobject obj, jint a, jint b){ return a + b;}
编译在libs目录生成libTestJni.so,打包APK会自动将上述函数打包到APK
5. 在Java中使用loadLibrarystatic{ System.loadLibrary("TestJni");}
然后直接调用即可:Log.d("__BING__", sayHello("bing"));Log.d("__BING__", "5 + 3=" + Add(5,3));
运行效果:
来自为知笔记(Wiz)
native关键字定义的函数即为jni函数
2.生成头文件
切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录)javah -jni 包名.类名
在根目录下生成:org_bing_testjni_MainActivity.h
3. 工程中添加jni代码工程右键->添加native code->输入名字->finish
多了如下文
新建一个Application.mk,配置相关选项(详细查看ndk有关Application的说明)APP_ABI := x86APP_PLATFORM := android-14APP_STL := stlport_staticAPP_CPPFLAGS += -fexceptionsAPP_CPPFLAGS += -frtti
同时把刚刚生成的.h文件拷贝到jni目录
4. 实现native函数函数的声明已经在头文件生成了
在CPP实现上述函数:#include "org_bing_testjni_MainActivity.h"#include <stdio.h>#include <string>using namespace std;jstring JNICALL Java_org_bing_testjni_MainActivity_sayHello(JNIEnv* env, jobject obj, jstring name){ const char* pname = env->GetStringUTFChars(name, NULL); string str_info = "Hello World:"; str_info += pname; jstring ret_str = env->NewStringUTF(str_info.c_str()); // C文件使用(*env)->Fun(env,xxx,...)的方式传递 // (*env)->NewStringUTF(env, "Hello World"); return ret_str;}JNIEXPORT jint JNICALL Java_org_bing_testjni_MainActivity_Add (JNIEnv *env, jobject obj, jint a, jint b){ return a + b;}
编译在libs目录生成libTestJni.so,打包APK会自动将上述函数打包到APK
5. 在Java中使用loadLibrarystatic{ System.loadLibrary("TestJni");}
然后直接调用即可:Log.d("__BING__", sayHello("bing"));Log.d("__BING__", "5 + 3=" + Add(5,3));
运行效果:
来自为知笔记(Wiz)
相关文章推荐
- 【学习Android NDK开发】Java通过JNI调用native方法
- ndk学习18: JNI之C&C++调用Java
- Ndk学习之JNI调用父类方法(java-->C)
- JNI学习系列——在C/C++中调用JAVA
- Android 基于NDK的JNI开发 C调用java和java调用C的进阶教程
- NDK学习 登录逻辑 C调用java方法
- NDK Java JNI调用
- JNI的学习(Java调用C++函数,通过DLL)
- JNI学习------C语言调用Java
- 转战Android之NDK(jni, c/c++调用java)
- NDK学习 登录逻辑 C调用java方法
- android-JNI学习之java和c++相互调用
- android-JNI学习之java和c++相互调用
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- JNI学习-- C调用java方法
- JNI学习笔记3——本地方法取得Java属性/调用java方法
- Android 基于NDK的JNI开发 C调用java和java调用C的进阶教程
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- JNI学习--通过Java应用调用C语言的函数打印hello,world
- Android之NDK(jni, java调用c/c++)