您的位置:首页 > 移动开发 > Android开发

Android学习之(一):从零开始学Android

2013-12-20 16:54 148 查看
Android--个人认为是Google的神举之一。打从诞生之初,就以爆炸的形似蔓延全球。直至今日,仍是手机终端系统、移动设备的主导者。而且还不断的发展......

其人性化的操作方式,清晰的体系结构让无论是使用者还是开发者都觉得很容易入手。目前各类app不断被开发,功能不断丰富,有大举赶上甚至超越PC应用的趋势。还是来看看Android长什么样。(附上经典图)



Android操作系统总体框架如图所示,主要包括:

(1)应用程序层(Application)——各种APK和组件

(2)应用程序框架层(Application Framework)——Java编写,实现Android的系统框架和GUI,应用开发的平台,主要包括:

–Activity Manager:Activity是Android应用程序中最小执行单元。Activity Manager管理每个Activity的生命期及相关行为。

–Window Manager:Android的应用程序包含有很多Windows,Window Manager用于管理Windows。

–Content Provider:支持各应用之间共享数据

(3)Libraries与Android Runtim层——采用C/C++语言编写,主要为上层GUI和系统服务(Application Framework )提供一些底层实现。Runtime是Android运行时环境。提供了核心链接库(Core
Libraries)和Dalvik VM虚拟系统。采用Java开发的应用编译成apk后交给Android操作系统来执行。开发者用Java编写app时,先是生成了源代码(.Java),编译—>(.class),再编译—>Dalvik VM执行的文件(.dex),包装—>Android可执行的文件(.apk)。

(4)Linux内核层——Linux内核提供系统核心服务,如进程、内存、电源管理,网络连接,驱动与安全等。也是硬件和其他软件程序代码之间的抽象层。

Java和C/C++能调用衔接很关键的一种技术就是JNI。

Android上层的Application和Application Framework都是使用Java编写,底层包括系统和使用众多的Libraries都是C/C++编写的。所以上层Java要调用底层的C/C++函数库必须通过Java的JNI来实现。

从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。

使用JNI的核心是JNINaiveMethod结构体,这个结构是jni.h中定义如下:

Typedef struct {

Const char* name; // JNI函数的名称

Const char* signature; // 描述JNI函数的参数和返回值

Void* fnptr; //JNI函数对应的C语言的函数指针

} JNINATIVEMETHOD;

JNINaiveMethod第一个参数是字符串,JNI函数的名称,对应于JAVA中使用的方法名称;第二个参数也是字符串,表示参数和返回值的类型;第三个参数是JNI函数对应的C语言的函数指针。

Java通过java JNI调用本地方法,而本地方法是以共享库(*.so)文件的形式存放的,通过调用本地库文件的内部方法,使java可以实现和本地机器的紧密联系,调用系统级的各接口方法。在java语言中,用native关键字声明的方法就是java调用的本地方法,例如:public native void hello() ; //java调用本地方法hello

Jni对于应用本身来说,可以看做一个代理模式。对于开发者来说,需要使用c/c++来实现一个代理程序(jni程序)来实际操作目标原生函数,java程序中则是jvm通过加载并调用此jni程序来间接地调用目标原生函数。



Jni调用过程示意图

需要注意的是,利用C/C++等完成的底层代码的安全性较弱,无法防止开发者利用无效的指针来改写内存,这样会导致虚拟机安全性削弱。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机下实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐