在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释。.so本是linux下的文件类型,所以编译.so必须要在linux环境下,那么如何在win下进行编译呢?随便在网上搜下,教程也是五花八门,不清不楚,没有一定功底,即便看着教程到最后估计还是功败垂成,更别说初学者,看了保证头晕眼花,本人也是根据网上的一些例子,总结了一个个人认为还算比较简单的一个.so的编译方法:GNUstep(网上有不少用cygwin的,大家也可以去研究下)。

进入正题,win下.so开发环境搭建:(由于资源在网上不太好找,于是本人将需要的工具都放进了网盘)

1.NDK(本NDK版本为10):链接: http://pan.baidu.com/s/1bn1xDQB 密码: lr7d

2.gnustep-core-0.34.0-setup.exe,gnustep-devel-1.4.0-setup.exe,gnustep-msys-system-0.30.0-setup.exe 链接: http://pan.baidu.com/s/1ntLwd53 密码: kuuj

下载并安装完毕后(安装路径默认即可):

首先,在eclipse中导入NDK所在路径(解压完毕后的路径)

然后,在c盘(本人的安装路径在c盘),找到文件GNUstep.conf并打开以配置环境变量:

在该文件最后两行添加或修改:(注意你NDK的路径)

NDK=E:/baiyuliang/android-ndk-r10
export=NDK

打开GNUstep,并输入make -v,确定(enter键),再输入gcc -v,出现如下图症状:



输入cd $NDK,出现又出现下图症状:

则表示开发环境已搭建成功!

好了,接下来我们做一个简单的例子以学习如何使用GNUstep来做NDK的开发:

在eclipse中创建一个项目工程,包名:com.byl.testjni,主类名MainActivity(这个要看清楚,接下来会要求你正确输入他们的路径和名称):

创建完毕后,打开cmd,输入javah命令运行:

出现如图显示,则表示一切顺利,可继续往下进行,如果出现找不到该命令,则要检查下你的jdk环境变量是否配置正确。

接下来,定位到该工程项目中src文件夹硬盘中的所在路径:



打开项目中的MainActivity,加入以下代码:

    public native String hello();//定义.so中的方法名

    static{
            System.loadLibrary("testJni");//定义生成的.so的名称
    }

这个是需要事先写在调用.so的Activity中的,在编译时会自动在头文件中生成定义的方法名,以及最后生成的.so名称,接下来在cmd中输入以下命令,生成c头文件:

javah -d ../jni com.byl.testjni.MainActivity

千万注意路径不要写错,确定后,如果什么都没提示,则表示执行成功,eclipse中右键-刷新项目:

然后在jni文件夹中创建一个c文件,名称为与.so名称一致,即testJni.c:

接下来,仍在jni文件夹中编写Android.mk文件,Android.mk文件可在NDK安装路径下的samples/hello-jni/jni中找到,直接复制过来:

打开Android.mk,并修改其中的LOCAL_MODULE和LOCAL_SRC_FILES:

LOCAL_MODULE是描述模块的,用来给java调用的模块名,会生成对应的libtestJni.so;

LOCAL_SRC_FILES是源文件,多个文件空格隔开即可;

关键的一步来了,打开GNUstep,开始编译并生成.so文件:

1.输入命令,定位到项目(TestJni)所在位置:

cd /E/AndroidProject/TestJni

2.输入命令,生成testJni.so文件:

$NDK/ndk-build

如图所示,则表示运行成功,刷新项目,看libs下testJni.so文件是不是已经静静的躺在那里了?(注意:生成的文件默认前面会加一个lib即libtestJni.so)



下面就是见证奇迹的时刻:

打开MainActivity,在Oncreate方法中,调用hello()方法并打印,如果显示”HelloJni!“即表示.so生成无误并且调用成功!

		Log.e("jj", hello());

运行,看LogCat:

OK!完美运行!

此后,就可以把一些重要的变量,或者服务地址什么的放在.so里面了,然后将生成的.so放进项目就可以使用啦!

PS:这个例子很简单,就是打印一字符串,跟实际应用开发中所要编写的复杂的方法等相错甚远,所以真正学会NDK开发还需要下苦功夫的!

注意事项:

有童鞋可能用这个例子上生成的.so直接放在其它项目上使用时出现调用方法不成功的问题,在这里告诉大家一下,编译.so时所使用的Activity路径一定要与项目中调用.so中方法的Activity路劲一致,比如:A项目中的AActivity要调用一个.so,那么可以直接在本项目中生成.so,如果另创建一个单独的项目如B项目去生成.so时,那么B项目中Activity路径要与A完全一样:

A项目:com.byl.testjni.AActivity,

那么B项目也必须为:com.byl.testjni.AActivity

demo源码:http://download.csdn.net/detail/baiyuliang2013/8505977

NDK在windows下的开发环境搭建及开发过程的更多相关文章

  1. Windows 下 Ionic 开发环境搭建

    Ionic 介绍 首先,Ionic 是什么. Ionic 是一款基于 Cordova 及 Angular 开发 Hybrid/Web APP 的前端框架,类似的其他框架有:Intel XDK等. 简单 ...

  2. windows下android开发环境搭建

    JDK的安装和Java环境变量的设置 1 JDK下载地址 JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.h ...

  3. Windows下PHP开发环境搭建

    PHP集成开发环境有很多,如XAMPP.AppServ......只要一键安装就把PHP环境给搭建好了.但这种安装方式不够灵活,软件的自由组合不方便,同时也不利于学习.所以我还是喜欢手工搭建PHP开发 ...

  4. 【转】windows下python开发环境搭建

    1 -- 安装python的前期准备 Python开发有众多工具,又以Eclipse+Pydev最为常见.Eclipse平台对开发同学来讲,肯定是如雷贯耳,自不用废话.而PyDev是Eclipse平台 ...

  5. Ruby入门(1)——windows下Ruby开发环境搭建

    1.获得和安装Ruby1.1 获取Ruby    1) 从 http://www.ruby-lang.org/en/downloads/ 下载Source Code或者RubyInstaller    ...

  6. Windows下JDK开发环境搭建及环境变量配置

    1.下载并安装Java开发工具包(JDK) 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2 ...

  7. Windows下 Scala开发环境搭建

    1.配置jdk:可看这里 2.下载scala,并安装 3.配置scala环境变量,把scala的安装路径加入path内 ps:验证是否安装正确:cmd->输入scala,如果出现scala环境, ...

  8. windows下Ruby开发环境搭建

    一.下载 下载RubyInstaller 二.安装 按照提示安装 安装完毕后,在cmd命令窗口,输入:ruby -v 查询rbuy版本:输入gem -v 查询gem版本 三.Ruby插件(Redis插 ...

  9. windows下STM32开发环境的搭建

    一.概述 1.说明 笔者已经写了一篇Linux下STM32开发环境的搭建 ,这两篇文章的最区别在于开发环境所处的系统平台不一样,而其实这个区别对于开发环境的搭建其实影响不大,制作局部上的操作上发生了改 ...

随机推荐

  1. 【USACO】股票市场

    题目描述 尽管奶牛天生谨慎,它们仍然在住房抵押信贷市场中大受打击,现在它们准备在股市上碰碰运 气.贝西有内部消息,她知道 S 只股票在今后 D 天内的价格. 假设在一开始,她筹集了 M 元钱,那么她该 ...

  2. hdu 5430(几何)

    题意:求光在圆内反射n次后第一次返回原点的方案数 如果k和n-1可约分,则表明是循环多次反射方案才返回原点. #include <iostream> #include <cstrin ...

  3. 51Nod 1530 稳定方块

    瓦西亚和皮台亚摆放了m个方块.方块被编号为0到m-1(每个号码出现恰好一次).现在建立一个座标系OX表示地面,OY的方向是竖直向上的.每一方块的左下角有一个座标而且是整点座标. 摆放好的方块一定要是稳 ...

  4. Unity脚本自动添加注释脚本及排版格式

    Unity脚本自动添加注释脚本及头部注释排版格式 公司开发项目,需要声明版权所有,,,,标注公司名,作者,时间,项目名称及描述等等. 自己总结实现的现成脚本及头部注释排版文本,添加到模版即可. 文件不 ...

  5. VC++6.0连接MySQL数据库(MySQL API)

    一.MySQL的安装   Mysql的安装去官网下载就可以...最新的是5.7版本..二.VC6.0的设置(1)打开VC6.中选0 工具栏Tools菜单下的Options选项,在Directories ...

  6. Java的数组排序

    对数组进行排序 使用到的排序算法有: 1 选择排序   2 冒泡排序   3 插入排序    4 JavaAPI提高排序算法 选择排序的原理: 1 将数组中每个元素与第一个元素比较,如果这个元素小于第 ...

  7. 背景重复样式background-repeat

    一.background-repeat属性 在CSS中,使用background-repeat属性可以设置背景图像是否平铺,并且可以设置如何平铺. 语法: background-repeat:取值; ...

  8. SSM实战

    http://www.07net01.com/2016/07/1607717.html https://github.com/Lutils/MyForum

  9. Go 实现判断变量是否为合法数字 IsNumeric 算法

    [转] http://www.syyong.com/Go/Go-to-determine-whether-the-variable-is-a-legal-digital-algorithm.html ...

  10. 腾讯云H5语音通信QoE优化

    本文首发在云+社区,未经许可,不得转载. 云+导语:4月21日,腾讯云+社区在京举办"'音'你而来,'视'而可见--音视频技术开发实战沙龙",腾讯音视频实验室高级工程师张轲围绕网络 ...