Mac配置jni开发环境(二)
首页创建Android应用工程
1.Java层调用SO库
|
|
2.创建目录jni
在app/scr/main/
下,创建jni
文件目录
3.SO库配置文件
在jni目录下,创建Android.mk
文件文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jniTest
LOCAL_SRC_FILES := com_ksnowlv_hellojniforjava_JavaCallJNI.c
include $(BUILD_SHARED_LIBRARY)
其中
-
LOCAL_MODULE := JniTest
这里JniTest,是将要生成的
.so
库的名字,会自动加上 lib前缀, 最终生成库文件:libJniTest.so 如果要引用该库:System.loadLibrary(“JniTest”) -
LOCAL_SRC_FILES := com_ksnowlv_hellojniforjava_JavaCallJNI
JNI头文件com_ksnowlv_hellojniforjava_JavaCallJNI.h对应的.c文件 命名方式:包名+类名+.c
在terminal
中生成com_ksnowlv_hellojniforjava_JavaCallJNI.h头文件
ksnowlvdeMacBook-Pro:java ksnowlv$ javac com/ksnowlv/ hellojniforjava/JavaCallJNI.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
ksnowlvdeMacBook-Pro:java ksnowlv$ javah -d ../jni com.ksnowlv.hellojniforjava.JavaCallJNI
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
ksnowlvdeMacBook-Pro:java ksnowlv$ cd ..
实现文件中内容如下
#include "com_ksnowlv_hellojniforjava_JavaCallJNI.h"
JNIEXPORT jint JNICALL Java_com_ksnowlv_hellojniforjava_JavaCallJNI_showValue(JNIEnv * enc, jclass cls , jint value) {
value = value + 1;
return value;
}
4.在SO库配置文件中,添加生成SO
Application.mk
添加:
APP_ABI := all
会生成所有主流 ABI 类型的 .so 库
5.更新build.gradle文件配置
defaultConfig
下增加ndk配置
ndk {
moduleName "JniTest" //System.loadLibrary("JniTest");
}
在buildTypes上面添加jni.srcDirs
的配置
sourceSets {
main {//建议这里直接使用'libs'目录,
//因为当使用其他包有.so文件时,一般习惯也是直接拷贝进入libs目录
jni.srcDirs = ['libs']
}
6.生成so库
在终端进入jni路径:app/src/main/jni,输入ndk-build
即生成各种版本的so
|
|