# 1. 基础

## 1.1 Android 体系结构

分为四层:

* Linux kernal,linux 内核
* libraries,c/c++ 的开源库
* application framework,应用框架层,用 java 对 libraries 进行了封装
* application,应用层

![体系结构](https://b3logfile.com/file/2021/01/untitled-dc9da4cf.png)

## 1.2 安卓虚拟机

### 1.2.1 dalvik vm

安卓使用的:dalvik vm

jvm:`.java -> .class -> .jar`,基于栈的架构,栈在内存中

dalvik vm:`.java -> .class -> .dex -> .odex`,基于寄存器的架构,寄存器在 CPU 中

java 开发工具包为 jdk

android 开发工具包为 sdk

![image.png](https://b3logfile.com/file/2021/01/image-f8ce1045.png)

### 1.2.2 ART

art(android runtime),从安卓 5.0 开始使用的虚拟机。为了解决流畅性问题。

art 在安装应用的时候,把字节码翻译成机器码,安装之后所占用空间变大(空间换时间)。

dalvik :一般翻译一遍执行,运行慢。

## 1.3 目录结构

链接:[android 目录结构](/archives/1614078449721)

## 1.4 Android 打包过程

![package](https://b3logfile.com/file/2021/01/image-b1bd9221.png)

* java -> class -> dex
* xml 相关的生成 resources.arsc
* 不能编译的文件
* androidManifest.xml 清单文件

App 的安装流程

![30239720.jpg](https://b3logfile.com/file/2021/01/30239720-1b4ff4ec.jpg)

标志一个 android 项目的唯一性

* 项目的包名
* 项目的签名

## 1.5 ADB

链接:[ADB](/archives/1614078558105)

## 1.6 点击事件的写法

链接:[android 点击事件](/archives/1614078664162)

## 1.7 布局

链接:[android 布局](/archives/1614078827110)

## 1.8 测试的相关概念

从代码可见的角度分为:

* 黑盒测试  自动化测试
* 白盒测试

从测试的粒度:

* 单元测试
* 集成测试
* 系统测试

从暴力程度:

* 压力测试

// adb 可以进行 monkey 测试
adb shell 下运行monkey
monkey +次数
monkey -p 包名 次数 // 点具体某一个应用

* 冒烟测试

单元测试流程:

1. 写一个类继承 androidtestcase
2. 写测试的代码
3. 运行测试代码之前 需要在清单文件中声明
 
 ```xml
 // instrumentation 声明在 application 节点外
 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.itheima.test"></instrumentation>
 // uses-library 声明在 application 节点里面
 <uses-library android:name="android.test.runner"/>
  1. 在测试的方法上单击右键 选择 run as -> android junit test

2. 控件

2.1 普通控件

链接:android 控件

2.2 Adapter

链接:Adapter

2.3 9-patch

链接:9-patch

3. 四大组件

3.1 Activity

链接:Activity

3.2 广播

链接:广播

3.3 ContentProvider

链接:ContentProvider

3.4 Service

链接:android 服务

4. Intent

链接:Intent

5. 日志

链接:android 日志

6. 数据和缓存路径

6.1 路径

链接:android 系统路径

6.2 登录案例

链接:android 简单登录案例

6.3 文件存储

链接:android 文件存储

6.4 SharedPreferences

链接:SharedPreferences

6.5 xml 序列化

链接:android xml 序列化

6.6 sqlite

链接:sqlite

7. 多媒体

7.1 播放多媒体文件

链接:MediaPlayer

7.2 拍照和相册

链接:android 拍照和选取照片

7.3 MediaSession 框架

链接:MediaSession 框架

8. 网络通信

8.1 WebView

链接:WebView 的简单使用

8.2 网络请求

链接:android 网络

8.3 Retrofit

链接:Retrofit

9. Fragment

链接:Fragment

10. 权限

链接:android 权限

11. 通知

链接:android 通知

12. 多线程

链接:安卓异步任务 (已经废弃)

12.1 Handler

链接:Handler 详解

12.2 AsyncTask

链接:android AsyncTask

12.3 HandlerThread

链接:HandlerThread

12.4 IntentService

链接:IntentService

13. 知识点总结

链接:Context

链接:android Build 类

链接:LayoutInflater.inflate() 方法参数详解

链接:android 知识点总结

链接:android 屏幕适配方案

链接:Drawable

链接:android style 详解

链接:android 焦点

链接:merge 和 include

链接:android 视图切换

14. RxJava

链接:RxJava

15. 动画

链接:android 帧动画和补间动画

链接:android 属性动画

链接:activity 转场动画

链接:android 子控件进场动画

链接:揭露动画

链接:触摸反馈动画

16. 开源库

链接:android 开源库

17. Drawable

ColorDrawable

NinePatchDrawable

ShapeDrawable

链接:android shape

GradientDrawable

BitmapDrawable

链接:BitmapDrawable

InsetDrawable

链接:InsetDrawable

ClipDRrawable

链接:ClipDrawable

RotateDrawable

链接:activity 转场动画

AnmationDrawable

android 属性动画

LayerDrawable

链接:LayerDrawable

LevelListDrawable

链接:android levelList

StateListDrawalbe

链接:android StateListDrawable

TransitionDrawable

activity 转场动画