1、首先先创建一个普通的Android项目,
2、创建一个JniTest类,并且在类中创建native方法;
3、使用javaH生成.h文件,步骤如下:
打开Terminal,进入到工程的main目录下 输入一下命令
然后就会在java目录下面生成com_yyz_test_jnidemo_JniTest.h
文件,然后在main目录下面创建一个jni文件夹,把此文件拷贝到jni目录下面,可以重新命名JniTest.h(可以根据个人爱好命名),如图
4、在jni目录下面根据JniTest.h创建对应的C文件,c文件中的内容如下:
#include
#include
#include "JniTest.h"
JNIEXPORT jstring JNICALL Java_com_yyz_test_jnidemo_JniTest_getHello
(JNIEnv *env,jobject object){
return (*env)->NewStringUTF(env,"hello world From C");
}
5、创建Android.mk文件,内容如下:
前两项是固定写法,LOCAL_MODULE必须和JniTest中的sayJni保持一致,LOCAL_SRC_FILES 代表c文件的名称 ,include $(BUILD_SHARED_LIBRARY)固定写法
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sayJni
LOCAL_SRC_FILES := c_test.c
include $(BUILD_SHARED_LIBRARY)
6、在项目App根目录下面创建CMakeLists.txt,文件内容如下:
cmake_minimum_required(VERSION 3.4.1)
add_library(# Sets the name of the library.
# 设置so文件名称.
sayJni
# Sets the library as a shared library.
SHARED
# 设置这个so文件为共享.
# Provides a relative path to your source file(s).
# 设置这个so文件为共享.
src/main/jni/c_test.c)
find_library(# Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
target_link_libraries(# Specifies the target library.
# 制定目标库.
sayJni
# Links the target library to the log library
# included in the NDK.
${log-lib} )
7,在App中的build.gradle文件中defaultConfig添加
ndk{
moduleName"sayJni"
}
externalNativeBuild {
cmake {
cppFlags""
//生成多个版本的so文件
abiFilters'arm64-v8a','armeabi-v7a'
}
}
在android下面添加
externalNativeBuild {
cmake {
path"CMakeLists.txt" //编译后so文件的名字
}
}
具体如下图所示:
网友评论