Android studio ndk 第一个测试

1.配置android studio ndk环境
这里写图片描述
主要是ndk location,sdk 路径要正确
2. 在你的工程目录下新建一个类,在类里面什么你的方法,主要是要声明一个native关键字。
这里写图片描述
现在方法是红色的没有关系
3.用命令生成.h文件,然后通过.h文件创建我们实际要实现方法的.c文件。
(1)首先我们要重新编译一些,因为我们创建TestJni类后还没有生成类在我们的build文件里面如下图
这里写图片描述
注意这个位置是在 app/build/intermediates/classes/debug目录下,这个是工程编译后存放地址( 切记不要再往下面层级跳了,不然javah -jni命令不行,我也不知道为何,我试了很久,感觉是android studio的一个bug)
这里写图片描述
这里写图片描述
这个时候说明已经有了,因为我们后面步骤需要跳转到这个地址 进行生成.h文件
(2)teminal窗口跳转到debug文件下,用javah -jni 工程名.xxx.TestJni 生成.h文件
这里写图片描述
这个时候在debug目录下生成一个.h 文件 ,然后在app main目录下新建一个jni 目录,把那个.h文件剪切到jni目录。
这里写图片描述
然后再new 一个.c文件。文件名字你随便取。把.h文件里面的方法声明取过来,然后在参数上不齐,这里只是返回一个简单的字符串,如果想要复杂的逻辑,自己c++写就是了。
.h文件内容
这里写图片描述
.c文件内容
这里写图片描述
可以看出 返回名字是按照一定的规则生成的,这个是jni的规则生成。.c 文件要补足方法 参数,然后返回字符串 ,后来发现这里有点失误,要去掉 jstring 前面的JNIEXPORT 只能有一个返回类型
4. 然后配置app 下面的build.gradle 配置ndk 如图 在android studio 不需要去配置Android.mk文件,系统已经在build的生成上配置了。所有只需要在defaultConfig 配置ndk子项,
ndk {
// 设置支持的 SO 库构架
moduleName= ‘test’
abiFilters ‘armeabi’, ‘armeabi-v7a’, ‘arm64-v8a’, ‘x86’, ‘x86_64’, ‘mips’, ‘mips64’
}
其中moduleName的名字很重要,是一个表示,对生成的so文件的名称和加载时候的标示。abiFilters 是生成不同指令集的c代码,不需要修改,直接用就是。
sourceSets {
main {
jniLibs.srcDirs = [‘libs’]
}
}
是配置src的目录,需要配置。
新建c文件
修改的build.gradle
这里写图片描述
这里就是android studio 已经帮我们编写的android.mk文件
这个文件和用eclipse自己编写的文件差不多吧
这里写图片描述
这个文件需要第5步做了后,点击编译后生成的
5.最后修改全局的gradle.properties 这个文件修改配置ndk设置
android.useDeprecatedNdk=true
这里写图片描述
6.然后就是怎么使用的问题了。
现在稍微修改下我们编写的文件
这里写图片描述
这里写图片描述
这里你就随便找个地方测试下返回的值是否是你在c文件写的一样
这里写图片描述
这里就是我们编写的so文件地方
这里写图片描述

猜你喜欢

转载自blog.csdn.net/yang19910524/article/details/52386437