Android的系统架构
| 四层架构 | 五层架构 |
|---|---|
-
Linux内核层:
– 避免了与硬件直接打交道
– 基于Linux系统的驱动开发可扩展性很强 -
硬件抽象层:
– 通过定义硬件“驱动”的接口来进一步降低Android系统与硬件的耦合度
– 由于Linux遵循的是GPL协议,而Android开源项目是基于Apache协议,意味着其下的所有驱动都应该开源,这一点对于部分厂商来说无法接受 -
系统运行层:
包含了支持整个系统正常运行的基础库,由于这些库多数都由C/C++实现,因此也被一些开发人员定义为"C层库",以区别应用程序框架层 -
应用程序框架层:
系统运行库被称为“C库层”相对应,应用程序框架层往往被冠以“JAVA库”的称号。这是因为框架层所提供的组件一般都是以JAVA语言编写而成,他一方面为上层应用程序提供了API接口;另一方面也囊括了不少系统级服务进程的实现,是与Android应用程序开发者关系最直接的一层 - 应用程序层:
区别DVM与JVM
-
首要差别:
– Dalvik: 基于寄存器,编译和运行都会更快些
– JVM: 基于栈, 编译和运行都会慢些 -
字节码的区别:
– Dalvik: 执行.dex格式的字节码,是对.class文件进行压缩后产生的,文件变小
– VM: 执行.class格式的字节码 -
运行环境的区别
– Dalvik : 一个应用启动都运行一个单独的虚拟机运行在一个单独的进程中
– JVM: 只能运行一个实例, 也就是所有应用都运行在同一个JVM中
搭建开发环境
- android-sdk-windows:android软件开发包, 作用相当于JDK =jre+工具
- eclipse:需要安装插件ADT
- 配置环境变量PATH:path=…\sdk\platform-tools; …\sdk\tools
- 创建并启动模拟器
| 参数名称 | 说明 |
|---|---|
| AVD Name | 虚拟设备名称 |
| Device | 设备型号 |
| CPU/ABI | 处理器 |
| Keyboard | 是否用硬键盘(不选用软键盘) |
| Skin | 不同型号皮肤外形不相同 |
| Memory Otions | 内存选项设置( RAM : 设备的运行内存;VM Heap : 虚拟机堆空间内存) |
| Internal Storage | 设备内部存储空间大小 |
| SD Card | SD卡内存的大小 |
项目的组成结构
APK安装文件的组成结构
应用编译打包过程
Android系统文件目录结构
- /:Linux系统的根目录
- /data/app/ :存放着第三方的apk文件
- /system/app/:其中是系统中的应用安装文件
- /data/data/packageName/:与应用对应的文件, 在应用安装时自动生成,应用卸载时自动删除
- /storage/sdcard/:SD卡的文件夹
SDK的文件目录
- /docs:文档目录 index.html
- /platforms:包含这个版本运行所需要的jar包
- /platform-tools:包含一些开发工具, 如adb.exe, sqlite3.exe
- /samples:包含一些google提供的样例项目工程, 如: APIDemos
- /source:包含系统的部分源码
- /tools:包含一些开发工具, 如: draw9patch.bat, hierarchyviewer.bat
ADB(Android Debug Bridge)
- Android 调试桥(Android Debug Bridge)是多种用途的调试工具:可以使用USB、以太网以及WIFI来进行调试(Android系统有adbd.exe进程)
- adb常用命令
| 命令 | 用途 |
|---|---|
| adb shell | 进入Linux系统中 |
| adb install –r apkPath | 向Android设备中安装APK,如果存在则先删除再安装 |
| adb push local remote | 向Android设备中拷贝文件或文件夹 |
| adb pulllocal remote | 从Android设备中拷贝文件或文件夹 |
| ctrl+c | 退出shell |
| cls | 清屏 |
DDMS
- 全称是Dalvik Debug Monitor Service
- Android 开发环境中的Dalvik虚拟机调试监控服务
- Eclipse中提供的Android应用开发的调试工具
- DDMS的四个重要的视窗
【1】Logcat : 查看日志输出
【2】File Explorer:查看系统内部文件
【3】Devices:显示关联的Android设备
【4】Emulator Control:操作控制关联的Android设备 - 注意: 在Eclipse中打开这四个视窗便于调试
日志工具类: Log
- 为了便于开发调试, Android提供了用于日志打印输出的工具类: Log
| Log类方法 | 级别 | 作用 | 颜色 |
|---|---|---|---|
| v(tag, message) | Verbose | 显示全部信息 | 黑色 |
| d(tag, message) | Debug | 显示调试信息 | 蓝色 |
| i(tag, message) | Info | 显示一般信息 | 绿色 |
| w(tag, message) | Warming | 显示警告信息 | 橙色 |
| e(tag, message) | Error | 显示错误信息 | 红色 |
- 比较Log与System.out
– Log提供了多个级别的打印输出方法, 在LogCat窗口中显示的颜色不同
– Log打印时必须指定TAG, 在LogCat中可以通过添加TAG过滤查看
– LogCat中可以通过两种方式过滤:
1. TAG名: 显示所有此标签名的输出
2. 应用包名: 显示指定包名应用的所有输出
手机尺寸相关的概念
- 手机的尺寸: 屏幕对角线的长度,单位为英寸(2.54cm)
- 手机的分辨率: 屏幕能显示的像素的数量, 一般用在长方向上数量×宽方向上数量来表达
- PPI:Pixels Per Inch,手机的像素密度,即每英寸屏幕能显示的像素数,像素密度越大,显示画面细节就越丰富
- DPI: Dots Per Inch,每英寸所打印的点数或线数,用来表示打印机打印分辨率, 但有时也会用dpi来代指ppi
- 手机的密度: Density, 以160ppi为基准, 即像素密度为160时Density为1,手机密度=像素密度 / 160
- 尺寸单位
– px: pixels(像素)
– dp/dip: device-independent pixels(设备无关像素)
– sp:scaled pixels(可缩放像素) - Android在运行时会自动将dp/dip/sp为单位的尺寸转换为像素单位的值
- dp与px的比较:
– 以px为单位的长度, 在差手机上会变大, 在好手机上变小
– 以dp为单位则不会变化
– 例如:两个手机A与B的手机尺寸是一样大的,也就是物理尺寸是一样大的,但是手机A的像素密度为200×200像素,手机B的像素密度为400×400像素,那么手机B的像素密度比手机A的像素密度要大。现在有一副200×200像素大小的图片同时在手机A与手机B上去显示,图片会沾满手机A的屏幕,在手机B中只会占据1/4的区域,由于手机A与手机B的物理尺寸是一样大的==>图片在手机A上显示会比手机B上显示的要大! - dp与sp的比较:
– 用户可以在系统设置中设置文本的大小
– 如果字体大小使用sp为单位, 设置有效果
– 如果字体大小使用dp为单位, 设置没有效果 - 在布局文件视图的宽高尽量用match_parent/wrap_content
- 如果必须指定特定值, 使用dp/dip做单位
- 文本大小使用sp做单位
关于颜色
- 在Android中字体颜色或背景颜色使用RGB来表达
– R : red 红色
– G : green 绿色
– B : blue 蓝色
– 每个色相用一个2位的十六进制的数来表达
– 颜色值的前面为带一个字符 : # - 例子
– 红色: #ff0000
– 绿色: #00ff00
– 白色: #ffffff
– 黑色: #000000 - 具体需要什么颜色可以查颜色表