课后题:
1.简述Android源代码的编译过程
每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行:Java源文件经过JDK编译器编译成class文件后,Dalvik虚拟机中的Dx工具会将部分的class文件转换成dex文件(dex文件中包含多个类),dex文件相比jar更加紧凑,但是为了在运行过程中进一步提升性能,dex文件还会进一步优化成odex文件。
下图为Dalvik虚拟机编译文件过程:
2.简述Android系统架构包含的层次以及各层的特点
Android系统采用分层架构,从高到低分为4层,分别为依次是应用程序层(Applications)、应用程序框架层(Application Framework)、核心类库(Libraries)和Linux内核(Linux Kernel),各层的特点具体如下:
①应用程序层:是一个核心应用程序的集合,安装在手机上的应用程序都属于这一层,例如系统自带的联系人程序、短信程序、下载的小游戏
②应用程序框架层:Android自带的一些核心应用就是使用这些API完成的,主要提供了构建应用程序时用到的各种API。例如活动管理器、通知管理器、内容提供者等,开发者也可以通过这些API开发应用程序
③核心类库:主要包含了系统库和Android运行环境
*(了解)
1)系统库主要通过C/C++库来为Android系统提供主要的特性支持,如OpenGL/EL库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持
2)Android运行时库主要提供了一些核心库,能够允许开发者使用Java语言来编写Android应用程序,还包括了Dalvik虚拟机
④Linux内核:为Android设备的各种硬件提供了底层的驱动,如:显示驱动、音频驱动、照相机驱动、蓝牙驱动、电源管理驱动等等
1.1Android简介
1.1.1通信技术
1G:仅限语音的蜂窝煤电话标准/只能进行通话,并且通话是锁定在一定频率上的
2G:以数字语音传输技术为核心/接收数据19.6kbit/s
3G:处理媒体形式/在传输声音和速度上有很大提升/2Mbit/s、384kbit/s、144kbit/s
4G:100Mbit/s/无线服务
5G:10Gbit/s
1.1.3Android体系结构
1.应用程序层
是一个核心应用程序的集合,所有安装在手机上的应用程序都属于这一层,例如系统自带的联系人程序、短信程序等等
2.应用程序框架层
主要提供了构建应用程序时用到的各种API。Android自带的一些核心应用就是使用这些API完成的,例如活动管理器(Activity Manager)、通知管理器(Notification Manager)、内容提供者(ContentProvider)等,开发者也可以通过这些API开发应用程序
3.核心类库
核心类库中包含了系统库及Android运行环境,其中:
①系统库主要是通过C/C++库来为Android系统提供主要的特性支持
②Android运行时库主要提供了一些核心库,能欧允许开发者使用Java语言来编写Android应用程序,另外,Android运行时库中还包括了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例
4.Linux内核
为Android设备的各种硬件提供了底层的驱动
1.1.4Dalvik虚拟机
Dalvik的指令集基于寄存器架构,执行其特有的dex文件来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能
每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行:
Java源文件经过JDK编译器变异成class文件之后,Dalvik虚拟机中的Dx工具会将部分class文件转换成dex文件,dex文件包含多个类,dex文件相比jar更加紧凑,但是为了在运行过程中进一步提高性能,dex文件还会进一步优化成odex文件
每个Android程序都运行在一个Dalvik虚拟机实例中,而每一个Dalvik虚拟机实例都是一个独立的进程空间,每个进程之间可以通信
1.4Android程序结构
1.4.1 app
用于存放程序的代码和资源等内容,它包含了很多子目录:
1.4.2 build.gradle
是程序的gradle构建脚本
1.4.3 local.properties
用于指定项目中所使用的的SDK路径
1.4.4 setting.gradle
用于配置Android程序中使用到的子项目
1.5资源的管理与使用
Android程序中资源指的是可以在代码中使用的外部文件,这些文件作为应用程序的一部分,被编译到App中,在Android程序中,资源文件都保存在res目录下
1.5.1图片资源
扩展名:.png、.jpg、.gif、.9.png等
根据用途分为:
①应用图标资源,存放在以mipmap开头的文件夹中
②界面中使用的图片资源,存放在drawable开头的文件夹中
根据设备屏幕密度的不同,Android系统会自动匹配不同文件夹中的图片资源
调用:
①通过Java代码调用图片资源
getResourses().getDrawable(R.mipmap.ic_launcher);
getResourses().getDrawable(R.drawable.icon);
②在XML布局文件中调用图片资源
@mipmap/ic_launcher
@drawable/icon
1.5.2主题与样式资源
用于为界面元素定义显示风格
1.主题
一种或多种的格式化属性集合
调用主题资源可改变窗体的样式,对整个应用或某个Activity存在全局性影响
主题资源定义在res/values目录下的style.xml文件中
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"
<!--Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
......
</style>
</resources>
根元素resources中可以包含多个style标签,每个style标签中也可以包含多个item标签
调用主题:
①AndroidManifest.xml:
<application
...
android.theme="@style/AppTheme">
</application>
②在java代码中
setTheme(R.style.AppTheme);
2.样式
用来美化View控件,改变主题可以改变整个窗体样式,但是不能设置View控件的具体样式
存放res/values目录下的style.xml文件中
<resources>
<style name="textViewStyle">
<item name="android:layout_width">20dp</item>
<item name="android:layout_height">20dp</item>
<item name="android:background">#f54e39</item>
</style>
</resources>
调用:
<TextView
......
style="@style/textViewStyle"/>
1.5.3布局资源
创建一个Android程序时,默认会在res/layout文件夹中生成一个布局资源文件activity_main.xml,也可在res/layout文件夹中穿件新的布局资源文件
调用:
①java代码
在Activity中,找到onCreate()方法,在该方法中通过调用setContentView()方法来加载Activity对应的布局资源文件
setContentView(R.layout.activity_main);
②在XML布局中调用
<include layout="@layout/activity_main"/>
1.5.4字符串资源
存放在res/values目录中的strings.xml文件夹中
<resources>
<string name="app_name">字符串</string>
</resources>
调用:
①通过Java代码
getResources().getString(R.string.app_name)
②在XML布局文件中
@string/app_name
1.5.5颜色资源
定义在res/values/colors.xml文件中
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorPrimary">#FF4081</color>
</resources>
调用:
①Java代码
getResources().getColor(R.color.colorPrimary);
②XML布局
@color/colorPrimary
定义颜色值:
RGB(红,蓝,绿)三原色和一个透明度(Alpha)
颜色值必须以#开头,#后面显示Alpha-Red-Green-Blue形式,Alpha值可以省略
四种形式:
①#RGB
②#ARGB
③#RRGGBB
④#AARRGGBB
1.5.6尺寸资源
在Android界面中View的宽高和View之间的间距值是通过尺寸资源设置的,资源通常定义在res/values/dimens.xml文件中
<resources>
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>
调用:
①Java
getResources().getDimension(R.dimen.activity_horizontal_margin);
②XML
@dimen/activity_horizontal_margin
Android支持的尺寸单位:
px:像素,每个px对应屏幕上的一个点
dp:设备独立像素,与屏幕密度无关/自动适配
sp:比例像素,主要处理字体大小,会在不同像素密度的设备上自动适配
in:英寸,标准长度单位1,英寸=2.54厘米,尺寸是指屏幕对角线的长度
pt:磅,屏幕物理长度单位,1磅为1/72英寸
mm:毫米,屏幕物理长度单位
1.6程序调试
1.6.1单元测试
Android程序开发过程中对最小功能模块进行测试,单元测试包括Android单元测试和Junit测试
1.Android单元测试
需连接Android设备,速度表较慢,适合需要调用Android API的单元测试
使用@RunWith(AndroidJUnit4.class)注解ExampleInstrumentedTest类,@Test注解该类中的方法
2.Junit测试
不需要连接Android涉笔,在本地即可运行,速度快
适合只对Java代码功能进行的单元测试
ExampleUnitTest.java文件中使用@Test注解该类中的方法
1.6.2LogCat的使用
LogCat是Android中的命令行工具,用于获取程序从启动到关闭的日志信息
Android程序运行在设备中时,程序的调试信息就会输出到该设备单独的日志缓冲区中
Android使用android.util.Log类的静态方法实现输出程序的调试信息,Log类所输出的日志内容分为六个级别:
①Log.v() Verbose级别
②Log.d() Debug级别
③Log.i() Info级别
④Log.w() Warning级别
⑤Log.e() Error级别
⑥Log.wtf() Assert级别
由低到高