LZ-Says:热腾腾的一天那,貌似今天帝都达到了高温,热腾腾,我滴天。。。各位老铁注意防暑,多喝水~~~
前言
昨天更新了一篇启程文,地址如下:
重走Android路 之 今日正式启程:https://blog.csdn.net/u012400885/article/details/80572151
而今天,继续我们的重走Android路。
今天为大家带来如下俩点内容:
Android 系统架构简述;
Android 开发工具简述。
唠点题外话
现在网上各种初级教程琳琅满目,其中不缺乏一些很优秀的文章,但是写的再好,终究是别人的东西,终究,你也不过是个习惯手到擒来的Api开发者。
LZ知道自己和大佬之间的差距,我们面对大佬,不卑不亢,努力让自己变得更加优秀,终有一天,你也会成为别人眼中的大佬,但是,切勿骄傲自满,因为学无止境~! 共勉~
重走一次Android,重新回味一下Android,同时也为这几年的不作为做一个尽可能的弥补吧~
本文重点脑图呈现
一、Android系统架构简述
首先,我们要明白:
Android是一个开源的、基于Linux的软件栈,它是针对各种各样的设备和形式因素而创建的。
接着,LZ找了一张LZ当初学习Android时,当时官方给出的系统架构图,如下:
而今,随着Android的愈发的完善以及适用各大场景,官方也将曾经的系统架构图重新更新了一番,如下:
新老Android架构图相比:
新的Android架构图相对来说更加的细化;
新的Android架构图细化特定分出一个:Hardware Abstraction Lay (HAL)层。
那么,针对新的Android架构图,它每层代表的含义又是什么呢?
下面我们来简单看一波~ (PS:这部分内容较多,大家阅读完最好总结一下)
1. 系统应用层
Android配备了一套核心应用程序,用于电子邮件、短信、日历、互联网浏览、联系人等等。包括在平台上的应用程序在用户选择安装的应用程序中没有特殊的状态。因此,第三方应用程序可以成为用户默认的Web浏览器、SMS,甚至是默认的键盘(一些例外适用,例如系统的设置app)。
系统应用程序既为用户提供日常生活中常用应用程序,又为提供开发人员提供了可以直接调用系统应用的关键功能。
例如,我们的App想要发送SMS消息(短信),我们不需要重新去写一个短信的功能,而是直接调用系统提供好的Api去向指定的联系人发送短信,甚至,我们可以设定好短信内容,以便减少用户操作。
2. Java API框架
Android OS的整个功能集可以通过用Java语言编写的API来获得。这些API构成了通过简化核心模块化系统组件和服务的重用来创建Android应用程序所需的构建模块,其中包括:
一个丰富且可扩展的View System: 可以使用它来构建应用程序的UI,包括列表,网格,文本框,按钮,甚至可嵌入的Web浏览器;
Resource Manager: 提供对非编码资源,如本地字符串,图形,和布局文件;
Notification Manager: 为应用程序提供在状态栏中显示自定义的消息提醒;
Activity Manager: 负责管理应用程序的生命周期并提供一个通用的导航返回栈;
Content Providers: 可让应用访问其他应用的数据,例如通讯录应用,或共享自己的数据。
开发人员可以完全访问Android系统应用程序,从而复用系统提供的框架API。
3. Native C/C++ 库
许多核心的Android系统组件和服务(如ART和HAL)都是使用本地代码构建的,需要使用C和C ++编写的本机库。 Android平台提供Java框架API以将这些本地库中的一些功能展示给应用程序。 例如,您可以通过Android框架的Java OpenGL API访问OpenGL ES,以添加对在应用程序中绘制和操作2D和3D图形的支持。
如果项目中需要C或C ++代码的应用程序,可以使用Android NDK直接从本机代码访问其中一些本地平台库。
4. Android运行时
对于运行在Android版本5.0(API级别21)或更高版本的设备,每个应用都在其自己的进程中运行,并且拥有自己的Android运行时(ART)实例。 ART通过执行DEX文件来编写在低内存设备上运行多个虚拟机,DEX文件是专为Android设计的字节码格式,针对最小的内存占用情况进行了优化。构建工具链(如Jack)将Java源代码编译为可在Android平台上运行的DEX字节码。
ART的一些主要特点包括以下几点:
提前(AOT)和即时(JIT)编译;
优化的垃圾收集(GC);
更好的调试支持,包括专用采样分析器,详细的诊断异常和崩溃报告,以及设置观察点以监控特定领域的能力;
在Android版本5.0(API级别21)之前,Dalvik是Android运行时。如果应用在ART上运行良好,那么它也可以在Dalvik上运行,但反过来可能并非如此。
Android还包含一组核心运行时库,它们提供Java API框架使用的Java编程语言的大部分功能,甚至包括一些Java 8语言功能。
5. 硬件抽象层(HAL)
硬件抽象层(HAL)提供了将设备硬件功能展示给更高级Java API框架的标准接口。 HAL由多个库模块组成,其中每个模块都为特定类型的硬件组件(如相机或蓝牙模块)实现接口。 当框架API调用访问设备硬件时,Android系统会自动为该硬件组件加载库模块。
6. Linux内核
Android底层便是Linux内核。
例如,Android运行时(ART)依赖Linux内核来处理线程和底层内存管理等底层功能。
使用Linux内核,Android可以使用关键的安全功能,并允许设备制造商为内核开发硬件驱动程序。
随着Android的完善,随着产品完善,很多时候,应用级App简单调用系统提供API已无法满足我们开发需求,那么这个时候,我们就不得不硬着头皮去深入底层,了解NDK,学习JNI等等一些高级编程技术了。
二、Android开发工具简述
Android开发工具,从曾经的傻瓜式,到如今的自动化,插件化,包括我们的应用程序都开始组件化、插件化的趋势下,不得不为背后默默奋斗的大佬点个赞,致敬~!!!当然,作为一个合格的Android开发者,我们不能单纯的停留在Api过程中,我们也应当为我们的Android贡献出自己的一份力量,例如LZ这简单Low的博文,至少证明在我们的青春岁月中,我们曾为了一份执着而不懈努力着~!
Eclipse
不知道现在出道的小伙伴对于这位曾经陪伴过很多人的老伙计是否感到很陌生?
先来一张靓照,久违了,老伙计~!
15年,随着谷歌宣布将在年底前中止对其他IDE开发环境的支持,我们撒手挥笑正式向Eclipse说再见。
那段日子,听到最多的一句话便是:
从此以后再也不用像个SB一样来回切换查看布局排版了。。。
虽然谷歌Baba好用至极,但是,也要回首致敬Eclipse,再见,老伙计~!!!
Android Studio
首先来一波官方对于Android Studio最直接有效的描述:
Android Studio提供了在不同类型的Android设备上构建应用的最快速工具。
再秀一波关于Android Studio傲娇的样子:
关于Android Studio的下载安装,这里不做详细的介绍说明,有兴趣的可点击下面官方地址直接进行下载安装即可。
Android Studio优势
那么相对于Eclipse,Android Studio具有哪儿些优势(特点)呢:
可视布局编辑器
ConstraintLayout通过将来自每个视图的约束添加到其他视图和准则来创建复杂布局。然后通过选择各种设备配置之一或通过简单调整预览窗口来预览任何屏幕尺寸的布局。
APK分析器
通过检查应用APK文件的内容,即使未使用Android Studio构建,也可以找到机会来减少Android应用大小。检查清单文件,资源和DEX文件。比较两个APK,查看应用尺寸在应用版本之间的变化情况。快速模拟器
安装和运行应用的速度要快于使用物理设备并模拟不同的配置和功能,包括ARCore,Google的平台,可用于构建增强现实体验。智能代码编辑器
使用智能代码编辑器编写更好的代码,加快工作速度,提高Kotlin,Java和C / C ++语言的代码完成率。灵活的构建系统
借助Gradle支持,Android Studio的构建系统允许您自定义构建,以便为单个项目中的不同设备生成多个构建变体。实时分析器
内置的分析工具为应用程序的CPU,内存和网络活动提供实时统计信息。通过记录方法跟踪来识别性能瓶颈,检查堆和分配,并查看传入和传出的网络负载。
当然还有很多,这就需要各位亲自行发掘了哦~
下面来看一下在Android Studio中工程结构以及其所代表的含义:
Android视图
默认情况下,Android Studio会在Android视图中显示项目文件,如下图:
此视图并不反映磁盘上的实际文件层次结构,而是由模块和文件类型组织,以简化项目的关键源文件之间的导航,隐藏某些不常用的文件或目录。 与磁盘上的结构相比,一些结构变化包括以下内容:
在顶级Gradle Script组中显示所有项目的与构建相关的配置文件;
显示模块级别组中每个模块的所有清单文件(当您针对不同的产品风格和构建类型有不同的清单文件时);
在一个组中显示所有备用资源文件,而不是在每个资源限定符的单独文件夹中。 例如,您的启动器图标的所有密度版本都可以并排显示。
在每个Android应用程序模块中,文件显示在以下组中:
manifests
包含AndroidManifest.xml文件。java
包含Java源代码文件,以包名称分隔,包括JUnit测试代码。res
包含所有非代码资源,如XML布局,UI字符串和位图图像,并将其划分为相应的子目录。
Android Project视图
要查看项目的实际文件结构,包括隐藏在Android视图中的所有文件,请从项目窗口顶部的下拉列表中选择项目(Project)。
当你选择项目视图时,你可以看到更多的文件和目录。 其中最重要的是以下几点:
module-name/
build/
包含构建输出。libs/
包含私有库。src/
包含以下子目录中模块的所有代码和资源文件:
build.gradle (module)
这定义了模块特定的构建配置。build.gradle (project)
这定义了适用于所有模块的构建配置。该文件是该项目的组成部分,因此我们应该使用所有其他源代码将它们保持在版本控制中。官方系统架构图:https://developer.android.google.cn/guide/platform/;
Android Studio官方介绍:https://developer.android.google.cn/studio/;