杰瑞科技汇

Android开发教程,从入门到精通该咋学?

Android 开发学习路线图

学习任何技术都遵循一个从理论到实践,再到深入的过程,我们将 Android 开发学习分为以下几个阶段:

  1. 环境搭建与基础概念

    学习目标:成功搭建开发环境,理解 Android 应用的基本构成和运行原理。

  2. Kotlin 编程语言

    学习目标:掌握 Android 官方推荐的开发语言 Kotlin 的核心语法。

  3. Android UI 开发

    学习目标:学会使用 Jetpack Compose(现代方式)或 XML(传统方式)构建用户界面。

  4. 核心组件与数据存储

    学习目标:理解四大核心组件,并学习如何在应用中存储数据。

  5. 网络与异步编程

    学习目标:掌握从网络获取数据,并处理好耗时操作,避免界面卡顿。

  6. 高级主题与项目实战

    学习目标:学习依赖注入、架构、性能优化等,并通过完整项目巩固所学知识。


环境搭建与基础概念

准备工作

  • 硬件要求:一台电脑(Windows, macOS 或 Linux),至少 8GB 内存(推荐 16GB)。
  • 软件要求
    • JDK (Java Development Kit):Android 12 (API 31) 及以上版本需要 JDK 17,Android Studio 通常会自带一个合适的 JDK,但有时需要手动配置。
    • Android Studio:Google 官方提供的集成开发环境,集成了代码编辑、调试、模拟器、性能分析等所有必要工具。

安装与配置 Android Studio

  1. 下载并运行 Android Studio 安装包,按照提示完成安装。
  2. 首次启动:Android Studio 会引导你进行一些初始配置,如导入设置、安装 SDK (Software Development Kit)、创建模拟器等。
  3. 创建第一个项目 (Hello World)
    • 打开 Android Studio,选择 "New Project"。
    • 选择一个模板,"Empty Activity"(空活动),这是最基础的模板。
    • 填写项目名称、包名、保存位置,选择语言(强烈推荐 Kotlin)和最低 API 级别。
    • 点击 "Finish",Android Studio 会自动为你构建项目。

认识 Android Studio 界面

  • 工具栏:包含运行、调试、版本控制等常用操作。
  • 导航栏:快速在不同文件(如 Java/Kotlin 文件、XML 布局文件)间切换。
  • 编辑器窗口:编写代码的主要区域。
  • 工具窗口栏:位于 IDE 四周,包含:
    • Project:文件管理器,查看项目所有文件。
    • Logcat:日志输出窗口,用于查看应用运行时的日志信息,调试必备。
    • Build:构建过程信息。
    • Android Monitor:监控设备/模拟器的 CPU、内存、网络使用情况。

Android 应用的基本构成

一个标准的 Android 应用项目通常包含以下关键目录和文件:

  • app/:应用的主要代码和资源目录。
    • manifests/AndroidManifest.xml:应用的“身份证”,声明了应用的包名、组件(Activity, Service)、权限等。
    • java/:存放 Kotlin 或 Java 代码。com.example.myapp 是你的包名。
      • MainActivity.kt:应用的入口界面。
    • res/:存放应用资源(字符串、图片、布局文件等)。
      • layout/:存放 XML 布局文件,如 activity_main.xml,用于定义 UI。
      • drawable/:存放图片资源。
      • mipmap/:存放应用图标。
      • values/strings.xml:存放字符串常量,便于国际化。
    • build.gradle.kts (或 build.gradle):应用的构建脚本,定义了依赖库、SDK 版本等。

Kotlin 编程语言

从 Android 7.0 开始,Kotlin 成为 Android 官方推荐的开发语言,它更安全、更简洁、与 Java 100% 互操作。

为什么选择 Kotlin?

  • 空安全:从语言层面杜绝了大量的 NullPointerException
  • 简洁:用更少的代码实现同样的功能。
  • 函数式编程支持:易于处理集合和异步操作。
  • 与 Java 无缝互操作:可以在同一个项目中混用 Java 和 Kotlin 代码。

Kotlin 核心语法速览

  • 变量声明

    val a: Int = 10      // 不可变变量 (类似 Java final)
    var b: String = "Hello" // 可变变量
    // 类型可以推断,通常可以省略
    val c = 20
  • 函数

    fun sum(a: Int, b: Int): Int {
        return a + b
    }
    // 单表达式函数
    fun sum(a: Int, b: Int) = a + b
  • 空安全

    var name: String = "Kotlin"
    name = null // 编译错误!
    var nullableName: String? = "Android"
    nullableName = null // 允许
    // 安全调用符 ?
    println(nullableName?.length) // nullableName 为 null,则不执行 length,返回 null
    // Elvis 操作符 ?:
    val length = nullableName?.length ?: -1 // nullableName 为 null,则 length 为 -1
  • 类与数据类

    class User(val name: String, val age: Int)
    // 数据类,自动生成 equals, hashCode, toString, copy 等方法
    data class User(val name: String, val age: Int)
  • Lambda 表达式

    val numbers = listOf(1, 2, 3, 4, 5)
    // 使用 Lambda 过滤
    val evenNumbers = numbers.filter { it % 2 == 0 } // it 是默认参数名
    println(evenNumbers) // 输出 [2, 4]

推荐学习资源


Android UI 开发

有两种主流方式来构建 UI:Jetpack Compose(推荐)XML 布局(传统)

A. 现代 UI 方式:Jetpack Compose

Compose 是一个现代化的 UI 工具包,它使用声明式的 Kotlin 代码来构建界面,无需编写 XML 布局文件。

  • 核心理念:描述 UI 在不同状态下应该“是什么样子”,而不是“如何变化”。
  • 基本组件
    • @Composable:标记一个函数为可组合函数,这是构建 UI 的基本单元。
    • Column:垂直布局。
    • Row:水平布局。
    • Box:层叠布局。
    • Text:显示文本。
    • Button:按钮。

示例 (MainActivity.kt)

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 使用 setContent 来设置 Compose UI
        setContent {
            MyApplicationTheme {
                // 在这里调用你的 Compose 函数
                Greeting("Android")
            }
        }
    }
}
// 这是一个可组合函数
@Composable
fun Greeting(name: String) {
    // Column 是一个垂直布局容器
    Column(
        modifier = Modifier.fillMaxSize().padding(16.dp),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Text(text = "Hello $name!")
        Spacer(modifier = Modifier.height(16.dp))
        Button(onClick = { /* 按钮点击事件 */ }) {
            Text(text = "Click Me")
        }
    }
}
// 用于预览 UI 的注解
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    MyApplicationTheme {
        Greeting("Preview")
    }
}

B. 传统 UI 方式:XML 布局

这是长期以来 Android 开发的主流方式,通过在 XML 文件中描述 UI 结构,然后在 Activity/Fragment 中加载和操作。

  • 基本流程
    1. res/layout/ 目录下创建 XML 文件(如 activity_main.xml)。
    2. 使用 XML 标签(如 TextView, Button, LinearLayout)构建 UI。
    3. MainActivity.kt 中,通过 setContentView(R.layout.activity_main) 加载布局。
    4. 使用 findViewById(R.id.my_button) 或更现代的 View Binding 来获取 UI 组件的引用并设置事件。

示例 (res/layout/activity_main.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"
    android:gravity="center"
    android:padding="16dp">
    <TextView
        android:id="@+id/my_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, Android!" />
    <Button
        android:id="@+id/my_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Click Me" />
</LinearLayout>

示例 (MainActivity.kt)

class MainActivity : AppCompatActivity() {
    // 启用 View Binding
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 使用 View Binding 替代 findViewById
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        // 通过 binding 访问 UI 组件
        binding.myButton.setOnClickListener {
            binding.myTextView.text = "Button Clicked!"
        }
    }
}

建议对于新项目,强烈推荐使用 Jetpack Compose,它是 Android 的未来,开发效率更高,代码更简洁,UI 更易于维护。


核心组件与数据存储

四大核心组件

  • Activity:用户界面,代表一个屏幕,用户交互发生的地方。
  • Service:在后台执行长时间运行的操作,没有用户界面,播放音乐、下载文件。
  • Broadcast Receiver:接收系统或应用发出的广播消息,手机电量低、网络状态改变。
  • Content Provider:管理应用共享的数据,使得不同应用可以访问彼此的数据,联系人、图片库。

数据存储

Android 提供了多种数据存储方式:

方式 描述 适用场景
SharedPreferences 键值对存储,适合存储简单的配置信息(如开关状态、用户名)。 少量、简单的数据。
内部存储 存储在设备内部内存,只有本应用可以访问,随应用卸载而删除。 敏感的、私有的应用数据(如缓存、数据库文件)。
外部存储 存储在 SD 卡或共享存储区,其他应用可以访问(需要权限)。 公开的文件(如下载的图片、文档)。
SQLite 数据库 轻量级的关系型数据库,适合存储结构化数据。 需要复杂查询和事务的大量结构化数据(如联系人列表)。
Room (Jetpack) 对 SQLite 的封装,提供了编译时检查、更简洁的 API 和 LiveData 集成。 强烈推荐,是现代 Android 应用的标准数据库解决方案。
网络存储 将数据存储在服务器上,通过 HTTP/HTTPS 协议访问。 需要在多设备间同步、或数据量非常大的场景。

网络与异步编程

网络请求

Android 应用经常需要从服务器获取数据(如 JSON 格式),Google 推荐使用 Retrofit 库来简化网络请求。

  • Retrofit:一个类型安全的 HTTP 客户端,能将 REST API 转换为 Kotlin/Java 接口。
  • 协程:Kotlin 提供的一种处理异步任务的方式,可以让你用同步的代码风格来写异步逻辑,避免了回调地狱。

使用 Retrofit + 协程获取 JSON 数据的简单示例

  1. 添加依赖 (build.gradle.kts):

    // Retrofit
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0") // JSON 解析器
    // 协程
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
  2. 定义数据模型 (对应 JSON 结构) 和 API 接口:

    // 数据模型
    data class User(val id: Int, val name: String, val email: String)
    // API 接口
    interface ApiService {
        @GET("users")
        suspend fun getUsers(): List<User> // suspend 关键字表示这是一个挂起函数
    }
  3. 创建 Retrofit 实例并调用 API:

    // 在 ViewModel 或 Activity/Fragment 中
    private val apiService: ApiService by lazy {
        Retrofit.Builder()
            .baseUrl("https://jsonplaceholder.typicode.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(ApiService::class.java)
    }
    // 在协程作用域中调用
    lifecycleScope.launch {
        try {
            val users = apiService.getUsers()
            // 更新 UI
            Log.d("Network", "Users: $users")
        } catch (e: Exception) {
            // 处理错误
            Log.e("Network", "Error fetching users", e)
        }
    }

异步编程

  • 为什么需要异步?:网络请求、数据库读写、文件读写等都是耗时操作,如果在主线程(UI 线程)中执行,会导致应用界面卡顿甚至“无响应”(ANR - Application Not Responding)。
  • 解决方案
    • AsyncTask:已废弃,不推荐使用。
    • Thread + Handler:复杂且容易出错。
    • RxJava:强大的响应式编程库,但学习曲线较陡。
    • Kotlin 协程Android 官方推荐的异步处理方式,它轻量、简洁,且与 Android 生命周期完美集成。

高级主题与项目实战

架构

随着应用变大,代码组织变得至关重要,Google 推荐使用 MVVM (Model-View-ViewModel) 架构。

  • Model:数据层,负责处理数据来源(网络、数据库、本地存储)。
  • View:UI 层,即 Activity/Fragment/Compose UI,负责显示数据和向用户展示界面。
  • ViewModel:业务逻辑层,作为 View 和 Model 之间的桥梁,它持有并暴露数据给 View,并处理用户的操作逻辑,ViewModel 知道如何获取数据,但不关心 UI 是如何显示的。

优势:关注点分离,代码更清晰、可测试性更强。

依赖注入

  • 是什么?:一种设计模式,旨在降低代码之间的耦合度,对象的创建不是在类内部完成,而是由外部“注入”。
  • 为什么用?:便于单元测试,提高代码的可维护性和灵活性。
  • 推荐库Hilt(Google 官方推出的基于 Dagger 的依赖注入库,专为 Android 设计)。

项目实战

理论学习后,最好的方式是动手做一个完整的项目。

项目建议(由简到难)

  1. 天气预报 App

    • 使用免费的天气 API(如 OpenWeatherMap)。
    • 功能:搜索城市、显示当前天气和未来几天的预报。
    • 技术栈:Retrofit + 协程 + Room (缓存数据) + Jetpack Compose/XML + MVVM。
  2. 新闻阅读器 App

    • 使用新闻 API(如 NewsAPI)。
    • 功能:展示新闻列表、点击查看详情、收藏新闻。
    • 技术栈:Retrofit + 协程 + Room + Jetpack Compose/XML + MVVM + Hilt。
  3. Todo List (待办事项) App

    • 一个经典的入门项目。
    • 功能:添加、删除、标记完成待办事项。
    • 技术栈:Room + Jetpack Compose/XML + MVVM。

推荐学习资源汇总

  • 官方文档(最重要!)
  • 视频教程
    • YouTube
      • Android Developers 官方频道:官方发布的教程和更新。
      • Philipp Lackner:高质量的 Jetpack Compose 和现代 Android 开发教程。
      • CodingWithMitch:深入浅出的教程,特别是关于架构和最佳实践。
    • Bilibili:国内有很多优秀的 UP 主搬运或制作 Android 教程,搜索“Android 开发入门”。
  • 在线课程
    • Udemy:有大量付费和免费课程,如 Angela Yu 的 "The Complete Android Developer Course"。
    • Coursera / edX:提供一些大学或机构开设的 Android 开发专项课程。
  • 社区与博客
    • Stack Overflow:遇到问题时,99% 的情况都能在这里找到答案。
    • ProAndroidDev (Medium):Google 工程师和 Android 专家的技术博客。
    • 掘金 / CSDN:国内开发者社区,有很多技术分享和翻译文章。

学习建议

  1. 动手实践:不要只看不练,跟着教程敲代码,然后尝试修改和扩展功能。
  2. 阅读源码:遇到不懂的库或组件,去 GitHub 上看看它的源码,理解其设计思想。
  3. 学会调试:熟练使用 Android Studio 的断点、Logcat 等调试工具,它们是你最好的朋友。
  4. 关注官方动态:Android 技术发展很快,关注官方博客和 Twitter,了解最新的特性和最佳实践。
  5. 保持耐心:学习曲线可能会很陡峭,遇到挫折是正常的,坚持下去,你会逐渐建立起知识体系。

祝你在 Android 开发的道路上一切顺利!

分享:
扫描分享到社交APP
上一篇
下一篇