android jni优缺点,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文件

31cbf54d00d0

3,使用javah生成.h文件

执行(javah -jni 你的包名加类名)

javah -jni han.jnitest.MyJNI

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

31cbf54d00d0

所以正确如图

31cbf54d00d0

这个时候就生成了.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"

}

31cbf54d00d0

一切都完成之后rebulid project一下

31cbf54d00d0

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

31cbf54d00d0

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

31cbf54d00d0

效果如下

31cbf54d00d0

第一次使用简书添加代码怪怪的,

有什么疑惑或者不懂的 可在下面留言一起学习哈

如有错误也请指出留言谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值