扣丁书屋

Android Studio 生成so文件 及调用

so文件是C、C++的函数库,在Android中 调用这些库,使用的是JNI( Java Native interface) JNI 可以使Java程序调用本地程序或者库(一般是使用C、C++ 或者汇编语言编写)。 这篇文章 会介绍 使用Android Studio 如何生成so文件,及如何使用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方法

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


https://mp.weixin.qq.com/s/-D-iL9HHfV8xX7PtyCDjfQ

最多阅读

简化Android的UI开发 1年以前  |  514195次阅读
Android 深色模式适配原理分析 9月以前  |  6630次阅读
30分钟搭建一个android的私有Maven仓库 2年以前  |  3634次阅读
Android Studio 生成so文件 及调用 1年以前  |  3568次阅读
Android设计与开发工作流 1年以前  |  3504次阅读
Google Enjarify:可代替dex2jar的dex反编译 2年以前  |  3385次阅读
Android多渠道打包工具:apptools 2年以前  |  3016次阅读
Google Java编程风格规范(中文版) 2年以前  |  2910次阅读
Android UI基本技术点 2年以前  |  2879次阅读
Android死锁初探 1年以前  |  2851次阅读
Android-模块化-面向接口编程 1年以前  |  2774次阅读
Android权限 - 第一篇 2年以前  |  2683次阅读
Stetho 2年以前  |  2651次阅读
花椒Android客户端多变体构建实践 1年以前  |  2629次阅读
2015 Google IO带来的新 Android 开发工具 2年以前  |  2615次阅读

手机扫码阅读