安卓的发展史


安卓每一代系统发布都会用甜点的名字命名,非常有趣,我收集了一些系统的名字参考一下。
  • Android 1.5 Cupcake(纸杯蛋糕):2009年4月30日发布。

  • Android 1.6 Donut(甜甜圈):2009年9月15日发布。

  • Android 2.0/2.0.1/2.1 Eclair(法式闪电泡芙/松饼):2009年10月26日发布。

  • Android 2.2/2.2.1 Froyo(冻酸奶):2010年5月20日发布。

  • Android 2.3.x Gingerbread(姜饼):2010年12月7日发布。

  • Android 4.0 IceCreamSandwich(冰激凌三明治):2011年10月19日在香港发布。

  • Android 3.0 Honeycomb (蜂巢):2011年2月3日发布。

  • Android 4.0 Ice Cream (冰激凌三明治):2011年10月19日发布。

  • Android 4.1 JellyBean(果冻豆):2012年6月28日发布。

  • Android 4.4 KitKat(奇巧):2013年11月1日发布。

  • Android 5.0 Lollipop(棒棒糖):2014年10月16日发布。

  • Android 6.0 Marshmallow(棉花糖):2015年9月30日发布。

  • Android 7.0 Nougat(牛轧糖):2016年8月31日发布。

  • Android 8.0 Oreo(奥利奥):2017年12月5日发布。

  • Android 9.0 Pie(派):2018年8月7日发布。

  • Android 10.0 :2019年9月3日发布。(不再采用甜点命名,正式版也不叫Q)


系统体系结构


  1. Applications
    核心应用程序的集合,所有安装在手机上的程序都在这一层。
  2. Applications Framework
    提供了各个应用程序所用的API,供开发者使用。
  3. Libraries + Android Runtime
    Libraries提供了C/C++环境为系统提供支持。Android Runtime提供了核心库,可让开发者用Java编写安卓应用程序。
  4. Linux Kernel
    安卓基于Linux,该层为硬件提供驱动。

Android system structure

Dalvik虚拟机简介


Dalvik是Google公司自己设计用于Android平台的虚拟机,它主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。

Dalvik Architecture

图:Dalvik虚拟机编译文件过程

项目目录简介(AS)


Android开发模式视角下的目录(非物理路径)

  1. /app/res应用资源
  2. /app/res/layout布局配置文件
  3. /app/res/drawable应用图片资源
  4. /app/res/mipmap应用图标资源
  5. /app/res/values软件用的字符串、尺寸、样式
密度范围值mipmap文件夹drawable文件夹
120~160dpimipmap_mdpimipmap_mdpi
160~240dpimipmap_hdpidrawable_hdpi
240~320dpimipmap_xdpidrawable_xdpi
320~480dpimipmap_xxdpidrawable_xxdpi
480~640dpimipmap_xxxdpidrawable_xxxdpi


图片资源


  • 用Java代码调用图片资源的方法
//调用mipmap文件夹中资源文件
getResources().getDrawable(R.mipmap.ic_launcher); 
//调用以drawable开头的文件夹中的资源文件
getResources().getDrawable(R.drawable.icon); 

  • 用xml布局文件调用图片资源
@mipmap/ic_launcher   //调用mipmap文件夹中的资源文件
@drawable/icon        //调用以drawable开头的文件夹中的资源文件



主题资源


  • 主题是包含一种或多种的格式化属性集合,在程序中调用主题资源可改变窗体的样式,对整个应用或某个Activity存在全局性影响。

  • 定义位置:/app/res/values/目录下的styles.xml文件中

  • 标签

<style></style>    <!--定义主题-->
<item></item>      <!--设置主题的样式-->

Android_style

  • 调用方式
<!--XML-->
android:theme ="@style/AppTheme"
//Java
setTheme(R.style.AppTheme);

样式资源


  • 样式:设置View的具体样式。
  • 定义位置:/app/res/values/目录下的styles.xml文件中
  • 标签
<style></style>  <!--定义样式-->
<item></item>    <!--设置控件的样式-->

  • 在XML文件中调用方法
    style="@style/textViewSytle"

布局资源


  • 布局资源通常用于搭建程序中的各个界面。
  • 定义位置:/app/res/layout/文件夹中
  • 调用方式:
  1. 通过Java代码调用布局资源文件
//在Activity的onCreate()方法中调用activity_main.xml布局资源
setContentView(R.layout.activity_main);

  1. 在XML布局文件中调用布局资源文件
<!--在XML布局文件中调用activity_main.xml布局资源-->
<include layout="@layout/activity_main"/>

字符串资源


  • 定义位置:/app/res/values/文件夹的strings.xml文件中
  • 编写字符串资源内容
<resources>
    <string name="app_name">字符串</string>
</resources>

  • 调用方式:
  1. 通过Java代码调用字符串资源
//在Activity的onCreate()方法中调用名为app_name的字符串资源
getResources().getString(R.string.app_name); 

  1. 在XML布局文件中调用字符串资源
<!--在XML布局文件中调用名为app_name字符串资源-->
@string/app_name

颜色资源


  • 定义位置:/app/res/values/文件夹的colors.xml文件中
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

  • 调用方式:
  1. 通过Java代码调用颜色资源
//在Activity的onCreate()方法中调用名为colorPrimary的颜色资源
getResources().getColor(R.color.colorPrimary);

  1. 在XML布局文件中调用颜色资源
<!--在XML布局文件中调用名为colorPrimary的颜色资源-->
@color/colorPrimary

尺寸资源


  • 尺寸资源:例如View的宽高值
  • 定义位置:/app/res/values/文件夹的dimens.xml文件中
  • 创建dimens.xml文件:
    右键单击values文件夹,依次选中New、XML、Values XML File,在弹出框中输入dimens
  • 编写尺寸资源
<resources>
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>
  • 调用方式
  1. 通过Java代码调用尺寸资源
//在Activity的onCreate()方法中调用名为activity_horizontal_margin的颜色资源
getResources().getDimension(R.dimen.activity_horizontal_margin);

  1. 在XML布局文件中调用尺寸资源
<!--在XML布局文件中调用名为activity_horizontal_margin的尺寸资源-->
@dimen/activity_horizontal_margin

  • Android支持的尺寸单位
单位名称解释
px(pixels,像素)每个px对应屏幕上的一个点
dp(Density-independent Pixels,设备独立像素)是一种与屏幕密度无关的尺寸单位
sp(scaled pixels,比例像素)主要处理字体的大小,可以根据用户字体大小首选项进行缩放
in(inches,英寸)标准长度单位
pt(points,磅)屏幕物理长度单位,1磅为1/72英寸
mm(Millimeters,毫米)屏幕物理长度单位


单元测试


  • 单元测试是指在应用程序开发过程中对最小的功能模块进行测试,可以在完成某个功能之后对该功能进行单独测试。

  • 单元测试分类:

    1. Android单元测试:连接Android设备、速度比较慢、适合需要调用Android API的单元测试。
    2. Junit单元测试:不依赖Android设备(在本地即可运行)、速度快、适合只对java代码功能进行的单元测试。
  • Android Studio 3.2版本在创建项目时,会默认在app/src/androidTest和app/src/test文件夹中创建Android单元测试类ExampleInstrumentedTest和Junit单元测试类ExampleUnitTest。

    • Android单元测试类ExampleInstrumentedTest
      • 使用@RunWith(AndroidJUnit4.class)注解ExampleInstrumentedTest类
      • @Test注解类中的方法
    • Junit单元测试类ExampleUnitTest
      • @Test注解类中的方法
  • ExampleInstrumentedTest.java类中的代码(Android单元测试)

package cn.itcast.helloworld;
@RunWith(AndroidJUnit4.class)  // 注解类
public class ExampleInstrumentedTest {
	@Test  // 注解方法
	public void useAppContext() {
		// Context of the app under test.
 		Context appContext = InstrumentationRegistry.getTargetContext();
		assertEquals("cn.itcast.helloworld", appContext.getPackageName());
		//期望两个参数值相等
	}
}

  • ExampleInstrumentedTest.java类中的代码(Junit单元测试
package cn.itcast.helloworld;
public class ExampleUnitTest {
	@Test  // 注解方法
	public void addition_isCorrect() {
		assertEquals(4, 2 + 2);  // 期望两个参数值相等
	}
}


LogCat


  • LogCat是Android中的命令行工具,用于获取程序从启动到关闭的日志信息。
  • Log类所输出的日志内容分为六个级别。
级别Log类中的静态方法日志信息颜色
VerboseLog.v()黑色
DebugLog.d()蓝色
InfoLog.i()绿色
WarningLog.w()橙色
ErrorLog.e()红色
Assert(新版加入)Log.wtf()红色
  • LogCat的使用
Log.v("MainActivity", "Verbose");  //参数1:打印信息的标签。参数2:需要打印的信息
Log.d("MainActivity","Degug");
Log.i("MainActivity","Info");
Log.w("MainActivity", "Warning");
Log.e("MainActivity", "Error");
Log.wtf("MainActivity","Assert");