之前说studio编译c代码都不用编写mk,在gradle里面配置一下就行了。很多时候都需要自己编写mk文件,比如引用别人库的时候。
需要告诉studio不要默认的编译 了。用手动编译在gradle的android里面
//用studio来的来编译
// ndk {
// moduleName "callback" //设置库(so)文件名称
// ldLibs "log"//实现__android_log_print
// abiFilters "armeabi", "armeabi-v7a", "x86"
// }
//自己用ndk build来编辑
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
改成这样,就是不让studio编译jni目录了。 直接指定一下so目录就行。
编译就需要我们用ndk-build来进行编译了。
mk的文件如下,放在jni目录就行
LOCAL_PATH := $(call my-dir)
#第一个so
include $(CLEAR_VARS)
LOCAL_MODULE := mk_callback_c
LOCAL_SRC_FILES := callback.c
LOCAL_LDLIBS :=-llog
#include $(BUILD_EXECUTABLE)
include $(BUILD_SHARED_LIBRARY)
#第二个so
include $(CLEAR_VARS)
LOCAL_MODULE := mk_callback_cpp
LOCAL_SRC_FILES := hello.cpp
LOCAL_LDLIBS :=-llog
LOCAL_DEFAULT_CPP_EXTENSION := cpp
#include $(BUILD_EXECUTABLE)
include $(BUILD_SHARED_LIBRARY)
这里把c /c++分为2个so,可以在一起。然后执行ndk-build
spc@spc-PAF4:~/programming/jni/MyApplication/callbcakdemo/src/main/jni$ ndk-build
然后自动生成lib目录和so,直接运行就可以实现了。