android studio里面编译C文件生成so文件

刚开始接触安卓就遇到了编译c文件生成so文件的问题,在这里总结一下自己摸索了好久的经验
第一步 配置NDK
可以在tools-SDKmanager-android SDK -SDK Tools里面下载或者自己从网上下载
之后配置ndk的环境
android studio里面编译C文件生成so文件
android studio里面编译C文件生成so文件
如果安装顺利的话,在local.properities里面就有ndk的配置
android studio里面编译C文件生成so文件
第二部 进行JNI开发
首先建一个Java文件, System.loadLibrary(“”)引号中的是你要生成库的名字,不加后缀.so
android studio里面编译C文件生成so文件
类里面调用C的方法必须要用native声明,而且方法名也要和C中的一样,然后make project
在项目的app\build\intermediates\classes\debug\NativeJNI中看到NativeJNI.class
android studio里面编译C文件生成so文件
之后再AS的命令行里面生成.h文件
D:\Android\AndroidStudioProjects\JNIStudy2\app\src\main>javah -d jni -classpath C:Users\dell\AppData\local\Android\sdk\platforms\android-28\android.jar;
….\build\intermediates\classes\debug NativeJNI
这是一种方法,classpath后面是你的sdk路径,这个是没问题
网上还有一种方法,就是javah -classpath . -jni NativeJNI命令(此处填你自己刚刚生成的class路径) 也可以生.h文件
https://blog.csdn.net/qq_36788768/article/details/59487103
android studio里面编译C文件生成so文件
之后在main里面创建jni文件,把刚才生成的h文件粘贴到里面,再新建一个C文件,主要实现h文件里面的方法
JNIEXPORT jstring JNICALL Java_NativeJNI_helloJNI
(JNIEnv *env , jclass j){
return (*env)->NewStringUTF(env, “Hel!”);
}
之后再jni目录下创建android.mk和Application.mk
Android.mk的内容:
LOCAL_PATH := (callmydir)include(CLEAR_VARS)

LOCAL_MODULE := huazict
LOCAL_SRC_FILES := com_xiezhong_jniTest_JNIUtlils.c

include $(BUILD_SHARED_LIBRARY)

**LOCAL_MODULE是要编译的库的名字,编译器会自动加上lib的前缀和.so的后缀
LOCAL_SRC_FILES是要编译的C/C++文件**

Application.mk内容:

APP_ABI := all

这些都完成后我们开始配置gradle:
android studio里面编译C文件生成so文件
jni.srcDirs = [ ]一定要加上,这样就不会自动编译了,用的是我们自己的mk文件
之后进入app\src\main下,进行ndk-build
android studio里面编译C文件生成so文件
之后so文件就生成了
android studio里面编译C文件生成so文件