使用ndk-build方式在as调用jni
来源:互联网 发布:淘宝开店名字大全 编辑:程序博客网 时间:2024/06/03 06:46
在比较新的as上,调用jni有一些比较方便的方式比如使用cmake或者使用build工具,参考我博客中其他几篇文章
http://blog.csdn.net/findsafety/article/details/70053267
http://blog.csdn.net/findsafety/article/details/70053822
http://blog.csdn.net/findsafety/article/details/70059084
本文demo的地址为http://download.csdn.net/detail/findsafety/9843922
但还是希望能够用传统的方式来,这样在集成原来的eclipse项目也许会方便一点,所以这篇文章就是用ndk-build方式通过makefile来生成so进行调用
1 我们新建立一个项目,因为不想用新方式来调用jni ,所以不勾选include c++ support
2 在项目根目录下面的gradle.properties文件里面加上
android.useDeprecatedNdk=true
3 在src/main目录下面创建一个文件夹,名字叫做jni
4 在MainActivity里面声明native方法
public native String stringFromJNI();
5 点击菜单上的build -> make project ,这时候会在app/build/intermediates生成一个叫做classes的文件夹,里面会生成 MainActivity.class,这是我们下一步生成头文件的基础
6 点击底部的terminal栏,分别执行2个命令
cd app/src/main/java
javah -jni com.ksxx.testndkbuild.MainActivity
这样我们可以看到在java文件夹下面生成了一个.h文件
7 我们在jni文件夹下面创建一个.c文件,里面定义一个函数,函数的名称 返回值参照刚才生成的头文件
8 然后再在jni文件夹下面创建2个文件,分别为Android.mk和Applicaiton.mk
Android.mk文件里面
在这里LOCAL_MODULE是指你要生成的so文件的名字,LOCAL_SRC_FILES是指对应的c文件名字(都可以自己改的)
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := helloLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)
APP_ABI := all
9 再次进入terminal , 输入命令
cd ../jni
这样我们就进入到了jni目录,然后执行命令ndk-build
就会在app/main目录下面生成libs文件夹,里面会生成我们所需要的so文件
10 既然生成的so文件是在libs目录下面,而我们的java端要引用的话,是需要指定路径的,所以我们在build.gradle里面加入下面这段
sourceSets { main { jniLibs.srcDirs = ['src/main/libs'] }}
如果不想指定也可以,在app/src/main下面建立一个文件夹名字为jniLibs,这个文件夹会被as自动打包进去所以就不需要我们指定路径
11 在java层的MainActivity中加入so文件的加载语句
static { System.loadLibrary("hello");}
我们在activity中设置显示文本为jni中返回的内容
这个时候我们run一下,就可以看到效果了
- 使用ndk-build方式在as调用jni
- 使用AS的NDK工具开发JNI
- Android 使用NDK-build生成so文件 C++ JNI NDK
- AS开发NDK/JNI
- NDk环境变量的配置、AS中配置javah-jni、ndk-build
- eclipse as android jni 和 ndk以及调用过程--tread
- 第一次尝试使用 AS 调用JNI~
- Android studio 使用NDK ,jni调用
- 使用Eclipse NDK-build 编译jni的步骤示例
- AS jni调用入门
- NDK Java JNI调用
- 安卓 NDK JNI 使用(一) -- 环境配置(AS NDK cygwin)
- 我的Android NDK之旅(一),不使用ndk-build命令来创建jni
- 我的Android NDK之旅(二),使用ndk-build构建Jni
- 使用ndk-build编译 android调用的so库
- AS ndk 使用小节
- AS中使用NDK
- Eclipse中使用JNI调用C++ build的dll
- 利用HAProxy代理SQL Server的AlwaysOn辅助副本
- 2017 Unite大会总结
- GestureDetector类及其用法
- 如何抓取网站页面内容
- 嵌入式学习视频--配套硬件说明
- 使用ndk-build方式在as调用jni
- 关于adb相关记录
- MySQL NDB Cluster 7.5 / ... / Adding NDB Cluster Data Nodes Online: Detailed Example
- mysql 主从同步备份
- Linq学习总结之查询运算符笔记
- Docker网络连接探索
- jQuery Validate 无法验证 chosen-select元素
- 《UNIX环境高级编程中文版》pdf
- 剑指offer 4. 替换空格