.mk文件编译c语言.so文件,Android Studio 生成so文件 及调用

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

ce3544384103

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 文件,内容如下

ce3544384103

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

4.创建 jni目录

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

ce3544384103

5.创建.c文件

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

ce3544384103

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文件,

ce3544384103

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

三、加载so文件

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

ce3544384103

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

ce3544384103

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

ce3544384103

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值