第1章_Android基础与开发环境
Android是一个基于Linux内核的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。开放性:开源系统,任何人都可以查看和修改源代码丰富的硬件支持:支持多种硬件平台应用程序平等性:所有应用程序地位平等基于组件的架构:应用程序可以调用其他应用程序的组件Dalvik是Google公司专门为Android平台设计的虚拟机,它负责执行And
第1章:Android基础与开发环境
学习目标
- 掌握Android系统架构的四层结构
- 理解Dalvik虚拟机的特点和工作原理
- 熟悉Android项目的目录结构
- 了解Android开发环境的搭建过程
- 掌握项目配置文件的作用
1.1 Android系统简介
1.1.1 什么是Android
Android是一个基于Linux内核的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
关键特点:
- 开放性:开源系统,任何人都可以查看和修改源代码
- 丰富的硬件支持:支持多种硬件平台
- 应用程序平等性:所有应用程序地位平等
- 基于组件的架构:应用程序可以调用其他应用程序的组件
1.2 Android系统架构 ⭐⭐⭐
Android系统采用分层架构设计,从高到低分为四层:
1.2.1 四层架构详解
┌─────────────────────────────────────────┐
│ 应用程序层 (Applications) │
│ - 短信、联系人、浏览器、日历等 │
├─────────────────────────────────────────┤
│ 应用程序框架层 (Application Framework) │
│ - Activity Manager │
│ - Window Manager │
│ - Content Provider │
│ - View System │
│ - Package Manager │
│ - Resource Manager │
├─────────────────────────────────────────┤
│ 核心类库层 (Libraries) │
│ ├─ 系统库 (C/C++) │
│ │ - Surface Manager │
│ │ - Media Framework │
│ │ - SQLite │
│ │ - OpenGL ES │
│ │ - WebKit │
│ └─ Android运行时 │
│ - 核心库 (Java API) │
│ - Dalvik虚拟机 │
├─────────────────────────────────────────┤
│ Linux内核层 (Linux Kernel) │
│ - 驱动程序(显示、音频、摄像头等) │
│ - 进程管理、内存管理、网络协议栈 │
└─────────────────────────────────────────┘
1.2.2 各层详细说明
第一层:应用程序层(Applications)
定义: 所有安装在手机上的应用程序都属于这一层
包含内容:
- 系统内置应用:短信(SMS)、联系人(Contacts)、浏览器(Browser)、日历(Calendar)
- 第三方应用:微信、QQ、抖音等
- 用户自己开发的应用
特点:
- 所有应用程序地位平等
- 都使用相同的API和框架
- 可以被替换或卸载(系统应用除外)
第二层:应用程序框架层(Application Framework)
定义: 为应用程序开发提供API接口的层
核心组件:
| 组件名称 | 作用 |
|---|---|
| Activity Manager | 管理应用程序的生命周期,维护Activity栈 |
| Window Manager | 管理窗口程序,负责窗口的创建、销毁和显示 |
| Content Provider | 实现应用程序之间的数据共享 |
| View System | 构建应用程序的UI界面,包括列表、文本框、按钮等 |
| Package Manager | 管理应用程序的安装、卸载、更新 |
| Telephony Manager | 管理手机通话功能 |
| Resource Manager | 管理应用程序使用的各种资源(字符串、图片等) |
| Location Manager | 提供位置服务 |
| Notification Manager | 管理通知栏消息 |
重要性:
- 开发者主要通过这一层的API进行应用开发
- 提供了构建应用所需的各种服务
- 简化了开发流程,无需直接操作底层
第三层:核心类库层(Libraries)
定义: Android系统的核心功能层,包含系统库和运行时环境
分为两部分:
(1)系统库(C/C++实现)
| 库名称 | 功能 |
|---|---|
| Surface Manager | 管理显示子系统,为多个应用程序提供2D和3D图层的无缝融合 |
| Media Framework | 多媒体库,支持多种音频和视频格式的播放和录制 |
| SQLite | 轻量级关系数据库引擎,为应用提供数据存储功能 |
| OpenGL ES | 3D图形库,提供3D绘图支持 |
| WebKit | Web浏览器引擎,支持浏览器和WebView控件 |
| SGL | 底层2D图形引擎 |
| SSL | 网络安全通信 |
| libc | 标准C库,针对嵌入式Linux设备优化 |
(2)Android运行时(Android Runtime)
核心库(Core Libraries):
- 提供Java语言核心API的实现
- 包含大部分Java SE和Android特有API
Dalvik虚拟机:
- Android的核心运行环境
- 详细内容见下一节
第四层:Linux内核层(Linux Kernel)
定义: Android系统的基础层,提供底层驱动和系统服务
主要功能:
-
硬件驱动:
- 显示驱动(Display Driver)
- 摄像头驱动(Camera Driver)
- 音频驱动(Audio Driver)
- 键盘驱动(Keypad Driver)
- WiFi驱动
- Binder IPC驱动(进程间通信)
-
系统服务:
- 进程管理
- 内存管理
- 设备管理
- 文件系统
- 网络协议栈
特点:
- 基于Linux 2.6或更高版本内核
- 针对移动设备进行了优化
- 提供了硬件抽象层(HAL)
1.2.3 四层架构记忆口诀
口诀: “应用框架核内核”
- 应:应用程序层(Applications)
- 用框架:应用程序框架层(Application Framework)
- 核:核心类库层(Libraries + Android Runtime)
- 内核:Linux内核层(Linux Kernel)
记忆技巧:
- 从上到下:用户→开发者→系统→硬件
- 从抽象到具体:应用→API→运行时→内核
1.3 Dalvik虚拟机 ⭐⭐⭐
1.3.1 什么是Dalvik虚拟机
Dalvik是Google公司专门为Android平台设计的虚拟机,它负责执行Android应用程序。
位置: 属于Android系统架构的核心类库层(第三层)
1.3.2 Dalvik的核心特点
特点1:基于寄存器架构 ⭐
传统JVM:基于栈架构
Dalvik VM:基于寄存器架构
优势:
- 执行效率更高
- 指令数量更少
- 更适合移动设备的CPU
对比示例:
栈架构(JVM)执行 a = b + c:
1. push b
2. push c
3. add
4. pop a
(需要4条指令)
寄存器架构(Dalvik)执行 a = b + c:
1. add a, b, c
(只需1条指令)
特点2:执行DEX文件 ⭐⭐⭐
编译流程:
.java源文件
↓ (javac编译)
.class文件
↓ (dx工具转换) ⭐
.dex文件
↓ (Dalvik虚拟机执行)
运行的应用程序
重点: Dalvik虚拟机中的Dx工具会将部分class文件转换成dex文件
DEX文件优势:
- 文件体积更小(相比多个.class文件)
- 加载速度更快
- 内存占用更少
- 一个APK中通常只有一个classes.dex文件
特点3:运行优化
ODEX优化:
.dex文件
↓ (首次运行时优化)
.odex文件(优化后的dex)
↓
更快的执行速度
优化内容:
- 调整字节码顺序
- 移除冗余信息
- 针对设备硬件优化
特点4:每个应用独立进程
- 每个Android应用运行在独立的Dalvik虚拟机实例中
- 每个虚拟机实例对应一个独立的进程空间
- 进程之间可以通过IPC(进程间通信)进行通信
- 一个应用崩溃不会影响其他应用
1.3.3 Dalvik vs JVM
| 特性 | Dalvik | JVM |
|---|---|---|
| 架构 | 寄存器架构 | 栈架构 |
| 执行文件 | .dex | .class |
| 内存占用 | 较小 | 较大 |
| 执行效率 | 较高 | 较低 |
| 指令长度 | 16位 | 8位 |
| 适用场景 | 移动设备 | PC/服务器 |
1.3.4 考试重点
必记内容:
- Dalvik虚拟机是基于寄存器的架构(不是栈)
- Dx工具将**.class文件转换成.dex文件**
- Dalvik属于Android系统架构的核心类库层
- 每个应用运行在独立的Dalvik虚拟机实例中
1.4 Android项目结构 ⭐⭐⭐
1.4.1 完整目录结构
MyApp/
├── app/ # 应用模块目录
│ ├── src/ # 源代码目录
│ │ ├── main/ # 主代码
│ │ │ ├── java/ # Java/Kotlin源代码
│ │ │ │ └── com/example/myapp/
│ │ │ │ └── MainActivity.kt
│ │ │ ├── res/ # 资源文件目录 ⭐
│ │ │ │ ├── drawable/ # 图片资源
│ │ │ │ ├── layout/ # 布局文件 ⭐
│ │ │ │ ├── values/ # 值资源 ⭐
│ │ │ │ │ ├── strings.xml # 字符串
│ │ │ │ │ ├── colors.xml # 颜色
│ │ │ │ │ └── themes.xml # 主题样式
│ │ │ │ ├── mipmap/ # 应用图标
│ │ │ │ └── xml/ # XML配置
│ │ │ ├── assets/ # 原始资源 ⭐
│ │ │ └── AndroidManifest.xml # 清单文件 ⭐⭐⭐
│ │ ├── androidTest/ # Android测试
│ │ └── test/ # 单元测试
│ ├── build/ # 编译生成文件
│ └── build.gradle.kts # 模块级构建配置 ⭐⭐
├── gradle/ # Gradle包装器
├── build.gradle.kts # 项目级构建配置
├── settings.gradle.kts # 项目设置
└── gradlew.bat # Gradle执行脚本(Windows)
1.4.2 核心文件和目录详解
1. AndroidManifest.xml(清单文件)⭐⭐⭐
位置: app/src/main/AndroidManifest.xml
作用: 整个应用程序的配置文件
主要内容:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- 1. 声明权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- 2. 注册应用组件 -->
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<!-- 注册Activity -->
<activity
android:name=".MainActivity"
android:exported="true">
<!-- 声明为启动Activity -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- 注册Service -->
<service android:name=".MyService"/>
<!-- 注册BroadcastReceiver -->
<receiver android:name=".MyReceiver"/>
<!-- 注册ContentProvider -->
<provider
android:name=".MyProvider"
android:authorities="com.example.myapp.provider"
android:exported="false"/>
</application>
</manifest>
关键点:
- ✅ 所有的Activity、Service、BroadcastReceiver、ContentProvider都必须在此注册
- ✅ 应用需要的权限必须在此声明
- ✅ 应用的图标、名称、主题在此配置
- ✅ 可以设置UI布局吗?❌ 不可以!(布局在layout目录下)
考试常见问题:
Q: AndroidManifest.xml可以设置UI布局吗?
A: 不可以。UI布局在res/layout目录下的XML文件中定义。
Q: Activity不在清单文件中注册会怎样?
A: 运行时会抛出ActivityNotFoundException异常。
Q: 清单文件的作用是什么?
A: 配置应用的组件、权限、图标、主题等信息。
2. R.java(资源索引文件)⭐⭐⭐
位置: 自动生成在 app/build/generated/source/r/ 目录下
作用: 资源文件的索引清单,为每个资源生成唯一的整型ID
重要特点:
- ❌ 不能手动修改!系统自动生成
- ✅ res/目录下的资源会自动在R.java中生成ID
- ❌ assets/目录下的资源不会在R.java中生成ID
- ✅ 通过R.id.xxx、R.layout.xxx、R.string.xxx等方式访问资源
示例代码:
// R.java(自动生成,不要修改)
public final class R {
public static final class id {
public static final int button1 = 0x7f080001;
public static final int textView1 = 0x7f080002;
}
public static final class layout {
public static final int activity_main = 0x7f040001;
}
public static final class string {
public static final int app_name = 0x7f0a0001;
}
}
在代码中使用:
// 加载布局
setContentView(R.layout.activity_main)
// 查找控件
val button = findViewById<Button>(R.id.button1)
// 获取字符串资源
val appName = getString(R.string.app_name)
考试重点:
Q: R.java文件需要开发者手动修改吗?
A: 不需要!R.java是系统自动生成的,手动修改会被覆盖。
Q: 如果R文件找不到,可能是什么原因?
A: XML布局文件(activity_main.xml等)中有语法错误。
Q: assets目录下的文件会在R.java生成ID吗?
A: 不会!只有res/目录下的资源才会生成ID。
3. res/资源目录 ⭐⭐⭐
位置: app/src/main/res/
特点:
- ✅ 所有资源都会在R.java中生成ID
- ✅ 只能包含固定的子目录,不能随意创建
- ✅ 系统会根据设备配置自动选择合适的资源
子目录详解:
(1)drawable/ - 图片资源
drawable/
├── drawable-ldpi/ # 低分辨率(120dpi)
├── drawable-mdpi/ # 中分辨率(160dpi)
├── drawable-hdpi/ # 高分辨率(240dpi)
├── drawable-xhdpi/ # 超高分辨率(320dpi)
├── drawable-xxhdpi/ # 超超高分辨率(480dpi)
└── drawable-xxxhdpi/ # 超超超高分辨率(640dpi)
命名规则:⭐⭐
- ✅ 只能包含小写字母、数字、下划线
- ✅ 必须以字母开头
- ❌ 不能以数字开头
- ❌ 不能包含大写字母
- ❌ 不能包含空格和特殊字符
示例:
✅ 正确:abc_9.jpg, icon_user.png, bg_main.xml
❌ 错误:9abc.jpg(数字开头)
❌ 错误:Abc.jpg(包含大写)
❌ 错误:abc Start.jpg(包含空格)
(2)layout/ - 布局文件
layout/
├── activity_main.xml # 主Activity布局
├── fragment_home.xml # Fragment布局
├── item_list.xml # 列表项布局
└── dialog_confirm.xml # 对话框布局
布局文件示例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World" />
</LinearLayout>
(3)values/ - 值资源
values/
├── strings.xml # 字符串资源
├── colors.xml # 颜色资源
├── themes.xml # 主题样式
├── dimens.xml # 尺寸资源
└── styles.xml # 样式资源
strings.xml - 字符串资源:
<resources>
<string name="app_name">My Application</string>
<string name="welcome">欢迎使用</string>
</resources>
<!-- 使用方式 -->
<!-- XML中: android:text="@string/welcome" -->
<!-- 代码中: getString(R.string.welcome) -->
colors.xml - 颜色资源:⭐
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="white">#FFFFFFFF</color>
<color name="black">#FF000000</color>
</resources>
<!-- 使用方式 -->
<!-- XML中: android:textColor="@color/purple_200" -->
<!-- 代码中: ContextCompat.getColor(this, R.color.purple_200) -->
颜色值格式:⭐⭐
#RGB # 3位:例如 #F00 (红色)
#ARGB # 4位:例如 #8F00 (半透明红色)
#RRGGBB # 6位:例如 #FF0000 (红色)
#AARRGGBB # 8位:例如 #80FF0000 (半透明红色)
合法值:
✅ #ddd
✅ #eeee
✅ #ffffff
✅ #ffffffff
非法值:
❌ #gggggg(g不是16进制字符)
(4)mipmap/ - 应用图标
mipmap/
├── mipmap-hdpi/
│ └── ic_launcher.png
├── mipmap-xhdpi/
│ └── ic_launcher.png
└── mipmap-xxhdpi/
└── ic_launcher.png
用途: 专门存放应用图标,系统会根据屏幕密度自动选择
4. assets/资源目录 ⭐⭐
位置: app/src/main/assets/
特点:
- ✅ 可以任意创建子文件夹
- ✅ 文件会原封不动打包到APK中
- ❌ 不会在R.java中生成资源ID
- ✅ 不会被编译成二进制格式
- ✅ 适合存放大文件、音视频、字体、网页等
与res/目录的对比:
| 特性 | res/ | assets/ |
|---|---|---|
| 子目录 | 固定的子目录 | 可任意创建 |
| R.java | 生成ID | 不生成ID |
| 文件格式 | 部分会被编译 | 原封不动 |
| 访问方式 | R.xxx.xxx | AssetManager |
| 命名限制 | 严格(小写、无空格) | 相对宽松 |
| 使用判断 | 未使用不打包 | 全部打包 |
访问assets文件:
// 读取assets目录下的文件
val inputStream = assets.open("data.json")
val text = inputStream.bufferedReader().use { it.readText() }
考试重点:
Q: assets目录下的资源会在R.java生成ID吗?
A: 不会。
Q: assets和res目录的主要区别是什么?
A: assets可以任意建立子文件夹,文件原封不动打包;
res只能有固定子目录,资源会在R.java生成ID。
Q: 什么类型的文件适合放在assets目录?
A: 大文件、音视频、字体文件、HTML网页等原始资源。
5. build.gradle.kts(构建配置文件)⭐⭐
位置: app/build.gradle.kts
作用: 配置应用的编译选项、依赖库、SDK版本等
示例代码:
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.myapp"
compileSdk = 34 // 编译SDK版本 ⭐
defaultConfig {
applicationId = "com.example.myapp"
minSdk = 24 // 最低支持版本
targetSdk = 34 // 目标版本
versionCode = 1
versionName = "1.0"
}
buildTypes {
release {
isMinifyEnabled = false // 是否混淆
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"))
}
}
}
dependencies {
// 依赖库配置 ⭐
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
// 测试依赖
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
}
重要配置项:
compileSdk:编译时使用的SDK版本minSdk:应用支持的最低Android版本targetSdk:应用针对的目标Android版本dependencies:第三方库依赖
考试重点:
Q: 配置第三方依赖库、SDK编译版本在哪个文件?
A: app/build.gradle 或 app/build.gradle.kts
Q: 如果要添加网络请求库,应该在哪里配置?
A: 在build.gradle的dependencies块中添加。
1.4.3 res/raw 目录 ⭐
位置: app/src/main/res/raw/(需要手动创建)
特点:
- ✅ 文件会在R.java中生成资源ID
- ✅ 文件原封不动存储,不会转换为二进制
- ✅ 适合存放音频、视频等多媒体文件
- ❌ 未使用的文件会在打包时判断是否包含
与assets对比:
raw/目录:
- 会生成R.raw.xxx的ID
- 通过R.raw.xxx访问
- 不能创建子目录
assets/目录:
- 不会生成ID
- 通过文件名字符串访问
- 可以创建子目录
访问raw资源:
// 读取raw目录下的文件
val inputStream = resources.openRawResource(R.raw.music)
1.5 Android开发环境搭建
1.5.1 搭建步骤概述
Android开发环境的搭建分为3步:
步骤1:安装Android Studio
- 下载Android Studio安装包
- 运行安装程序,选择安装路径
- 配置Android Studio设置(主题、插件等)
- 完成首次启动配置
步骤2:创建模拟器(AVD)
- 打开AVD Manager(Android Virtual Device Manager)
- 点击"Create Virtual Device"
- 选择设备类型(手机、平板等)
- 下载对应的Android SDK System Image
- 配置模拟器参数(内存、存储等)
- 创建并启动模拟器
步骤3:下载SDK
- 打开SDK Manager
- 下载所需的Android SDK版本(如API 34)
- 下载SDK Tools工具
- Android SDK Build-Tools
- Android SDK Platform-Tools
- Android Emulator
1.5.2 开发环境相关路径
Gradle插件默认保存路径:⭐
C:\Users\当前登录的用户名\.gradle
常见错误路径:
- ❌ C:\Users.gradle
- ❌ C:\AppData.gradle
- ❌ C:\AppData\Roaming.gradle
1.6 Android源代码编译过程 ⭐⭐
1.6.1 完整编译流程
┌─────────────┐
│ .java │ Java源文件
│ 源文件 │
└──────┬──────┘
│ javac编译
↓
┌─────────────┐
│ .class │ Java字节码
│ 文件 │
└──────┬──────┘
│ dx工具转换 ⭐⭐⭐
↓
┌─────────────┐
│ .dex │ Dalvik可执行文件
│ 文件 │
└──────┬──────┘
│ 打包
↓
┌─────────────┐
│ .apk │ Android安装包
│ 文件 │
└──────┬──────┘
│ 安装到设备
↓
┌─────────────┐
│ 首次运行 │ 优化
│ 优化 │
└──────┬──────┘
↓
┌─────────────┐
│ .odex │ 优化后的dex
│ 文件 │
└─────────────┘
1.6.2 详细说明
-
Java编译阶段
- 工具:javac(JDK编译器)
- 输入:.java源文件
- 输出:.class字节码文件
-
DEX转换阶段 ⭐⭐⭐
- 工具:dx工具(Dalvik虚拟机提供)
- 输入:.class文件
- 输出:.dex文件
- 作用:将多个.class文件合并成一个.dex文件
-
APK打包阶段
- 工具:aapt(Android Asset Packaging Tool)
- 打包内容:
- classes.dex(代码)
- resources.arsc(资源索引)
- res/(资源文件)
- AndroidManifest.xml
- META-INF/(签名信息)
-
ODEX优化阶段
- 时机:应用首次运行时
- 工具:dexopt
- 作用:针对设备硬件优化.dex文件
1.6.3 考试重点
必记:
- Java源文件经过JDK编译器编译为class文件
- Dalvik虚拟机中的Dx工具将部分class文件转换成dex文件
- dex文件在Dalvik虚拟机中进一步优化成odex文件
1.7 重点知识总结
1.7.1 必背知识点
1. Android系统四层架构:
从上到下:
1. 应用程序层(Applications)
2. 应用程序框架层(Application Framework)
3. 核心类库层(Libraries + Dalvik VM)
4. Linux内核层(Linux Kernel)
2. Dalvik虚拟机:
- 基于寄存器架构
- 执行**.dex**文件
- Dx工具:.class → .dex
3. 项目关键文件:
AndroidManifest.xml:配置文件,注册组件R.java:资源索引,不能手动修改build.gradle:配置依赖和SDK版本
4. 资源目录:
res/:资源会在R.java生成IDassets/:不会在R.java生成ID,原封不动打包
5. Gradle插件路径:
C:\Users\当前登录的用户名\.gradle
1.7.2 易错点汇总
❌ 错误说法:
- Dalvik是基于栈的架构(×,是寄存器)
- AndroidManifest.xml可以设置UI布局(×,不可以)
- R.java需要手动修改(×,自动生成)
- assets资源会在R.java生成ID(×,不会)
- res目录可以任意创建子目录(×,只能是固定子目录)
- Gradle插件保存在C:\Users.gradle(×,要加用户名)
1.7.3 常考选择题
1. Dalvik虚拟机是基于(C)的架构。
- A. 栈
- B. 堆
- C. 寄存器 ✅
- D. 存储器
2. Android项目中的主题和样式资源,通常放在哪个目录下?(C)
- A. res/drawable
- B. res/layout
- C. res/values ✅
- D. assets
3. 下列关于AndroidManifest.xml文件的说法中,错误的是(D)
- A. 它是整个程序的配置文件
- B. 可以在该文件中配置程序所需的权限
- C. 可以在该文件中注册程序用到的组件
- D. 该文件可以设置UI布局 ✅(错误)
4. Dalvik虚拟机属于Android系统架构中的哪一层?(C)
- A. 应用程序层
- B. 应用程序框架层
- C. 核心类库层 ✅
- D. Linux内核层
5. Android中短信、联系人管理、浏览器等属于Android系统架构中的哪一层?(A)
- A. 应用程序层 ✅
- B. 应用程序框架层
- C. 核心类库层
- D. Linux内核层
1.7.4 常考填空题
-
Dalvik中的Dx工具会把部分class文件转换成___dex___文件。
-
如果希望在XML布局文件中调用颜色资源,可以使用__@color___调用。
-
Android程序入口的Activity是在___AndroidManifest.xml___文件中注册的。
-
Android中查看应用程序日志的工具是__LogCat___。
1.7.5 常考判断题
-
项目中的R.java文件,不需要开发者对R.java文件修改调试。(✅ 正确)
-
assets目录下的资源文件可通过R.java资源清单类访问。(❌ 错误)
- 解析:assets目录下的资源不会在R.java生成ID
-
Dalvik是Google公司设计的用于Android平台的虚拟机。(✅ 正确)
-
Android应用程序的主要语言是Java。(✅ 正确)
-
Android系统采用分层架构,分别是应用程序层、应用程序框架层、核心类库和Linux内核。(✅ 正确)
1.8 本章练习题
一、选择题
-
Android是基于____内核的自由及开放源代码的操作系统。(A)
- A. Linux ✅
- B. Unix
- C. MS-DOS
- D. Windows Phone
-
以下哪个是Gradle插件默认保存的路径(C)
- A. C:\Users.gradle
- B. C:\AppData.gradle
- C. C:\Users\当前登录的用户名.gradle ✅
- D. C:\AppData\Roaming.gradle
-
编程中出现R文件找不到,有可能是以下哪个文件代码中有语法错误?(C)
- A. MainActivity.java
- B. MyFragment.java
- C. activity_main.xml ✅
- D. ImgDownloadAsncTask.java
-
以下文件放在Drawable文件夹下不会产生错误的是(B)
- A. 9abc.jpg
- B. abc_9.jpg ✅
- C. Abc.9.jpg
- D. abcStart.jpg
-
Android项目工程下面的assets目录的作用是什么?(D)
- A. 放置应用到的图片资源
- B. 放置字符串、颜色、数组等常量数据
- C. 放置一些与界面相应的布局文件,都是xml文件
- D. 主要放置一些文件资源,这些资源会被原封不动打包到apk里面 ✅
二、填空题
-
Android系统四层架构为____、、、____。
- 答案:Application、Application Framework、Libraries、Linux Kernel
-
Dalvik中的Dx工具会把部分class文件转换成____文件。
- 答案:dex
-
Android程序入口的Activity是在____文件中注册的。
- 答案:AndroidManifest.xml
三、简答题
- 简述Android系统架构包含的层次以及各层的特点。
答:Android系统架构从高到低分为四层:
(1)应用程序层(Applications):包含短信、联系人、浏览器等核心应用程序和第三方应用。
(2)应用程序框架层(Application Framework):提供开发应用程序时用到的各种API,如Activity Manager、Window Manager等。
(3)核心类库层(Libraries):包含系统库(C/C++)和Android运行环境(Dalvik虚拟机和核心库)。
(4)Linux内核层(Linux Kernel):为Android设备的各种硬件提供底层驱动,如显示驱动、音频驱动等。
- 简述Android源代码的编译过程。
答:Java源文件经过JDK编译器编译为class文件后,Dalvik虚拟机中的Dx工具会将部分class文件转换成dex文件,dex文件还会在Dalvik虚拟机中进一步优化成odex文件。
本章小结
本章学习了Android开发的基础知识,包括:
- ✅ Android系统四层架构
- ✅ Dalvik虚拟机的特点和编译流程
- ✅ Android项目的完整目录结构
- ✅ 核心配置文件的作用
- ✅ res和assets目录的区别
- ✅ Android开发环境的搭建流程
掌握程度检查:
- 能默写出Android四层架构吗?
- 能说出Dalvik虚拟机的三个核心特点吗?
- 能区分res和assets目录的区别吗?
- 能说出AndroidManifest.xml的主要作用吗?
下一章预告: 第2章将详细学习Android的五大布局方式。
学习建议:
- 📌 重点记忆标记⭐⭐⭐的内容
- 📝 多做练习题巩固知识点
- 💡 理解概念比死记硬背更重要
- 🔄 定期复习,避免遗忘
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)