Android Studio JNI 开发.so库

来源:互联网 发布:三星c5网络权限设置 编辑:程序博客网 时间:2024/05/17 01:51

自己学习了一下Android的NDK开发,在网上看了很多相关资料,也试着写一下,主要是记录一下,方便以后查阅,好了,开始进入学习吧.

首先是搭建NDK开发环境,AS已经方便了很多,我们只需进行少量修改即可.
那么我们就从创建工程开始吧,
首先创建一个jni工程 我的包是 encrypt.duojiankj.cn.jnitest
创建好后查看下你的AS有没有NDK开发环境(我的是快捷方式是eclipse,在工程名下按F12),进入到这个界面,查看Android NDK location:是否是空,我的已经下载完毕,没有下载的会有个下载链接,点击即可.

这里写图片描述

创建JniTest.java

public class JniTest {    static {        System.loadLibrary("jary");    }    public native String getString();}

在工程下build.properties中添加 android.useDeprecatedNdk=true
这里写图片描述

在app下build.gradle下的defaultConfig下添加

ndk {    moduleName "jary"         //生成的so名字    abiFilters "armeabi", "armeabi-v7a", "x86", "arm64-v8a"  //输出指定四种abi体系结构下的so库。    stl "stlport_static"    //打开.c 的 debug (此句是打开的debug的关键)}debug {    jniDebuggable true //此句不加在真机上 debug 不受影响,但是在虚拟机上不能 debug}

这里写图片描述

在MainActivity中做如下修改;

tv = (TextView) this.findViewById(R.id.tv);tv.setText(new JniTest().getString());

这里写图片描述
点击
这里写图片描述
生成.class文件
我的路径是:
F:\AndroidStudioProjects\JniTest\app\build\intermediates\classes\debug\encrypt\duojiankj\cn\jnitest
这里写图片描述
最重要的一步 然后生成.h文件
打开cmd,切换到项目所在的盘符下,我的是F盘(我的是win10,其他的盘符切换可能略有不同)
这里写图片描述
切到项目所在的main下
这里写图片描述
输入 javah -d jni -classpath 加上你的项目路径 注意:debug 之后有2个空格
这里写图片描述
然后在会生成jni文件夹及.h文件
这里写图片描述
编写jary.c文件

#include "encrypt_duojiankj_cn_jnitest_JniTest.h"   //这里是.h文件的名子JNIEXPORT jstring JNICALL Java_encrypt_duojiankj_cn_jnitest_JniTest_getString(JNIEnv *env ,jobject object){    return (*env)->NewStringUTF(env,"hello jni !!!!");};

运行app
运行后会出现以下目录表示成功
这里写图片描述

到这里.so库就生成了,下面来说一下调用so库

复制出libjary.so文件
这里写图片描述
在需要调用的工程app\src\main\下新建jniLibs文件夹将.so文件复制进去
这里写图片描述
创建包,要与之前的包一致
这里写图片描述
编写调用代码(与之前的内容一致)
这里写图片描述
运行编译即可

如有疑问欢迎留言讨论

0 0
原创粉丝点击