您的位置:首页 > 编程语言 > C语言/C++

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: