初识Android
一、Android是什么?
Android是世界上最受欢迎的移动操作系统,使用于手机,手表,平板电脑,电视等数十亿设备
- Android是一种基于Linux的开源的操作系统
- 主要使用于移动智能设备,如智能手机、平板电脑和智能电视等
二、Android发展历程
- 2003年,Android操作系统由Andy Rubin的Android公司开始开发
- 2005年,Google收购Android公司
- 2007年,Android开源
- 2008年,Android1.0版本发布,第一部Android手机HTC T-Mobile G1问世
- 2011年第一季度, Android在全球的市场份额首次超过塞班系统,跃居全
球第一 - 2013年的第四季度, Android平台手机的全球市场份额已经达到78.1%
三、Android特点
Android是一种基于Linux的自由及开放源代码的操作系统。
所以Android最大的特点就是开源、免费、可定制。
开源免费是一把双刃剑,吸引了众多开发者进入Android开发领域,促进了Android的快速发展;但同时也带来了一个很严重的问题:碎片化。
碎片化包括:屏幕碎片化、系统碎片化,我们开发时要考虑到碎片化的问题进行适配,以后再仔细探究这一块。
四、Android各版本对应API级别
1
五、Android平台架构
android-stack_2x.png-99.2kB
-
Linux 内核层
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低层内存管理。
使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序 -
硬件抽象层 (HAL)
硬件抽象层 (HAL) 提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。 -
Android Runtime
对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用都在其自己的进程中运行,并且有其自己的 Android Runtime (ART) 实例。
ART 的部分主要功能包括:- 预先 (AOT) 和即时 (JIT) 编译
- 优化的垃圾回收 (GC)
- 更好的调试支持,包括专用采样分析器、详细的诊断异常和崩溃报告,并且能够设置监视点以监控特定字段
在 Android 版本 5.0(API 级别 21)之前,Dalvik 是 Android Runtime。如果您的应用在 ART 上运行效果很好,那么它应该也可在 Dalvik 上运行,但反过来不一定。
-
原生 C/C++ 库
许多核心 Android 系统组件和服务(例如 ART 和 HAL)构建自原生代码,需要以 C 和 C++ 编写的原生库。Android 平台提供 Java 框架 API 以向应用显示其中部分原生库的功能。例如,您可以通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,以支持在应用中绘制和操作 2D 和 3D 图形。
如果开发的是需要 C 或 C++ 代码的应用,可以使用 Android NDK 直接从原生代码访问某些原生平台库。 -
Java API 框架
您可通过以 Java 语言编写的 API 使用 Android OS 的整个功能集。这些 API 形成创建 Android 应用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用,包括以下组件和服务:- 丰富、可扩展的视图系统,可用以构建应用的 UI,包括列表、网格、文本框、按钮甚至可嵌入的网络浏览器
- 资源管理器,用于访问非代码资源,例如本地化的字符串、图形和布局文件
- 通知管理器,可让所有应用在状态栏中显示自定义提醒
- Activity 管理器,用于管理应用的生命周期,提供常见的导航返回栈
- 内容提供程序,可让应用访问其他应用(例如“联系人”应用)中的数据或者共享其自己的数据
开发者可以完全访问 Android 系统应用使用的框架 API。
-
系统应用
Android 随附一套用于电子邮件、短信、日历、互联网浏览和联系人等的核心应用。
系统应用可用作用户的应用,以及提供开发者可从其自己的应用访问的主要功能。例如,如果您的应用要发短信,您无需自己构建该功能,可以改为调用已安装的短信应用向您指定的接收者发送消息。
我们的Android应用开发,暂时就是在这一层
六、Android与iOS操作系统对比
图片.png-93.6kB
七、Android运行环境,DVM和JVM
通过上面的Android平台架构可知:5.0之前,Android的运行环境是DVM;5.0及更高版本是ART。
DVM,Dalvik Virtual Machine,是专门针对移动设备定制的,它针对内存、CPU有限等情况进行了优化,它使得每一个Android应用都运行在独立的进程中,并且有自己的一个Dalvik实例。
Dalvik是运行时编译,ART时安装时编译,后面运行时就不用编译了
JVM,Java Virtual Machine,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体结构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改的运行。
DVM 和 JVM 的区别:
.apk 和 .jar 的区别:
八、Android项目结构
Image [2].png-33.8kB 图片.png-22kB 图片.png-24.1kB
九、Apk的构成及Apk打包流程
Apk本质是个压缩包,通过更改后缀为.zip之后解压,可发现它的构成如下:
Apk打包流程:
1、打包资源文件,生成R.java文件
2、处理aidl文件,生成相应java 文件
3、编译工程源代码,生成相应class 文件
4、转换所有class文件,生成classes.dex文件
5、打包生成apk
6、对apk文件进行签名
7、对签名后的apk文件进行处理
十、Android SDK目录结构说明
图片.png-5.4kB
add-ons:Google API 。比如GoogleMaps
build-tools:各版本编译工具目录
docs:Android的文档,包括开发指南、API等
extras:扩展开发包 如高版本的API在低版本中开发使用
platforms :各版本SDK
platform-tools:各版本SDK通用工具。比如adb、和aapt、aidl、dx等文件
sources:各版本SDK源码
system-images:模拟器映像文件。从android-14开始将模拟器映像文件整理在这里(原来放在platforms下)
temp:临时文件夹,一般在SDK更新安装时用到
tools :各版本SDK自带工具
AVD Manager:Android手机模拟配置工具,用于配置模拟器,只有先配置AVD才可运行模拟器
SDK Manager:SDK管理器,用于SDK更新、下载、删除
十一、Android Log日志工具类
- Log提供了多个级别的打印输出方法, 在LogCat窗口中显示的颜色不同
- Log打印时必须指定TAG, 在LogCat中可以通过添加TAG过滤查看
- LogCat中可以通过两种方式过滤:
- TAG名: 显示所有此标签名的输出
- 应用包名: 显示指定包名应用的所有输出
我的Log颜色设置:
级别 | 颜色 |
---|---|
VERBOSE | BBBBBB |
DEBUG | 0070BB |
INFO | 48BB31 |
WARN | BBBB23 |
ERROR | FF0006 |
ASSERT | 8F0005 |
十二、Android开发中尺寸相关概念
1. 常见尺寸概念
-
屏幕尺寸
- 含义:手机对角线的物理尺寸
- 单位:英寸(inch),一英寸大约2.54cm,常见的尺寸有4.7寸、5寸、5.5寸、6寸
-
屏幕分辨率
- 含义:手机在横向、纵向上的像素点数总和, 一般描述成 宽*高,即横向像素点个数 * 纵向像素点个数(如1080 x 1920 px)
- 单位:px
-
px
- 含义:pixel,电子屏幕上组成一幅图画或照片的最基本单元
-
pt
- 含义:point,点,印刷行业常用单位,等于1/72英寸
-
dpi
- 含义:dot per inch,最初用于衡量打印物上每英寸的点数密度,就是说你的打印机可以在一英寸内打多少个点。该值越高,则图片越细腻
-
ppi
- 含义:当DPI的概念用在计算机屏幕上时,就应称之为PPI(Pixels Per Inch)。同理: PPI就是计算机屏幕上每英寸可以显示的像素点的数量,该值越高,则屏幕越细腻
-
dp
- 含义:Density-independent pixel, 是安卓开发用的长度单位,1dp表示在屏幕像素点密度为160ppi时1px长度
-
sp
- 含义:scale-independent pixel,安卓开发用的字体大小单位。可以根据用户的字体大小首选项进行缩放
注意: Android在运行时会自动将dp、sp为单位的尺寸转换为像素单位的值
2. 换算关系
-
pt 和 px
1pt= 1/72 in = (dpi / 72) px当photoshop中新建画布的分辨率为72ppi( 即 72dpi时 ), 1pt=1px; 当新建画布分辨率为72*2=144ppi时,1pt=2px
-
ppi 和 dpi
ppi= 屏幕对角线上的像素点数/对角线长度 = √(屏幕横向像素点^2 + 屏幕纵向像素点^2)/对角线长度在电子屏幕显示中提到的ppi和dpi,在我们android开发中可认为是一样的
-
dp 和 px
图片.png-8.5kB
1dp=(ppi/ 160)px
3. 像素密度划分
mdpi、hdpi、xdpi、xxdpi用来修饰Android中的drawable文件夹及values文件夹,用来区分不同像素密度下的图片和dimen值。
那么如何区分呢?Google官方指定按照下列标准进行区分:
图片.png-5.1kB
4. 标准尺寸
图片.png-166.6kB十三、Android开发中颜色相关概念
Android中支持以下颜色形式:
-
RGB 低精度 - 不带透明通道(默认)
-
ARGB 低精度 - 带透明通道
-
RRGGBB 高精度 - 不带透明通道
-
AARRGGBB 高精度 - 带透明通道
类型 | 解释 | 0(0x00) | 255(0xff) |
---|---|---|---|
A(Alpha) | 透明度 | 透明 | 不透明 |
R(Red) | 红色 | 无色 | 红色 |
G(Green) | 绿色 | 无色 | 绿色 |
B(Blue) | 蓝色 | 无色 | 蓝色 |
其中 A R G B 的取值范围均为0255(即16进制的0x000xff)
A 从ox00到oxff表示从透明到不透明。
RGB 从0x00到0xff表示颜色从浅到深。
当RGB全取最小值(0或0x000000)时颜色为黑色,全取最大值(255或0xffffff)时颜色为白色
个人总结,水平有限,如果有错误,希望大家能给留言指正!如果对您有所帮助,可以帮忙点个赞!如果转载,希望可以留言告知并在显著位置保留草帽团长的署名和标明文章出处!最后,非常感谢您的阅读!