第一步:创建Java方法,用于调用c层代码
public class MyJni { // 加载native-jni static { System.loadLibrary("demo"); } //java调C中的方法都需要用native声明且方法名必须和c的方法名一样 public native static String getAAString(); }
第二步:编译一下,点击Make Project,或Clean Project + Rebuild Project一下
第三步:在项目TestDemo的java文件层右击选择Open in Terminal
输入javah -jni 该类所在的包+该类名称.class,回车,会生成.h文件,如果不会生成,我重启一下电脑就好了,具体不知道什么原因
第四步:在src/main目录下创建jni文件夹,把.h文件复制到这里
第五步:在jni文件创建demo.c文件:
#include<jni.h> jstring Java_com_example_alarmmirrordemo_MyJni_getAAString(JNIEnv *env,jobject thiz){ return (*env)->NewStringUTF(env,"abcde随便写的"); }
注意:Java_com_example_alarmmirrordemo_MyJni_getAAString跟.h文件的名称一样,方法也要一样
第五步:在jni文件创建Android.mk,内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := demo//so库的名称 LOCAL_SRC_FILES := demo.c//c文件名称 include $(BUILD_SHARED_LIBRARY)
第六步:在jni文件创建Application.mk,内容如下:
APP_ABI := all
第七步:在build.gradle文件添加ndk模块:
defaultConfig {
ndk { // // 设置支持的SO库架构 moduleName "demo" abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' }
}
第八步:在main/java右击打开Terminal,或cd到java文件,如cd main/java
输入 ndk-build回车,则自动生成libs文件里的so库。(等一会儿就完成了)
第九步:调用方法:
TextView text = findViewById(R.id.tv_text); text.setText(MyJni.getAAString());
输出:“abcde随便写的”,更多的输出结果自行编写。在此记录一下,以免以后忘记