本文共 1350 字,大约阅读时间需要 4 分钟。
例如:
//声明一个本地方法
public native String helloFromC();
#include<stdio.h>
#include<stdlib.h>
//必须引入jni.h的头文件,因为后面声明的方法中,会引用到jni.h中的类型;
#include<jni.h>
/**
* Java_com_atguigu_jnihelloworld_MainActivity_helloFromC
* Java_类名(完整的类名,需要把.替换成_)_方法名
*
* JNIEnv* env:JNINativeInterface**(JNINativeInterface结构体的二级指针)
* (**env).GetVersion 调用结构体方法
* (*env).等价于env->所以(**env).等价于(*env)->
* jobject obj:java中调用此方法的对对象。当前是:MainActivity.this对象
*/
jstring Java_com_atguigu_jnihelloworld_MainActivity_helloFromC(JNIEnv* env,jobject obj){
// jstring (*NewStringUTF)(JNIEnv*, const char*);
char* text = "hello from C!!!";
//(**env).NewStringUTF(env,text);
return (*env)->NewStringUTF(env,text);
}
1、进入到工程目录下:cd /d D:\jni_workspace\JNIHelloWorld
2、输入命令:ndk-build
报错,原因是还没有Android.mk文件
在jni目录创建Adroid.mk文件,把文档内容复制到文件中:
内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY)
稍微修改Android.mk如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := atguigu
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
再次执行编译命令:ndk-build
如图编译成功:
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。