安卓系统

Android大致可以分为四层架构:Linux内核层、系统运行库层、应用框架层和应用层。

  • Linux内核:安卓基于Linux内核,Linux为安卓提供底层硬件的驱动。如Wifi驱动、蓝牙驱动、照相机驱动、电源管理。
  • 系统运行库:
    • C\C++:主要的特性支持。如SQLite库提供了数据库的支持,OpenGL|ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。
    • Android运行时库,提供了一些核心库,能够允许开发者使用Java语言来编写Android应用。另外,Android运行时库中还包含了Dalvik虚拟机(5.0系统之后改为ART运行环境),使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况做了优化处理。也就是说,安卓运行时库允许我们用java写安卓的程序,而如果没有Dalvik我们就只能用JVM运行。而Dalvik,是一个专门针对移动设备优化过的类似于JVM的机制。
  • 应用框架层。这一层主要提供了构建应用程序时可能用到的各种API
  • 应用层。所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从Google Play上下载的小游戏,当然还包括你自己开发的程序。

第一行代码Chaper 1 - 图1

安卓系统为我们提供了什么东西?

  • 四大组件:四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)
  • 丰富的系统控件:使得我们可以很轻松地编写出漂亮的界面
  • SQLite数据库:轻量级、运算速度极快的嵌入式关系型数据库
  • 强大的多媒体

开发环境搭建

  • JDK
  • Android SDK
  • Android Studio

相关术语的解析

Dalvik: Android特有的虚拟机,和JVM不同,Dalvik虚拟机非常适合在移动终端上使用!
AVD: (android virtual machine):安卓虚拟设备,就是安卓的模拟器
ADT: (android development tools)安卓开发工具
SDK:(software development kit)软件开发工具包,就是安卓系统,平台架构等的工具集合,如adb.exe
DDMS:(dalvik debug monitor service)安卓调试工具
adb:安卓调试桥,在sdk的platform-tools目录下,功能很多,命令行必备
DX工具:将.class转换成.dex文件
AAPT:(android asset packing tool),安卓资源打包工具
R.java文件:由aapt工具根据App中的资源文件自动生成,可以理解为资源字典
AndroidManifest.xml:app包名 + 组件声明 + 程序兼容的最低版本 + 所需权限等程序的配置文件

项目目录

  • res

所有以drawable开头的文件夹都是用来放图片的,所有以mipmap开头的文件夹都是用来放应用图标的,所有以values开头的文件夹都是用来放字符串、样式、颜色等配置的,layout文件夹是用来放布局文件的

  • jcenter

jcenter是什么意思呢?其实它是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。

build.gradle代码分析

image.png
首先第一行应用了一个插件,一般有两种值可选:

  • com.android.application 表示这是一个应用程序模块
  • com.android.library 表示这是一个库模块

android闭包,在这个闭包中我们可以配置项目构建的各种属性
defaultConfig闭包,defaultConfig闭包中可以对项目的更多细节进行配置
buildTypes闭包,buildTypes闭包中用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug,一个是release
dependencies闭包。这个闭包的功能非常强大,它可以指定当前项目所有的依赖关系。通常Android Studio项目一共有3种依赖方式:本地依赖、库依赖和远程依赖。

Android Log日志工具

❑ Log.v()。用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种。
❑ Log.d()。用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。
❑ Log.i()。用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户行为数据。对应级别info,比debug高一级。
❑ Log.w()。用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别warn,比info高一级。
❑ Log.e()。用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级。