Android studio 集成ndk环境,生成so库,并在其他项目上引用

    1.

生成so库

首先 as的安装这里就不介绍了 版本3.0,新启动一个项目 正式跑通 hello world 开始集成ndk环境。

第一步:

这里写图片描述

第二步:
这里说明一下 看下图,是引用ndk的目录 ,有的小伙伴在下载sdk的时候 会把ndk也一并下载了,如果ndk版本是r9以下版本(不包括r9) 那么可能会导致编译so库失败,所以为了避免麻烦 ,我下载了一个R12的版本,

这里写图片描述

这里写图片描述
并在as中指定一下目录,其实这个ndk的目录是自动生成的 只需要在下面选中一下目录 上图的这个目录会自动匹配,

这里写图片描述

第三步:
在工程目录的gradle-properties最后一行,加上这句话 android.useDeprecatedNdk=true
这里写图片描述

至此,ndk环境的搭建基本完成,下面开始写内容:

首先 在本地新建一个NdkText类(English不好,命名略过。。。)

static {
        System.loadLibrary("wangh");
    }
    //java调C中的方法都需要用native声明且方法名必须和c的方法名一样
    public static native String getString();

初次编写这个方法是报错的 不用理会

第四步:
make 一下。
这里写图片描述

这步操作过后 会在 这个目录生成一个.class文件

这里写图片描述

第五步;
用javah 命令生成.h文件 这个可用as自带的teminal来完成
首先 命令进入到main目录下 用javah 来生成.h 文件夹
javah -d jni -classpath F:\workspace\MyNdkApplication\app\build\intermediates\classes\debug com.wangh.myndkapplication.jnitext.JniText classpath后面有空格 build后面有空格 这里要注意 是绝对路径,你可以右键点击JniText.class copy the path 然后改一下 改成上面的样子,

这里写图片描述

第六步:

这个操作之后 会在main目录下生成一个jni文件夹 里面是一个.h 文件, 这个文件不做修改, 在jni文件夹也就是.h文件的同级目录,新建一个.c的文件 命名随意

这里写图片描述

.C 文件要引入.h的文件头, 和方法名,
//
// Created by Administrator on 2017/11/20.
//

#include "com_wangh_myndkapplication_jnitext_JniText.h"

JNIEXPORT jstring JNICALL Java_com_wangh_myndkapplication_jnitext_JniText_getString
        (JNIEnv *env, jobject jobject1){
    return (*env)->NewStringUTF(env,"Hello Jni Wangh !!!");
}

文件头就是.h文件的文件名称, 方法名可以拷贝.h文件里的方法名 稍作修改(添加上参数 和返回值,对C++代码不懂 照着这个写就可以了 ^_^)

第七步:
万事俱备 只欠配置,app model下,build-gradle

这里写图片描述

moduleName 生成so的名称
abiFilters 指定CPU类型,这里只输出三种

到这里就大功告成了。rebuild一下, 编译成功的话 会在app下build文件夹里生成so文件

这里写图片描述

这个就是我们可能会在其他项目中用到的so库

2. 引用so库

至于so库在其他项目中的引用 本人也只是试用了一下,如果有更好的引用方式望留言告知。感激不尽!

这里写图片描述

要在com目录下建立和之前的项目同样的包名路径,将JniText类复制过来,将so对应CPU型号依次复制到main下jniLibs里面。(这里经验少的可能会把同一个so复制到不同cpu类型里 一定要分别复制 不然生成不同的so就没有什么意义了) 这样就完成了so在其他项目的使用。

如有问题请留言 文章有问题望指正 多谢!!!!!!!!!!!!!!!

发布了36 篇原创文章 · 获赞 21 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_15110579/article/details/78591109
今日推荐