1,AS的开发工具及NDK插件包已经下载完成,并把ndk-bundle配置到环境变量中;
2,新建Android Project,不要勾选Include C++ support和Include Kotlin support
3,在MainActivity同级别下创建class文件Java2CJNI,代码如下:
public class Java2CJNI {
static {
System.loadLibrary("Java2C");
}
public native String java2C();
}
如图所示:
jni_class.png
4,在main文件夹下(也就是和java,res同级别的目录)新建jni文件
5,在Terminal窗口下进入到app/src/main/java文件夹下:
6,使用命令:javah 包名+类名的格式(如 com.town.dell.andk7.Java2CJNI)
敲下回车会在java文件夹下生成:com_town_dell_andk7_Java2CJNI.h文件,把它移 动到jni目录下
7,在jni目录下创建Java2C.c文件,如图所示:
Java2C_c.png
#include "com_town_dell_andk7_Java2CJNI.h"
JNIEXPORT jstring JNICALL Java_com_town_dell_andk7_Java2CJNI_java2C
(JNIEnv *env, jobject instance) {
return (*env)->NewStringUTF(env, "I am from C ANDK7_2_1.");
}
8,然后在jni文件夹下新建Android.mk和Application.mk文件如图所示:
Android_mk.png
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Java2C
LOCAL_C_INCLUDES := com_town_dell_andk7_Java2CJNI.h
LOCAL_SRC_FILES := Java2C.c
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
Application_mk.png
APP_PLATFORM := android-16
APP_ABI := all
9,在app.gradle文件里面的android的defaultConfig目录下加入
ndk{
moduleName "Java2C" //so文件名
abiFilters "armeabi", "armeabi-v7a", "x86", "x86_64" //CPU类型
}
和android的目录下加入
sourceSets {
main() {
jniLibs.srcDirs = ['src/main/libs']
jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程
}
}
如图所示:
app-gradle.png
10,配置好后sync new然后Build ->Rebuild Project
11,然后在Terminal窗口切换到:app/src/main/jni目录下,
Terminal_ndk-build.png
ndk-build命令生成.so架包
libs_so.png
12,在Mainactivity.java中测试:
public void clickToNative(View view) {
String result = new Java2CJNI().java2C();
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
}
click_event.png
然后运行项目,到此完成.
网友评论