什么是安卓
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。目前发行版本是6.0
安卓平台的优势
一、开放性
在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
二、挣脱运营商的束缚
在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市, 用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的
笑谈。
三、丰富的硬件选择
这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特
色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到 iPhone上使用、联系人等资料更是可以方便地转移。
四、不受任何限制的开发商
Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如可控制正是留给Android难题之一。
五、无缝结合的Google应用
如今叱诧互联网的Google已经走过10年度历史。从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。
安卓的架构
Android大致可以分为四层架构,五块区域:
1.Linux内核层
Android系统是基于Linux2.6内核,为各种硬件提供了底层的驱动。
2.系统运行库层
这一层通过一些C/C++库来为Android系统提供呃主要的特性支持,譬如SQLite库提供了数据库支出,OpenGL|ES库提供了3D绘图的支持,Webkit库提供了浏览器内核等。
同样在这一层还有Android运行库,它主要提供一些核心库,能够允许开发者使用Java语言来编写Android应用,另外Android运行库中还包含了Dalvik虚拟机,它使得每个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例,相较于Java虚拟机来说,Dalvik针对手机内存、CPU等做了优化处理,是专门为移动设备定制的。
3.应用框架层
这一层主要提供了构建应用时可能用到的各种API
4.应用层
所有安装在手机上的应用程序都是属于这一层的。
Android工程目录
项目建成之后,会生成一下目录和文件:
src:存放项目的Java源代码。
gen:由系统自动生成,主要有一个R.java文件,我们在项目中添加的资源会在这个文件中生成一个ID。
assets:存放一些随程序打包的文件,在程序运行时可以动态读取这些文件的内容,它里面的资源不会在R.java中生成ID。
bin:编译时候自动产生的文件。
libs:第三方jar包
res:
drawable-hdpi、drawable-ldpi、drawable-mdpi、drawable-xhdpi、drawable-xxhdpi:
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA
(480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA
(320x480)
(3)drawable-ldpi里面存放低分辨率的图片,如QVGA
(240x320)
ldpi:240x320
mdpi:320x480
hdpi:480x800、480x854
xhdpi:至少960*720
xxhdpi:1280×720
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片
layout:存放布局文件
menu:用于定义应用程序菜单的内容
values:存放字符串内容
dimens.xml存放尺寸内容,可以通过R.dimens访问相应资源
strings.xml存放一些文本字符串,可以通过R.string访问应用的资源
style.xml定义UI元素的格式和外观,可以通过R.style类访问相应资源
AndroidManifest.xml:整个项目的配置文件,程序中的四大组件以及权限、兼容版本、目标版本等内容都需要在这里声明
project.properties:指定编译程序时使用的SDK版本
Android编译过程
编写.java文件→编写.java文件生成.class文件→将.class文件转化成DavlikVM支持的.dex文件→将.dex打包成未签名的.apk文件→对未签名的.apk文件进行签名
Android系统启动过程:
参照博文:Android系统启动过程
Android应用启动过程
参照博文:Android应用程序启动过程源代码分析