Android应用的跨语言调用小结
最近在搞客户端应用,对这几天学到的东东做下小结。
1、Android是基于linux kernel,用C来写的部分代码。
2、Android应用程序是用java语言来写的,开发工具一般用eclipse。
3、Android应用程序如果想要调C写的代码怎么办?
这个也比较简单,我们先回想下在C#里是如何调C++的,想起来了一个关键词,就是DLLImport,具体的用法为:【DLLImport("user32.dll")】:告诉.NET的公共语言运行时CLR,我想调用的非托管代码在user32.dll中,帮我把这个DLL加载到内存中来,然后采用public static extern 返回值 方法名(参数),可以调用外部dll定义的方法了,不过,还有一个比较痛苦的事就是,不同语言下的类型转换,譬如:指针、数组的转换,要一个方法一个方法地调试了。
在Android平台上调C写的代码,道理、过程也差不多,只不过,也得破费一翻周折,先普及下linux上的相关知识:
.c--C语言代码文件
.cpp-C++语言的代码文件
.h-C或C++程序的头文件
.o --程序目标文件:就是源代码编译后但未进行链接的那此中间文件,相当于windows平台下的.obj文件。
.a--静态链接库文件,相当于windows平台下的.lib文件 。一般需要头文件,.h文件才能调用。
.so类库文件。
基础知识了解了,再理一个转换的过程:
a)首先要将c代码放到linux下(注:windows上也有linux虑拟机工具),编译成.a或.so文件。
b)在eclipse工具里就可以直接加载.a和.h文件,或者直接调成.so文件就可以编译。
c)在直接调成方法之后,也还有一件事就是:要进行Java Native Interface转换,跟上面提到的DLLImport类似。