- 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在其他项目的使用。
如有问题请留言 文章有问题望指正 多谢!!!!!!!!!!!!!!!