Android studio 初步使用JNI(二)制作.so库

xiaoxiao2021-02-28  103

制作.so库

配置NDK环境,不明白的朋友可以去看我的上一篇文章

创建Android项目-JNIDemo

新建一个类,命名为NdkJniUtils

package test.com.jnidemo; /** * Created by wl on 2017/6/7. */ public class JniUtils { static { System.loadLibrary("JNIDemo"); } public native String getCLanguageString(); }

使用javah命令生成.h文件

点击Build–>Make Project,生成class文件

找到class文件,在app->build->intermediates->classes->debug目录下

通过javah命令生成.h头文件,点击Android Studio底下菜单中的Terminal

依次敲入:

cd app\build\intermediates\classes\debug

javah -jni test.com.jnidemo.JniUtils

如图:

注意:test.com.jnidemo为包名,请结合项目情况进行修改

在debug目录下找到test_com_jnidemo_JniUtils.h

根据生成.h头文件,新建.c或者.cpp文件,生成.so库文件

在app->src->main目录下新建一个jni文件夹,用来存c/c++的头文件以及源文件,将刚刚生成.h头文件剪切到这里

在jni文件夹下创建一个jnitest.c或jnitest.cpp文件,并写下如下代码: #include "test_com_jnidemo_JniUtils.h" JNIEXPORT jstring JNICALL Java_test_com_jnidemo_JniUtils_getCLanguageString (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"My name is Super Marie,Hi!"); } 注意:

现在已经基本完成JNI层的实现了

接下来在jni文件夹下创建Android.mk和Application.mk文件

Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := JNIDemo LOCAL_SRC_FILES := jnitest.c include $(BUILD_SHARED_LIBRARY) 其中LOCAL_PATH是C/C++代码所在目录,也就是我们的jni目录。 LOCAL_MODULE是要编译的库的名称。编译器会自动在前面加上lib,在后面加上.so。 LOCAL_SRC_FILES是要编译的C/C++文件。 Application.mk APP_ABI := all 表示生成所有平台的动态库。

配置gradle

1、在defaultConfig下,配置ndk:

ndk { moduleName "JNIDemo" // 生成的so名字 }

2、在android标签内配置sourceSets:

sourceSets { main { jniLibs.srcDirs = ['libs'] } }

如图:

3、在gradle.properties最下面加上“android.useDeprecatedNdk=true”

开始生成.so库

1.清空Termial并输入cd app\src\main,回车

2.输入ndk-build即可生成.so库

如果没有生成可以Build->Make Project一下,进行编译,生成.so库文件,路径:app->build->intermediates->ndk->debug->lib下

下篇文章将会讲怎么使用这个.so库

转载请注明原文地址: https://www.6miu.com/read-65139.html

最新回复(0)