除非你接手了老古董,否则现在基本找不到用eclipse还有jni的项目的。但是以前记录的点滴,也不想就此抹去。
目录
1.eclipse中的CDT插件怎么安装
出现的问题:
1.之前写过的一个Android项目上有JNI,后来ADT更新了,出现下面的问题,并且Android没有NDK选项。
[原]cygwin下载、安装教程和解决CDT出现“program 'make' is not found in path”bug
但是上面的这个博客里有一个地方说得不对,就是url连接不一定要使用中国的镜像,中国的镜像有可能不好使,在列表中随便选一个就行了。
Eclipse CDT plugin problems(StackOverFlow的解答)
2.eclipse+cygwin+cdt搭建c/c++开发环境
http://www.cnblogs.com/skyofbitbit/p/3705994.html
#MinGW 是什么?
http://blog.csdn.net/jpcfei/article/details/6428613
MinGW如何卸载:将文件夹直接删除即可。
最后终于找到答案了:
http://stackoverflow.com/questions/11579135/program-make-not-found-in-path
You may try altering toolchain in case if for some reason you can't use gcc. Open Properties for your project (by right clicking on your project name in the Project Explorer), then C/C++ Build > Tool Chain Editor. You can change the current builder there from GNU Make Builder to CDT Internal Builder or whatever compatible you have.
同时我也将C:\MinGW64\bin下的xx-make32.exe直接改成了make.exe
还修改了3个环境变量
C_INCLUDE_PATH=C:\MinGW\include
CPLUS_INCLUDE_PATH=C:\MinGW\include
LIBRARY_PATH=C:\MinGW\lib
总之,最新的ADT的CDT的配置可能会出现问题,我也不知道具体是哪里出现了问题,反正按照上面的来做,就解决了问题。
3.NDK
1)关联ndk
在Eclipse里关联NDK
在环境变量Path里配置ndk-build所在路径,以便在编译.c文件时使用这个指令。
2)JNI开发HelloWorld的复杂写法
(1)定义本地方法 native
public native String getStringFromC();
(2)在工程目录下创建一个jni目录
(2-1)在jni目录下新建.c文件
方法名的定义 Java_包名_类名_方法名
必须接收2个参数 JNIEnv* env jobject obj
(2-2) 在jni目录下新建Android.mk文件
(2-3) 在jni目录下新建Application.mk文件
文件内容为APP_ABI :=all。如果没有Application.mk文件,只有Android.mk的话,编译时只能生成arm
处理器对应的库文件,项目只能运行在arm架构的模拟器上,加了Application.mk文件,就能生成所有类型的处理器对应的文件。
(3)编译.c文件
在cmd命令行进入项目带盘符路径,输入ndk-build命令(确保Path里已经配置好了),ndk会自动寻找jni目录下的文件进行编译,生成so库文件。刷新libs文件夹,查看有没有成功生成so文件。
(4)引入库文件
在本地声明的类的静态代码块里
System.loadlibary("名称"); 名称就是Android.mk文件中LOCAL_MODULE那一项对应的名称
(5)运行项目
如果在jni下只新建了Android.mk文件,只能在arm架构的模拟器上运行,在其它的模拟器上运行会报错。
如果想要在其它类型的模拟器上运行,需要Application.mk文件,且要重新编译。
如果忘记了.mk文件的写法,可以参考ndk的文档:
3)JNI开发HelloWorld的简单写法
(1)先给eclipse配置一些ndk环境 window->preference->Android->ndk-找到你自己ndk所在目录
(2)定义本地方法
(3)点击工程右键 添加本地支持 Android Tools-add native support,需要给库文件取个名字。
(4)自动生成jni目录 自带Android.mk文件 和一个.cpp文件 需要你把cpp改成.c文件 Android.mk文件里面的LOCAL_SRC_FILES也需要改一下
(5)使用javah 生成jni样式头文件
(6)在C代码中实现本地方法
(7)一定要记得给他一锤子 (编译)
(8)在声明本地方法的类中 在静态代码块中加载库文件
0 条评论