Android Studio 生成so文件 及调用

作者: 天晴雨依旧 | 来源:发表于2017-12-05 17:21 被阅读275次

    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 方法

    相关文章

      网友评论

        本文标题:Android Studio 生成so文件 及调用

        本文链接:https://www.haomeiwen.com/subject/yzecixtx.html