第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系统的基础层,提供底层驱动和系统服务

主要功能:

  1. 硬件驱动:

    • 显示驱动(Display Driver)
    • 摄像头驱动(Camera Driver)
    • 音频驱动(Audio Driver)
    • 键盘驱动(Keypad Driver)
    • WiFi驱动
    • Binder IPC驱动(进程间通信)
  2. 系统服务:

    • 进程管理
    • 内存管理
    • 设备管理
    • 文件系统
    • 网络协议栈

特点:

  • 基于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 考试重点

必记内容:

  1. Dalvik虚拟机是基于寄存器的架构(不是栈)
  2. Dx工具将**.class文件转换成.dex文件**
  3. Dalvik属于Android系统架构的核心类库层
  4. 每个应用运行在独立的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
  1. 下载Android Studio安装包
  2. 运行安装程序,选择安装路径
  3. 配置Android Studio设置(主题、插件等)
  4. 完成首次启动配置
步骤2:创建模拟器(AVD)
  1. 打开AVD Manager(Android Virtual Device Manager)
  2. 点击"Create Virtual Device"
  3. 选择设备类型(手机、平板等)
  4. 下载对应的Android SDK System Image
  5. 配置模拟器参数(内存、存储等)
  6. 创建并启动模拟器
步骤3:下载SDK
  1. 打开SDK Manager
  2. 下载所需的Android SDK版本(如API 34)
  3. 下载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 详细说明

  1. Java编译阶段

    • 工具:javac(JDK编译器)
    • 输入:.java源文件
    • 输出:.class字节码文件
  2. DEX转换阶段 ⭐⭐⭐

    • 工具:dx工具(Dalvik虚拟机提供)
    • 输入:.class文件
    • 输出:.dex文件
    • 作用:将多个.class文件合并成一个.dex文件
  3. APK打包阶段

    • 工具:aapt(Android Asset Packaging Tool)
    • 打包内容:
      • classes.dex(代码)
      • resources.arsc(资源索引)
      • res/(资源文件)
      • AndroidManifest.xml
      • META-INF/(签名信息)
  4. 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生成ID
  • assets/:不会在R.java生成ID,原封不动打包

5. Gradle插件路径:

C:\Users\当前登录的用户名\.gradle

1.7.2 易错点汇总

错误说法:

  1. Dalvik是基于栈的架构(×,是寄存器)
  2. AndroidManifest.xml可以设置UI布局(×,不可以)
  3. R.java需要手动修改(×,自动生成)
  4. assets资源会在R.java生成ID(×,不会)
  5. res目录可以任意创建子目录(×,只能是固定子目录)
  6. 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 常考填空题

  1. Dalvik中的Dx工具会把部分class文件转换成___dex___文件。

  2. 如果希望在XML布局文件中调用颜色资源,可以使用__@color___调用。

  3. Android程序入口的Activity是在___AndroidManifest.xml___文件中注册的。

  4. Android中查看应用程序日志的工具是__LogCat___。


1.7.5 常考判断题

  1. 项目中的R.java文件,不需要开发者对R.java文件修改调试。(✅ 正确)

  2. assets目录下的资源文件可通过R.java资源清单类访问。(❌ 错误)

    • 解析:assets目录下的资源不会在R.java生成ID
  3. Dalvik是Google公司设计的用于Android平台的虚拟机。(✅ 正确)

  4. Android应用程序的主要语言是Java。(✅ 正确)

  5. Android系统采用分层架构,分别是应用程序层、应用程序框架层、核心类库和Linux内核。(✅ 正确)


1.8 本章练习题

一、选择题

  1. Android是基于____内核的自由及开放源代码的操作系统。(A)

    • A. Linux ✅
    • B. Unix
    • C. MS-DOS
    • D. Windows Phone
  2. 以下哪个是Gradle插件默认保存的路径(C)

    • A. C:\Users.gradle
    • B. C:\AppData.gradle
    • C. C:\Users\当前登录的用户名.gradle ✅
    • D. C:\AppData\Roaming.gradle
  3. 编程中出现R文件找不到,有可能是以下哪个文件代码中有语法错误?(C)

    • A. MainActivity.java
    • B. MyFragment.java
    • C. activity_main.xml ✅
    • D. ImgDownloadAsncTask.java
  4. 以下文件放在Drawable文件夹下不会产生错误的是(B)

    • A. 9abc.jpg
    • B. abc_9.jpg ✅
    • C. Abc.9.jpg
    • D. abcStart.jpg
  5. Android项目工程下面的assets目录的作用是什么?(D)

    • A. 放置应用到的图片资源
    • B. 放置字符串、颜色、数组等常量数据
    • C. 放置一些与界面相应的布局文件,都是xml文件
    • D. 主要放置一些文件资源,这些资源会被原封不动打包到apk里面 ✅

二、填空题

  1. Android系统四层架构为____、、____。

    • 答案:Application、Application Framework、Libraries、Linux Kernel
  2. Dalvik中的Dx工具会把部分class文件转换成____文件。

    • 答案:dex
  3. Android程序入口的Activity是在____文件中注册的。

    • 答案:AndroidManifest.xml

三、简答题

  1. 简述Android系统架构包含的层次以及各层的特点。

答:Android系统架构从高到低分为四层:

(1)应用程序层(Applications):包含短信、联系人、浏览器等核心应用程序和第三方应用。

(2)应用程序框架层(Application Framework):提供开发应用程序时用到的各种API,如Activity Manager、Window Manager等。

(3)核心类库层(Libraries):包含系统库(C/C++)和Android运行环境(Dalvik虚拟机和核心库)。

(4)Linux内核层(Linux Kernel):为Android设备的各种硬件提供底层驱动,如显示驱动、音频驱动等。


  1. 简述Android源代码的编译过程。

答:Java源文件经过JDK编译器编译为class文件后,Dalvik虚拟机中的Dx工具会将部分class文件转换成dex文件,dex文件还会在Dalvik虚拟机中进一步优化成odex文件。


本章小结

本章学习了Android开发的基础知识,包括:

  1. ✅ Android系统四层架构
  2. ✅ Dalvik虚拟机的特点和编译流程
  3. ✅ Android项目的完整目录结构
  4. ✅ 核心配置文件的作用
  5. ✅ res和assets目录的区别
  6. ✅ Android开发环境的搭建流程

掌握程度检查:

  • 能默写出Android四层架构吗?
  • 能说出Dalvik虚拟机的三个核心特点吗?
  • 能区分res和assets目录的区别吗?
  • 能说出AndroidManifest.xml的主要作用吗?

下一章预告: 第2章将详细学习Android的五大布局方式。


学习建议:

  • 📌 重点记忆标记⭐⭐⭐的内容
  • 📝 多做练习题巩固知识点
  • 💡 理解概念比死记硬背更重要
  • 🔄 定期复习,避免遗忘
Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐