Android NDK系列(一)-AS使用javah生成so文件

NDK,全称Native Development Kit。当jdk无法满足开发或者对效率要求比较高,比如音视频处理,这时候使用NDK就比较合适,废话不多说。直接开始撸、

1、创建一个工程项目
Android NDK系列(一)-AS使用javah生成so文件

2、创建一个library module,便于之后将so文件导入其他工程使用。当然导入其他工程可以只导入so文件,通过system.loadlibrary导入库。也可以将so文件和对应java文件封装成jar包导入,这样就可以直接调用。一般我们导入三方都是使用第二种方式,不过在做ndk开发的时候,第一种也是常见的。

Android NDK系列(一)-AS使用javah生成so文件

3、配置ndk开发环境

首先生成so文件就需要AS有ndk的支持。安装ndk可以自行下载ndk插件,也可以通过AS下载安装。我的电脑使用AS自行下载的ndk-bundle,总是会出问题,这里我就给出一个百度云下载ndk的地址,我用的就是这个成功的。不过AS下载我也给出示例。

Android NDK系列(一)-AS使用javah生成so文件

如图操作

Android NDK系列(一)-AS使用javah生成so文件

或者是使用Android SDK 下载NDK。

Android NDK系列(一)-AS使用javah生成so文件

这个是下载系统提供的ndk-bundle。我虽然下载了,但是我的AS无法使用,好吧, 我很无语,于是去官网下载了,我放在了百度云里,这里我给出下载地址:链接:http://pan.baidu.com/s/1nvkfrT3 密码:d66h
下载成功后,一般放在sdk目录下,当然也可以自己随便下哪。最后在Android sdk location修改路径。

Android NDK系列(一)-AS使用javah生成so文件

嗯,到这里可能差不多了,不过还是要检查一下local.properties文件中是否已经生成ndk.dir路径。

Android NDK系列(一)-AS使用javah生成so文件

这里生成了ndk.dir就没问题了。
那么继续配置环境,需要在gradle.properties设置android.useDeprecatedNdk = true。

Android NDK系列(一)-AS使用javah生成so文件

嗯,到这里就差不多了。

4、编写java文件native方法,调用C逻辑。这里调用System.loadLibrary(“nativeUtil”);,nativeUtil是so文件库的名称。

Android NDK系列(一)-AS使用javah生成so文件

5、使用javah生成class文件,然后生成so文件。首先生成一个jni文件夹。

Android NDK系列(一)-AS使用javah生成so文件

之后在使用javah生成class文件,使用cmd可以,也可以使用AS提供的Terminal。

Android NDK系列(一)-AS使用javah生成so文件

Android NDK系列(一)-AS使用javah生成so文件

Android NDK系列(一)-AS使用javah生成so文件

这里生成一个h头文件,将h头文件放在生成的jni文件夹下(在project模式下),在Android模式下放在cpp下。

6.在cpp文件下(project模式下,在Android模式下是cpp文件夹)创建一个c文件,取名随意。把刚刚生成的h文件引入C文件。同时将h文件生成的方法copy过来。然后写成方法,返回一个jstring类型。使用env生成一个jstring(JNI方法,这里我给出一个我学习使用的Jni文档,有什么需求自己查文档)链接:http://pan.baidu.com/s/1jI87XOU 密码:dy83

Android NDK系列(一)-AS使用javah生成so文件

7、生成so文件,并调用so的方法。首先将library依赖到app。然后调用library的方法。

Android NDK系列(一)-AS使用javah生成so文件

当然最后不要忘了配置library的gradle,设置生成ndk的名称,以及需要生成的平台。

Android NDK系列(一)-AS使用javah生成so文件

然后就是调用了,最简单的一步。

Android NDK系列(一)-AS使用javah生成so文件

好啦,已经完成了配置和文件的书写,点击运行就会生成so文件,并且能够调用方法,获得返回值。

Android NDK系列(一)-AS使用javah生成so文件

在看看生成的so文件。

Android NDK系列(一)-AS使用javah生成so文件

好啦,使用javah生成so文件的步骤就是这样了。按照这个步骤做就能成功,ndk是一条进阶之路,我也看了网上很多的博客和官网资料还有视频教学,才慢慢入门,希望大家不要放弃,入门之后就是一片光明。还有一种方式AS Cmake,我会在下篇ndk进行介绍。觉得有用的给个赞,谢谢~