ITPub博客

首页 > 应用开发 > IT综合 > Android之JNI实践一(环境搭建和简单示例)

Android之JNI实践一(环境搭建和简单示例)

IT综合 作者:下一站在哪 时间:2014-06-04 10:31:37 0 删除 编辑

  Android之JNI实践一(环境搭建和简单示例)

  申明:以下大部分步骤都是来自网络资料,由于某些网络资料的不全甚至错误问题,因此自己实践后并整理一下整个流程,便于作为学习笔记,非常感谢网友!

  意图:做这个的意图主要是因为目前准备游戏2.0的版本开发,要用到引擎,而引擎是用c/c++实现的,目前正在准备移植该引擎,因此开始着手这方便的资料,之前一直做的是纯android的游戏,未考虑到!

  下面开始一天的旅程【在开始这些之前,你应该有android开发的环境了】:

  1. 首先安装Cygwin,安装的目的主要是jni的库(.so)的生成需要cmake、gcc,所以利用Cygwin工具安装这两个编译环境;

  2. 安装android-ndk-r5安装包,去官网或者网上搜就可以下载,郑州最好的牛皮癣医院可以是其他比较新的版本;安装方式直接解压到特定目录即可;

  (NDK, Cygwin安装包,也可以自己下载): http://pan.baidu.com/s/1kTmhgEz

  以上两个步骤可以统称

  Android NDK环境搭建Android NDK环境搭建 Android NDK 环境搭建,百度文库有资料:

  http://wenku.baidu.com/view/4c112a06eff9aef8941e0623.html

  这是我试过后比较靠谱的,有些资料上关于环境变量配置写成了(Cygwin home/Administrator/......bash_profile文件中内容):

  ANDROID_NDK_ROOT=/cygdrive/e/develop/android/android-NDK/android-ndk-1.5_r1 export ANDROID_NDK_ROOTANDROID_NDK_ROOT=/cygdrive/e/develop/android/android-NDK/android-ndk-1.5_r1

  export ANDROID_NDK

  这很明显不对,一前一后环境变量名称都不对应,稍微用过linux的都应该知道.

  以上配好之后,我们就可以利用Eclipse进行NDK的入门开发了:

  同样也是网上的教程,加上自我纠正和遇到的一些问题的解决方式【后面一一贴出】:

  个人是参考如下资料【安装略过,直接看示例部分】:

  http://blog.csdn.net/samguoyi/article/details/7410716

  安装这种方式基本OK,不过过程中遇到了如下问题:

  1. javah不是内部命令:

  2. 执行javah -jni jni.sam.you.MyJNI报找不到MyJNI类;

  3. 执行$NDK/ndk-build的时候,报***target pattern contains no '%'。停止

  4. 资料截图的工程中的jni文件夹郑州牛皮癣医院是自己新建的【至少我是这样做的,新的的对应的.c和Adnroid.mk都放在里面,后面利用Cygwin终端执行$NDK/ndk-build生成.so的时候需要进入到该目录】;

  5. android NDK jni下的c文件 Unresolved inclusion ?

  6. 【补充一】以上操作后Eclipse编译c/c++工程没问题,但是count << "hello" << endl; 执行后看不到输出?

  解决方式:

  1的解决方式:JAVA_HOME的环境变量,一前一后千万不能有分号,类似C:\Program Files\Java\jdk1.7.0_15 【我之前的是C:\Program Files\Java\jdk1.7.0_15;】所以悲剧了,记得改完后,重新cmd进入,执行javah或者javac看到很多参数提示就OK了!

  2的解决方式:按照上诉资料的方式,进入工程的bin目录,然后执行,我这里是不行的,然后有个哥们说了,进入src目录,执行,果然成功了,而且在.....JNITest\src下生成了对应的.h文件,这个android工程就可以看到【不行刷新下】;

  3的解决方式:由于之前执行的一些命令失败了,因此导致....JNITest\obj\local\armeabi\objs\hellojni\下的xx.o.d文件损坏,因此我们只需要删除该目录下的文件,然后重新执行$NDK/ndk-build就可以了.

  5的解决方式:

  【http://ljj21153.blog.163.com/blog/static/618581162012885153813/】原因是在eclipse编辑环境中没有找到对应的include中的文件。解决方法是将包含该文件的include目录作为新的linked folder加入工程 中。具体方法如下:

  1. 右击工程->New->Folder

  2. 对话框中点击Advanced

  3. 选择Link to alternate location (Linked Folder),选择需要的include目录

  4. Finish后刷新工程,问题解决。

  include 目录可以在ndk的安装目录中找到

  例如:/android-ndk-r7b/platforms/android-8/arch-arm/usr/include

  工程共享: http://pan.baidu.com/share/link?shareid=1124395894&uk=3927989065

  6的解决方式【谢谢网友分享】:

  http://blog.csdn.net/johnpub/article/details/9246887

  1、在PATH里加入C:\MinGW\bin,记得,如果里面还有其他的变量,记得要加个分号啊,分号得在英文输入模式下输入的。

  2、新建LIBRARY_PATH变量,如果有的话,在值中加入C:\MinGW\lib,这是标准库的位置。

  3、新建C_INCLUDEDE_PATH变量,值设为C:\MinGW\include。

  4、新建CPLUS_INCLUDE_PATH变量,值为

  C:\MinGW\include\c++\3.4.5;C:\MinGW\include\c++\3.4.5;C:\MinGW\include\c++\3.4.5\backward;C:\MinGW\include

  或者【我的MinGW目录结构是这样的】

  1、添加MINGW_HOME,值为:C:\MinGW

  2、添加C_INCLUDE_PATH,值为%MINGW_HOME%\include

  3、添加CPLUS_INCLUDE_PATH,值为

  %MINGW_HOME%\lib\gcc;%MINGW_HOME%\lib\gcc\mingw32;%MINGW_HOME%\lib\gcc\mingw32\4.7.2;%MINGW_HOME%\lib\gcc\mingw32\4.7.2\include;%MINGW_HOME%\lib\gcc\mingw32\4.7.2\include\c++;%MINGW_HOME%\lib\gcc\mingw32\4.7.2\include\c++\backward;%MINGW_HOME%\lib\gcc\mingw32\4.7.2\include\c++\mingw32;

  4、path添加值:%MINGW_HOME%\bin;

  其实windows下比较麻烦,做完这些尝试之后,我想起之前公司的一套软件架构,是在ubuntu下搞的,很多都是做好的命令脚本,一个命令调用所有脚本就可以进行所以.so库的生成,最后再生成apk。

  其实做完这个之后,就会明白android是如何调用c/c++生成的.so库的,做完后记得再冥想下......

  软件架构 --- 架构师的能力更多的在于分析问题和解决问题的能力,当然还有领导能力!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29661313/viewspace-1175208/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-05-16

  • 博文量
    24
  • 访问量
    43694