安卓的发展史
安卓每一代系统发布都会用甜点的名字命名,非常有趣,我收集了一些系统的名字参考一下。
-
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)
系统体系结构
- Applications
核心应用程序的集合,所有安装在手机上的程序都在这一层。 - Applications Framework
提供了各个应用程序所用的API,供开发者使用。 - Libraries + Android Runtime
Libraries提供了C/C++环境为系统提供支持。Android Runtime提供了核心库,可让开发者用Java编写安卓应用程序。 - Linux Kernel
安卓基于Linux,该层为硬件提供驱动。
Dalvik虚拟机简介
Dalvik是Google公司自己设计用于Android平台的虚拟机,它主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
项目目录简介(AS)
Android开发模式视角下的目录(非物理路径)
/app/res
应用资源/app/res/layout
布局配置文件/app/res/drawable
应用图片资源/app/res/mipmap
应用图标资源/app/res/values
软件用的字符串、尺寸、样式
密度范围值 | mipmap文件夹 | drawable文件夹 |
---|---|---|
120~160dpi | mipmap_mdpi | mipmap_mdpi |
160~240dpi | mipmap_hdpi | drawable_hdpi |
240~320dpi | mipmap_xdpi | drawable_xdpi |
320~480dpi | mipmap_xxdpi | drawable_xxdpi |
480~640dpi | mipmap_xxxdpi | drawable_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> <!--设置主题的样式-->
- 调用方式
<!--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/
文件夹中 - 调用方式:
- 通过Java代码调用布局资源文件
//在Activity的onCreate()方法中调用activity_main.xml布局资源
setContentView(R.layout.activity_main);
- 在XML布局文件中调用布局资源文件
<!--在XML布局文件中调用activity_main.xml布局资源-->
<include layout="@layout/activity_main"/>
字符串资源
- 定义位置:
/app/res/values/
文件夹的strings.xml文件中 - 编写字符串资源内容
<resources>
<string name="app_name">字符串</string>
</resources>
- 调用方式:
- 通过Java代码调用字符串资源
//在Activity的onCreate()方法中调用名为app_name的字符串资源
getResources().getString(R.string.app_name);
- 在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>
- 调用方式:
- 通过Java代码调用颜色资源
//在Activity的onCreate()方法中调用名为colorPrimary的颜色资源
getResources().getColor(R.color.colorPrimary);
- 在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>
- 调用方式
- 通过Java代码调用尺寸资源
//在Activity的onCreate()方法中调用名为activity_horizontal_margin的颜色资源
getResources().getDimension(R.dimen.activity_horizontal_margin);
- 在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,毫米) | 屏幕物理长度单位 |
单元测试
-
单元测试是指在应用程序开发过程中对最小的功能模块进行测试,可以在完成某个功能之后对该功能进行单独测试。
-
单元测试分类:
- Android单元测试:连接Android设备、速度比较慢、适合需要调用Android API的单元测试。
- 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
注解类中的方法
- Android单元测试类ExampleInstrumentedTest
-
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类中的静态方法 | 日志信息颜色 |
---|---|---|
Verbose | Log.v() | 黑色 |
Debug | Log.d() | 蓝色 |
Info | Log.i() | 绿色 |
Warning | Log.w() | 橙色 |
Error | Log.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");