Android JNI使用(Android Studio)

java native interface (JNI)学习
java和C/C++各有优缺点,有时用C/C++实现更好,所以需要调用native方法
首先下载好NDK
NDK下载
下面步骤:
1:先创建一个类,其中有native方法
(System.loadLibrary("JniTest");JniTest:引入的库名)


public class MyJNI {

    public static native String getString();

    static {
        System.loadLibrary("JniTest");
    }

}

2,使用javac生成.class文件
根据你的目录和包名执行下面命令
D:\develop\JniTest>cd D:\develop\JniTest\app\src\main\java\han\jnitest\

D:\develop\JniTest\app\src\main\java\han\jnitest>javac MyJNI.java

如图你会生成一个class文件

Android JNI使用(Android Studio)_第1张图片

3,使用javah生成.h文件
执行(javah -jni 你的包名加类名)
javah -jni han.jnitest.MyJNI

切换到java目录(我也不知道为啥,不切换就找不到文件)

Android JNI使用(Android Studio)_第2张图片

所以正确如图

Android JNI使用(Android Studio)_第3张图片

这个时候就生成了.h文件,我的就在java目录下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class han_jnitest_MyJNI */
#ifndef_Included_han_jnitest_MyJNI
#define_Included_han_jnitest_MyJNI
#ifdef__cplusplus
extern"C"{
#endif
/*
* Class:    han_jnitest_MyJNI
* Method:    getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_han_jnitest_MyJNI_getString
(JNIEnv *, jclass);
#ifdef__cplusplus
}
#endif
#endif

这个时候我们要对其修改

/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class han_jnitest_MyJNI */
#ifndef_Included_han_jnitest_MyJNI
#define_Included_han_jnitest_MyJNI
#ifdef__cplusplus
extern"C"{
#endif
/*
* Class:    han_jnitest_MyJNI
* Method:    getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_han_jnitest_MyJNI_getString
(JNIEnv *env, jclass jobj){
return(*env)->NewStringUTF(env,"JNI Test");
}
#ifdef__cplusplus
}
#endif
#endif

4,添加配置
main目录下创建jni目录
创建一个.c文件名字随意(我的是JniTest.c)把han_jnitest_MyJNI.h修改后的内容复制进来
再创建一个util.c空文件(没有会报空,也不知道为啥,好像其他名字也行..)
gradle.properties文件配置

android.useDeprecatedNdk=true

local.properties文件配置ndk路径(你自己的路径)

ndk.dir=D\:\\sdk\\ndk\\android-ndk-r10b

build.gradle文件配置

ndk {
//JniTest生成的so名字
moduleName"JniTest"
abiFilters"armeabi","armeabi-v7a","x86"
}
Android JNI使用(Android Studio)_第4张图片

一切都完成之后rebulid project一下

Android JNI使用(Android Studio)_第5张图片

生成的so文件路径XXXXX\JniTest\app\build\intermediates\ndk\debug\lib

Android JNI使用(Android Studio)_第6张图片

main下创建一个jniLibs目录 把生成的文件复制然后调用

Android JNI使用(Android Studio)_第7张图片

效果如下

Android JNI使用(Android Studio)_第8张图片

第一次使用添加代码怪怪的,
有什么疑惑或者不懂的 可在下面留言一起学习哈
如有错误也请指出留言谢谢

你可能感兴趣的:(Android JNI使用(Android Studio))