刚刚接触到Android与NDK,我上网查找了一些资料,但是在理解NDK的时候遇到了问题:google对于NDK的解释里有这样一段话:"If you write native code, your applications are still packaged into an .apk file and they still run inside of a virtual machine on the device...The NDK is designed for use only in conjunction with the Android SDK."
这让我对NDK工作的层次很疑惑.我们都知道Android平台的4层结构:Java应用-Java框架-VM与运行时库-Linux内核.我的理解是,普通的Java应用软件将工作在Java应用层,调用Java框架的Java接口,接着经过Davik的解释,调用到C/C++的运行时库(如果不需要调用到库就跳过这一步),最后调用Linux内核所提供的接口.
那么通过NDK编译的软件在各个层面都做了什么呢?因为Google说NDK是基于JDK的,又解释说NDK的软件将同样运行在虚拟机上,那么我就有了这样的理解:采用NDK编译C/C++的软件将在编译时通过Native C/C++库被编译为Java代码,同样调用Java框架层的Java接口....后面的工作流程则与普通的Java软件一致.但是这种理解似乎不大对,因为C/C++作为一个下层语言,却运行在Java之上,无论如何是让人想不通的.我查看了一些资料,却仍然没有透彻的理解,请问大家觉得NDK是如何工作的?我的工作目标是希望首先了解Android各层次的调用关系,接着了解Android各层是如何相互调用的(比如Davik虚拟机将Linux内核的接口函数映射到一个固定的内存地址,通过执行这个地址所指向的函数,来达到系统调用的目的),最后达到一个目的:通过应用软件,挟持例如打开文件,打印信息这样的系统调用(不要和谐我,我们是做安全软件的).但是目前还不清楚可行性与可能的技术手段,如果大家有任何建议,非常感谢能与我联系.再次感谢!☻