)的方式进行构建。使得层与层之间相互分离,明确各层的分工。保证了层与层之间的低耦合,当下层发生改变时上层应用程序无需改变。


   一,Android系统由五部分组成:



  1, 应用程序层



      Android系统包含系列的用java编写的核心应用程序,包含 联系人,浏览器,短信 ........



  2,应用程序框架



      Android应用程序开发是面向底层的应用程序框架进行的,应用程序框架提供大量Android API 供应用调用。


      应用程序框架除了可作为应用开发的基础外,也是软件复用的手段。任何应用程序都可发布自己的功能模块,供其它应用调用。



  3,函数库



       Android包含一套被不同组件所使用的C/C++库的集合。应用程序可以通过应用程序框架来调用这些库。


       核心库: 系统C库,媒体库,Surface Manager(管理对显示子系统的访问),LibWebCore(浏览器引擎),3D libraries(Open GL),FreeType(位图向量字体显示),SQLite



   4,Android运行时 



        Android运行时包含两个部分: Android核心集库(提供java核心库使用的绝大部分功能)和Dalvik虚拟机(负责运行应用程序)


       (1) 每个Android应用程序运行在单独的Dalvik虚拟机内(每个应用对应一条Dalvik进程)


Dalvik未完全遵守jvm规范,两者也不兼容。JVM虚拟机运行的java字节码(.class文件),Dalvik运行的是dex(Dalvik Executable)文件,需要通过DX工具将应用程序的所有.class文件编译成.dex文件。


       (3)Dalvik虚拟机非常适合在移动终端上使用,相对于pc或服务器端运行的虚拟机,不需要很快的CPU计算速度和大量的内存空间。


           a,专有的.dex文件减少了.class文件的冗余信息,把所有的.class文件整合到一个文件中,提高了运行性能。DX工具还会对.dex文件进行一些性能的优化 。


)都是基于栈的,Dalvik基于寄存器的。具有更好的性能表现,在硬件上的通用性略差。


       (4)Dalvik虚拟机依赖于Linux内核提供的核心功能,如线程和底层内存管理。




   5,  Linux 内核




           Android建立在Linux2.6之上。提供了安全性,内存管理,进程管理,网络协议栈和驱动模型等核心系统服务。






二, Android Debug Bridge (ADB) 的用法



   adb工具在platform-tools目录下,有以下功能:


   (1)  查看当前运行的模拟器:  adb  -devices


   (2)电脑与手机之间的文件的相互复制:  


              电脑到模拟器   adb push d:/abc.txt    /sdcard/   模拟器到电脑   adb pull /sdcard/mp3.txt   d:/


   (3)启动模拟器的shell窗口:


               打开shell窗口执行 linux命令   adb  shell




三, Android应用的清单文件:AndroidManifest.xml



    Android应用程序的全局描述文件,包含了:


    1,  应用程序的包名,该包名会作为应用的唯一标识。(package的值)


    2,应用程序所包含的组件,如Activity,Service,BroadcastReceiver和Provider等


    3,应用程序兼容的最低版本


    4,应用程序使用系统所需的权限声明


    5,其他应用访问该程序所需的权限声明 


(应用本身所需的权限 在<manifest />里面添加 <user-permission/>  调用该应用所需的权限在 <activity/>里面添加<user-permission/>)


       




四,Android应用的基本组件介绍



      1,Activity和View:



          (1) Activity是android中负责与用户交互的组件,只能通过setContentView(View)来显示指定的组件。


          (2)View组件是所以UI控件,容器控件的基类,就是用户能实实在在看到的部分。需要放到容器组件中,或者在activity显示出来


       如果应用需要多个用户界面,那么应用将会包含多个Activity,多个Activity组成Activity栈,当前活动的Activty位于栈顶。



     2,  Service : 



            Service通常位于后台运行,没有图形用户界面。一个Service组件被运行起来之后,拥有自己独立的生命周期。


            通常为其他组件提供后台服务或监控其他组件的运行状态。 



     3, BroadcastReceiver : 广播消息接收器



BroadcastReceiver类似于BroadcastReceiver子类,实现onReciver()方法)


           普通监听器监听的事件源是程序中的对象,而BroadcastReceiver监听的事件源是Android应用中其他组件。



     4,ContentProvider 



            Android系统为跨应用的数据交换提供了一个标准: ContentProvider(如发送短信时读取联系人里面的数据)


ContentProvider 与 ContentResolver结合使用。一个应用通过ContentProvider暴露自己的数据,另一个应用程序通过ContentResolver


            来访问数据。


             需要实现: insert(Uri,ContentValues),delete,update,query等方法




    5, Intent 和 IntentFilter


           


           严格来说Intent不是Android应用的组件,但是它是Android应用内不同组件之间的载体。


           Intent可以启动应用另一个Activity,也可以启动一个Service组件,还可以发送一条广播消息触发系统中的BroadcastReciver


           (1)启动Activity: 调用Context的startActivity(Intent intent) 或 startActivityForResult(Intent intent,int requestCode)


           (2)启动Service  :   调用Context的startService(Intent intent) 或 bindService(Intent service,ServiceConnection conn,int flags)


           (3)触发BroadcastReciver:调用Context的sendBroadcast(Intent intent) 或  sendStickyBroadcast(Intent intent) 或 sentOrderedBroadcast(Intent intent, String reciverPermission)



式和隐式





 五,Android应用程序签名






       签名的作用:



       (1) 确定发布者的身份。由于应用的开发者可以通过使用相同的包名来替换已经安装的程序,使用签名和避免这种情况发生。



       (2)确保应用的完整性。签名会对应用包中的每个文件进行处理,确保程序包中文件不会被替换。