CMaker我还不会用😂,用的是NDK方式
其次配置项目目录下的local.properties 文件下的ndk目录
然后配置app下的bulid.gradle
指定你要做so库的名字,和你需要支持的类型
ndk {
moduleName "hyUtils2_jni"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
首先写一个工具类,这里先声明一点,也是我踩坑的地方就是,这个工具类的地方必须跟你将来要调用so库文件的工具类的地方的包名必须一致
public class HYTools {
static {
System.loadLibrary("hyUtils2_jni");
}
public static native String getKey2();
}
写完这个类后,点击Bulid --->MakeProject 构建一下
找到这个文件的路径,然后通过命令cd 到当前com.test.test.utils所在的dbug文件夹下,
执行命令 Javah -jni com.test.test.utils.HYTools
执行完后再debug文件夹下会生成一个.h文件,内容如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include "../../../../../Library/Android/sdk/android-ndk-r16b/sysroot/usr/include/jni.h"
/* Header for class com_test_utils_HYTools */
#ifndef _Included_com_test_utils_HYTools
#define _Included_com_test_utils_HYTools
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_test_utils_HYTools
* Method: getKey1
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_test_utils_HYTools_getKey2
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
这个文件是自动生成的不需要修改
然后在src-->main-下新建一个包名为jni把上面生成的文件拷贝到当前目录
如图所示
这里忽略其他两个文件
build.gradle 里面配置android.mk构建文件
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
}
下面贴android.mk文件,其他是固定格式(我也没研究过了)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hyUtils2_jni //so库名
LOCAL_SRC_FILES := ndkdemo.c //这个文件里就要写你要做的逻辑内容了
include $(BUILD_SHARED_LIBRARY)
下面贴ndkdemo.c的文件内容,这个是个c文件大家看内容就大概知道是做什么的了
#include <jni.h>
#include "com_test_utils_HYTools.h"
JNIEXPORT jstring JNICALL Java_com_test_utils_HYTools_getKey2
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"123244343424");
}
对的,你的需要他做什么就是在这里面写的
写到这里其实已经接近成功了 ,剩下的就是重新Make Project一下了 如果没有报错的话,这个路径下就有你想要的so库文件了
拿去用就好了