为Android添加JNI支持
起因
今天在进行Android原生开发时,需要通过JNI调用C++代码实现一些处理。以前没有做过类似的东西,在网上找了很久才解决问题,特记录下来以便以后翻阅。
Eclipse无cygwin编译so的方法
在网上找了下这方面的资料,总体来说还是比较多而且全的,这里就简单的列一下这方面的步骤吧。只是需要注意的是,只有NDK-7之后的版本才支持不用cygwin来交叉编译,下载的时候需要注意这一点。
Java开发环境
Java开发环境主要是安装JDK,JRE之类的东西,然后下载下Eclipse版本,可以考虑google官方推荐的Eclipse开发版本。然后需要设置一系列的环境变量,这里就不累述了,。
下载NDK
NDK的版本按照自己的需要下载即可,我这里使用的是NDK-r8e.
下载地址: http://developer.android.com/sdk/ndk/index.html
下载后直接解压缩安装即可。
环境搭建
1.打开Eclipse,新建一个Android工程(我取名为TestNDK),在工程目录TestNDK下新建JNI文件夹,该文件夹就是用来保存NDK需要编译的文件代码等。
2.新建并配置一个Builder
2-1.Project->Properties->Builders->New,新建一个Builder
2-2.在弹出的[Choose configuration type]对话框,选择[Program],点击[OK]
2-3.在弹出的[Edit Configuration]对话框中,配置选项卡[Main]
在"Name"中输入新Builder的名字(名字任意)
在"Location"中输入ndk_build.cmd的绝对路径(建议路径不要有中文和空格),根据各自的ndk路径设置,也可以通过"Browser File System..."来选取这个路径
在"Working Diretctory"中输入TestNDK的位置,也可以通过点击"Browser Workspace"来选取TestNDK的目录
设置后的效果图
2-3.在[Edit Configuration]对话框中,配置选项卡[Refresh]
勾选"Refresh resources upon completion"
勾选"The entire workspace"
勾选"Recuresively include sub-folders"

点击"SPecify Resources..."勾选TestNDK工程中新建的JNI目录,点击"finish"。点击"OK",配置完成


按照以上步骤完成后,整个编译环境已经成功搭建完毕!!!
设置步骤
按照以上的环境搭建步骤,可以支持编译C语言的文件,但是不支持编译C++。如果需要支持C++甚至C11还需要进行一些内容修改工作
1.添加makefile文件
Android编译so文件时需要用到两个文件,分别是:Application.mk和Android.mk。这两个文件的用途可以直接问谷歌。
2.修改Application.mk文件
添加对STL库版本使用的声明,添加编译开关
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
3.修改Android.mk文件
添加对libstdc++.a库的链接
LOCAL_LDFLAGS = $(LOCAL_PATH)/libs/libstdc++.a
LOCAL_CPPFLAGS += -lstdc++ -fexceptions
设置完毕以后,即可享受JNI之旅了
为Android添加JNI支持的更多相关文章
- IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置
原文:IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置 站点--右键属性--http头 ...
- [Android]通过JNI访问并操作Bitmap的元素,支持RGB565和ARGB8888
[Android]通过JNI访问并操作Bitmap的元素,支持RGB565和ARGB8888 标签: androidbitmapjni 2014-05-09 20:35 2985人阅读 评论(1) 收 ...
- 为Android设备添加A2SD支持
相信很多用Android设备的用户都有这个问题,内部存储太小导致应用只能装那么几个,虽然rom也有提供移动到sd卡的选项,但是仅仅是移动程序文件到sd卡,并不能解决多少问题,多装几个还是会 ...
- android的JNI 、 NDK 学习!
转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) ...
- 【转】Android中JNI的使用方法
Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...
- Android使用JNI(从java调用本地函数)
当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...
- android的JNI标准 android的NDK
转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) ...
- Android Studio JNI开发入门教程
Android Studio JNI开发入门教程 2016-08-29 14:38 3269人阅读 评论(0) 收藏 举报 分类: JNI(3) 目录(?)[+] 概述 在Andorid ...
- Android 增加JNI
Android:JNI 与 NDK到底是什么?(含实例教学) 前言 在android开发中,使用NDK开发的需求正逐渐增大: 很多人搞不懂JNI与NDK到底是怎么回事? 今天我们先介绍JNI与NDK之 ...
随机推荐
- jq实现上传头像并实时预览功能
效果 页面结构 <form action="" name="form0" id="form0"> <input type= ...
- js keys方法和foreach方法区别
keys和foreach都有遍历对象的功能,但他们可以遍历的对象类型是不一样的,foreach是数组对象的方法,而keys是Object对象的方法.换句话说,foreach只能数组对象使用,而keys ...
- vue-cli的webpack模版项目配置解析-build/dev-server.js
我们在使用vue-cli搭建vuejs项目(Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目)的时候,会自动生成一系列文件,其中就包含webpack配置文件.我们现在来看下,这些配置到 ...
- 人人都是CEO
在这个互联网崛起的时代有些流行说法,比如:人人都是产品经理,人人都是程序员以突显行业繁荣的特点,但从更基本的出发点,难道人人不都是 CEO 么?个人的 CEO. 从这个名字套路出发,我沿着想了下去,作 ...
- 积分图实现均值滤波的CUDA代码
没想到我2010年买的笔记本显卡GT330M 竟然还能跑CUDA,果断小试了一把,环境为CUDA6.5+VS2012,写了一个积分图实现均值滤波.类似于OpenCV的blur()函数. 使用lena. ...
- echarts使用总结
项目中需要实现数据可视化,在前辈的推荐之下,最终选取了echarts来实现,在此关于echarts的使用进行总结,最终代码分享至我的github. 关于echarts echarts是百度推出的,使用 ...
- Android开发之漫漫长途 XIII——Fragment最佳实践
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- Linuxc - C语言下return 0的意义
两条指令同时执行,前提是第一条指令返回0.否则不执行第二条指令. root@jiqing-virtual-machine:~/cspace/les3# gcc main.c -o main.out & ...
- Linux - ubuntu 设置固定ip和设置dns
ubuntu 设置固定ip和设置dns 1.ifconfig 查看网卡名称 root@jiqing-virtual-machine:~# ifconfig ens32 Link encap:以太网 硬 ...
- Spring-事务配置和详解
一.Spring事务配置 在项目开发过程中经常会使用事务来确保数据的一致性.根据网上的资料整理一下在spring中配置事务的几种方式.无论是哪种方式都需要在配置文件中配置连接池和事务管理器,代码如下. ...