Android Studio 生成so文件 及调用

8679次阅读  |  发布于4年以前

so文件是C、C++的函数库,在Android中 调用这些库,使用的是JNI( Java Native interface)

JNI 可以使Java程序调用本地程序或者库(一般是使用C、C++ 或者汇编语言编写)。

这篇文章 会介绍 使用Android Studio 如何生成so文件,及如何使用so

一.NDK环境安装

首先需要配置NDK 的环境,没有环境的同学,自行google或者百度,网上有很多资料。

二.JNI 开发

1.创建JniUtil类

该类的作用是定义native 接口,如下图,我们定义了一个getKey的native方法

2.生成class文件

执行gradle clean build 命令,生成class文件

查看 build\intermediates\classes\debug\包名 路径下是否存在JniUtil.class, 如果没有重新build

3.使用javah生成.h头文件

使用Tirminal或者 终端 切换目录到build\intermediates\classes\debug\ 下执行

javah -jni com.jni.demo.JniUtil (JniUtil类的路径)

会生成com_jni_demo_JniUtil.h 文件,内容如下

这个方法就对应我们在JniUtil类中定义native方法,

4.创建 jni目录

在app/main/ 路径下创建jni目录(与java目录同级),并将上面生成的com_jni_demo_JniUtil.h 文件复制到该目录下

5.创建.c文件

在jni文件中创建 JniUtil.c 文件,编辑内容如下:

6.创建Android.mk和Application.mk文件

在jni目录中创建Android.mk文件,并编辑内容如下:

LOCAL_PATH := $(call my-dir) // 不需要调整(代码所在的目录,jni目录)

include $(CLEAR_VARS) //不需要调整

LOCAL_MODULE := jniutil // 库的名称

LOCAL_SRC_FILES := JniUtil.c // 需要编译的C、C++文件

include $(BUILD_SHARED_LIBRARY)

在jni了目录下创建Application.mk 文件,编辑内容如下:

APP_ABI := armeabi armeabi-v7a x86 // 生成so文件的平台 ,设置为all, 代表所有平台

7.生成so文件

切换到main目录下 执行ndk-build 生成so文件,

这里会生成了一个libs文件夹和obj文件及,都有 so文件,我做了测试,obj 文件下的是正确的,这里还没有确定libs文件夹的作用。

三、加载so文件

1.将我们生成的so文件复制到 app下的libs文件夹下,并配置build.gradle 文件

2.使用System.loadLibrary("jniutil"); 加载so文件,可以将其写在JniUtil类中

当我们调用getKey方法的时候,实际就是调用了so库中的Java_com_jni_demo_JniUtil_getKey 方法

Copyright© 2013-2019

京ICP备2023019179号-2