起因

今天在进行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支持的更多相关文章

  1. 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头 ...

  2. [Android]通过JNI访问并操作Bitmap的元素,支持RGB565和ARGB8888

    [Android]通过JNI访问并操作Bitmap的元素,支持RGB565和ARGB8888 标签: androidbitmapjni 2014-05-09 20:35 2985人阅读 评论(1) 收 ...

  3. 为Android设备添加A2SD支持

          相信很多用Android设备的用户都有这个问题,内部存储太小导致应用只能装那么几个,虽然rom也有提供移动到sd卡的选项,但是仅仅是移动程序文件到sd卡,并不能解决多少问题,多装几个还是会 ...

  4. android的JNI 、 NDK 学习!

    转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) ...

  5. 【转】Android中JNI的使用方法

    Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...

  6. Android使用JNI(从java调用本地函数)

    当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...

  7. android的JNI标准 android的NDK

    转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) ...

  8. Android Studio JNI开发入门教程

    Android Studio JNI开发入门教程 2016-08-29 14:38 3269人阅读 评论(0) 收藏 举报  分类: JNI(3)    目录(?)[+]   概述 在Andorid ...

  9. Android 增加JNI

    Android:JNI 与 NDK到底是什么?(含实例教学) 前言 在android开发中,使用NDK开发的需求正逐渐增大: 很多人搞不懂JNI与NDK到底是怎么回事? 今天我们先介绍JNI与NDK之 ...

随机推荐

  1. App Doc View Frame中指针的获取

    // App中获取其它三项指针 void CSDIApp::OnApp() { // App // Doc CDocument *pDoc = ((CFrameWndEx *)m_pMainWnd)- ...

  2. Actor-ES框架:Ray

    并发 1. 并发和并行 并发:两个或多个任务在同一时间段内运行.关注点在任务分割. 并行:两个或多个任务在同一时刻同时运行.关注点在同时执行. 本文大多数情况下不会严格区分这两个概念,默认并发就是指并 ...

  3. 番外篇--Moddule Zero 版本管理与组织单位管理

    Moddule Zero 版本管理 2.2.1 简介 大多数SaaS(多租户)应用都会有多个版本(包),这些版本的功能点也会各不相同.因此,他们能够为他们的租户(客户)提供不同的价格和功能点选项. 关 ...

  4. SpringMVC,SpringBoot文件下载

    前言 最近严查security, 导致原来暴露出去的s3不能用了,不允许public的s3,暂时的折中方案是自己做跳转.于是需要在SpringMVC中实现文件下载功能. 关于文件存储的设计 文件存储通 ...

  5. Java - 路线图

    java语言基础 基本语法 面向对象思想 mysql数据库基础 jdbc操作 java高级技术 java集合框架 多线程 网络编程 sql深入,索引,sql优化 javaweb servlet jsp ...

  6. bootstrap-table 表格加载中....处理

    $('#table').bootstrapTable({data:[]}); $('#table').bootstrapTable("showLoading"); ajax数据加载 ...

  7. selenium-java web自动化测试工具

    本篇文章由来,这两天整理了下自己经常使用而且很熟练的项目,今天突然想起漏了一个,补上了,但想到还没对应的博客,那就写一个简单的 我经常使用且相对熟练的部分技术如下(不知道算不算各位大神眼中的辣鸡): ...

  8. Android Studio 下获取debug sha1和md5

    Open Android Studio Open Your Project Click on Gradle (From Right Side Panel, you will see Gradle Ba ...

  9. 【Java SE】如何用Java实现反转排序

    摘要:反转排序是将原先已经排序好了的重新排序,是原来的数组元素的顺序反转过来.假设原来的数组顺序是{6,5,4,3,2,1},反转之后的顺序就是{1,2,3,4,5,6}.这个排序的算法不是很难,代码 ...

  10. js中的监听事件总结

    javascript事件与功能说明大全:http://tools.jb51.net/table/javascript_event 1.滚动条监听事件 例1:监听滚动条距离页面顶端距离 <scri ...