美文网首页
jni hello world

jni hello world

作者: ggghhhhhhhh | 来源:发表于2020-06-15 14:11 被阅读0次

写文章的原因就是为了记录一些学过的东西,方便以后忘记了可以快速找回来。

以下步骤是基于android studio 2.3的版本,更高版本的as对于ndk的支持更好,可以在创建目录的时候,勾选include c++ surport可以直接完成下面步骤的配置

1.先配置ndk

2.local.properties下面可以查看ndk路径

ndk.dir=C\:\\android\\sdk\\ndk-bundle

sdk.dir=C\:\\android\\sdk

3.新建JniTest类

4.生成头文件 ,先把项目编译,生成.class文件,编译后可以在build/intermedietes/classes/debug 包名下找到编译好的class文件,如下图:

5.打开android studio自带终端Terminal,进入 app/src/main目录下,输入命令

javah -d jni -classpath ../../build/intermediates/classes/debug cn.lgh.myndk4.JniTest

生成头文件,注意需要配置好环境变量,进入app/src/main目录下的目的是,在生成头文件的时候,-d jni 可以直接把jni目录放到main目录下

值得注意的是,在使用javah的时候,出现error running javah src\main\java does not exist的错误,出现该错误的原因是,高版本的jdk在低版本的 jvm环境上运行,解决这个问题的方法就是让jdk版本和jvm环境版本保持一致

6.生成头文件后,可以在app/src/main下看到生成好的头文件

7.在app/src/main/jni目录下新建C代码源文件MyNative.c 和Android.mk文件

    Android.mk文件中的LOCAL_MODULE :=hello指定的是生成动态库的名字,LOCAL_SRC_FILES :=hello.c关联的是jni目录下的.c文件。

8.在build.gradle文件上的defaultConfig节点下添加

ndk {

    moduleName"MyNative"

    ldLibs"log"

    abiFilters"armeabi-v7a"

}

和在android节点下添加

sourceSets.main {

     jni.srcDirs = []

     jniLibs.srcDir"src/main/libs"

}

编译会根据配置生成不同的目录来存放 .so文件!

参数配置:

在defaultConfig中添加一个ndk{}

ndk{}可添加的属性如下:

moduleName "xxx" :        编译后so库的名字

ldLibs "xxx" "xxx" :     连接的库,可以有多个

abiFilters "xxx" "xxx" :

  so库运行的cpu架构,有armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64这些,常用的是armeabi和armeabi-v7a

stl "xxx" :                       C++ runtime support library,共有九种

cFlags "xxx" "xxx" :     编译选项

9.生成动态链接库.so文件

使用ndk-build命令直接生成动态链接库,在Terminal中,如下

E:\workspace\MyNdk4\app\src\main>ndk-build

成功后,可以lib目录下看到所生成的.so文件

相关文章

网友评论

      本文标题:jni hello world

      本文链接:https://www.haomeiwen.com/subject/vnqvmqtx.html