首页 > 应用开发 > IT综合 > Android之JNI实践一(环境搭建和简单示例)
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/ ,如需转载,请注明出处,否则将追究法律责任。