androidStudio jni 简单入门

androidStudio中实现jni的步骤:


1.新建一个android项目
2.给该项目配置好NDK的路径
3.新建一个类,在该类中声明一个native方法
4.在main目录下新建一个jni目录
5.打开studio的命令窗口,输入命令 cd app\src\main 进入到main目录下
6.输入命令 javah -d jni -classpath ..\..\build\intermediates\classes\debug [native 方法所在的类的全路径 如com.ljy.jni.JniUtils] 
7.输入完上诉命令后回车可生成.h的头文件
8.新建一个.c文件,在c文件中实现头文件中的方法
9.在当前module中的build.grade文件下defaultConfig节点追加下面代码
ndk{
moduleName "JniUtils" //指定生成的.so文件的文件名称
ldLibs "log"
abiFilters "armeabi", "armeabi-v7a", "x86" //指定支持的平台,如果不写的话就是全部
}

10.通过以上步骤,简单的jni测试项目就完成了,但是还需要在native所在的类中添加静态代码块{System.loadLibrary("[.so文件名称--也就是上面ndk中 moduleName的名字]")}
之后就可以用native所在的类调用native方法实现java和c交互了


11.运行项目后,进入build文件夹的intermediates-->ndk--->debug-->lib下面可以找到生成的.so文件,将该文件全部拷贝到项目的libs下面
12.进入项目的build.grade根目录下,增加一个节点,代码如下:
sourceSets.main {
        jniLibs.srcDir 'libs'
    }


13.这样以后就可以删除整个jni目录了^_^


14.12和13可以合并为在main下新建一个jniLibs文件夹,然后将所有的.so文件拷贝到该文件夹下面即可


我的项目层次结构:




源码:


public class JniUtils {
    public static native String getStringFromC();//声明native方法
    static {
        System.loadLibrary("JniUtils");
    }
}
 
 
在as的命令行输入:
F:\csdn_load\MyFirstJni>cd jni\src\main
 
 
执行上述命令后再输入:
F:\csdn_load\MyFirstJni\jni\src\main>
javah -d jni -classpath ..\..\build\intermediates\classes\debug com.ljy.jni.JniUtils
回车后可以看到jni目录下面多了一个com_ljy_jni_JniUtils.h的文件
 
 
新建.c文件,代码如下:
 
 
#include<stdio.h>
#include<stdlib.h>
#include "com_ljy_jni_JniUtils.h"
JNIEXPORT jstring JNICALL Java_com_ljy_jni_JniUtils_getStringFromC
        (JNIEnv *env, jclass jclass){
    return (*env)->NewStringUTF(env,"你好,我是菜鸟,请尽情吐槽!");
}

在MainActivity中输出:
 
 
Log.e(TAG,"String from C:"+JniUtils.getStringFromC());

运行项目:
得到的结果是:
 
 
 
 
就这样吧,简单吧,ps:太难的我也不会。。。。。。。。。。。。。。

猜你喜欢

转载自blog.csdn.net/lljjyy001/article/details/52883702
今日推荐