Android:什么是它、系统架构和Kotlin开发

作者: IT Sectr 发布日期: 2026-02-07 阅读时间: 11 分钟

Android 是谷歌的一款移动操作系统,具有开源代码 (AOSP),运行在Linux内核之上。Android开发使用Kotlin语言在Android Studio环境中进行。本文涵盖操作系统架构、应用程序组件、Jetpack Compose以及Google Play发布。

要点

  • Android — 基于Linux内核的操作系统,具有四层架构:内核、HAL、Android Runtime、Application Framework
  • Kotlin — 主要开发语言,具有空安全性和用于异步的协程
  • Activity、Service、BroadcastReceiver、ContentProvider — Android应用程序的四个必需组件
  • Jetpack Compose — Google推荐用于新项目的声明式UI框架
  • Google Play — 主要分发渠道,佣金15–30%,并通过Play Integrity安全检查

什么是Android?

Android 是一个基于Linux内核的移动操作系统,由谷歌自2007年开始开发。源代码作为Android开源项目 (AOSP) 的一部分,在Apache 2.0许可下开放。每个制造商都可以修改系统并将其安装在自己的设备上。

根据StatCounter (2026) 的数据,Android占据全球移动操作系统市场约72%的份额。最大的制造商是三星、小米、Oppo、Vivo、Google Pixel。碎片化是平台的一个关键问题:数千种不同操作系统版本的型号同时在使用。

Android架构建立在权限原则之上:每个应用程序在单独的Linux UID下运行,只能访问自己的数据。对系统资源(摄像头、麦克风、联系人)的访问从Android 6 (API 23) 开始,在运行时通过Android权限请求。

Android版本历史

Android 1.0 于2008年在HTC Dream上发布。关键里程碑:Android 4.0 Ice Cream Sandwich(手机和平板电脑的统一界面)、Android 5.0 Lollipop(Material Design)、Android 6.0(运行时权限)、Android 10(深色主题、手势)、Android 12(Material You)。自2023年起,谷歌已转向没有甜点名称的年度主要版本发布。

Android版本年份关键创新
Android 1.02008在HTC Dream上首次发布
Android 4.0 (ICS)2011手机和平板电脑的统一设计
Android 5.0 (L)2014Material Design,ART替代Dalvik
Android 6.0 (M)2015运行时权限,Doze模式
Android 8.0 (O)2017Kotlin作为官方语言
Android 10 (Q)2019Scoped Storage,深色主题
Android 12 (S)2021Material You,Privacy Dashboard
Android 152024私密空间,卫星连接

Android架构:四个关键层

Android 架构由四个主要层组成,将硬件与用户应用程序隔离开来。每一层通过严格定义的接口使用下层服务。

Linux内核和HAL

最底层是修改后的Linux内核(LTS,Android 15中的6.x版本)。它管理内存、进程、网络栈和驱动程序。硬件抽象层 (HAL) 提供统一的API与硬件交互:摄像头、蓝牙、Wi-Fi、传感器。制造商实现HAL模块而不影响上层。

Android运行时 (ART)

ART执行应用程序的DEX字节码。从Android 5.0开始,ART取代了Dalvik,并使用预先编译 (AOT) 来提高性能。每个应用程序都有自己的进程和单独的ART实例。垃圾回收 (GC) 以最小的暂停运行——典型的GC暂停为2-4毫秒。

应用程序框架

框架是开发人员直接使用的层。它包括 Activity Manager(屏幕栈)、Content Providers(数据访问)、Resource Manager(本地化、资源)、Notification Manager、Location Manager。所有系统服务都通过Binder IPC(Android的进程间通信机制)调用。

kotlin
// 通过AIDL接口使用Binder工作的示例
interface IDataService : android.os.IInterface {
    fun getData(): List<DataItem>
    fun saveData(item: DataItem): Boolean
}

// 服务实现
class DataService : Service() {
    private val binder = object : IDataService.Stub() {
        override fun getData(): List<DataItem> = repository.getAll()
        override fun saveData(item: DataItem): Boolean = repository.save(item)
    }

    override fun onBind(intent: Intent?): IBinder = binder
}

系统应用

最上层由标准系统应用程序组成:电话、联系人、相机、设置、浏览器。它们没有比用户应用程序更高的权限,但可以被第三方应用程序替换。在Android 15中,系统应用程序通过Google Play系统更新进行更新,独立于制造商的OTA更新。

Kotlin — Android开发的主要语言

Kotlin 是JetBrains开发的一种静态类型编程语言,运行在JVM上。谷歌在2017年的Google I/O上宣布Kotlin为Android官方语言。Kotlin与Java完全兼容,但消除了其缺点:空安全、数据类、扩展函数和协程。

空安全性和类型

Kotlin 的主要特性是内置的NullPointerException防护。类型分为可空类型 (String?) 和非空类型 (String)。编译器在构建时检查可空访问。安全调用操作符 (?.) 和Elvis操作符 (?:) 简化了可选值的使用,无需嵌套检查。

kotlin
// 使用协程和Flow的Kotlin代码示例
data class User(
    val id: Long,
    val name: String,
    val email: String
)

class UserRepository(
    private val api: UserApi,
    private val dao: UserDao
) {
    suspend fun getUser(id: Long): Result<User> {
        return try {
            val cached = dao.getUser(id)
            if (cached != null) {
                return Result.success(cached)
            }
            val remote = api.fetchUser(id)
            dao.insertUser(remote)
            Result.success(remote)
        } catch (e: Exception) {
            Result.failure(e)
        }
    }

    fun observeUsers(): Flow<List<User>> {
        return dao.observeAll()
            .map { list -> list.sortedBy { it.name } }
            .flowOn(Dispatchers.Default)
    }
}

示例展示了用于异步网络和数据库访问的协程(挂起函数)、用于响应式观察数据变化的Flow以及用于安全错误处理的Result。协程无需线程开销即可替代回调和RxJava。

Kotlin协程和Flow

Kotlin协程是在共享线程池上运行的轻量级线程。网络和磁盘使用 Dispatchers.IO,UI使用 Dispatchers.Main,CPU密集型任务使用 Dispatchers.Default。viewModelScope和lifecycleScope在组件销毁时自动取消协程。

kotlin
// 使用协程和StateFlow的ViewModel
class UserViewModel(
    private val repository: UserRepository
) : ViewModel() {

    private val _users = MutableStateFlow<List<User>>(emptyList())
    val users: StateFlow<List<User>> = _users.asStateFlow()

    private val _loading = MutableStateFlow(false)
    val loading: StateFlow<Boolean> = _loading.asStateFlow()

    init {
        viewModelScope.launch {
            repository.observeUsers().collect { userList ->
                _users.value = userList
            }
        }
    }

    fun refresh() {
        viewModelScope.launch {
            _loading.value = true
            repository.getUser(42).onSuccess { user ->
                _users.value = listOf(user)
            }
            _loading.value = false
        }
    }
}

Android Studio和开发工具

Android Studio 是基于IntelliJ IDEA的官方IDE,由谷歌开发。它包括代码编辑器、布局检查器、设备模拟器、APK分析器、性能分析器(CPU、内存、网络、能源)和Firebase集成。Android Studio 2024 (Ladybug) 支持具有多平台KMP模式的Kotlin 2.0。

Android模拟器

Android模拟器使用 KVM(Linux)或 Hyper-V(Windows)进行硬件加速。它支持GPS、传感器、摄像头、通话和短信的模拟。Google Pixel 9 Pro是推荐用于API 35和8 GB模拟器RAM测试的配置。

Android性能分析器和调试

性能分析器实时显示CPU负载、内存分配、网络请求和能耗。内存分析器允许通过引用树进行堆转储和泄漏分析。网络检查器记录所有HTTP/HTTPS请求及其正文和标头。对于深入分析,使用Android Studio Canary。

Android应用程序组件

Android应用程序 由四种类型的组件组成,每种组件都有自己的入口点和生命周期。组件在AndroidManifest.xml文件中注册。

组件目的入口点
Activity用于用户交互的UI屏幕带有Action.MAIN和LAUNCHER类别的Intent
Service无UI的后台任务执行startService() 或 bindService()
BroadcastReceiver接收系统或自定义事件在清单或代码中注册
ContentProvider管理对结构化数据的访问通过ContentResolver的URI

Activity和Intent

Activity 是用户界面的基本组件。每个屏幕都是一个单独的Activity或Activity内的Fragment。屏幕之间的导航通过Intent进行——包含操作(ACTION_VIEW、ACTION_SEND)和数据(URI)的对象。在Jetpack Navigation Graph中,导航用XML描述。

Service和WorkManager

Service 执行后台任务,但从Android 8开始,后台服务受到限制。WorkManager是推荐用于延迟和保证后台任务的库,支持链、约束(例如,仅在充电时)和崩溃后重启。

Jetpack Compose与XML布局比较

Jetpack Compose 和传统XML布局之间选择是启动Android项目时的主要架构决策。XML布局(RecyclerView、ConstraintLayout、FrameLayout)自2008年以来一直是标准。Jetpack Compose于2021年作为声明式替代方案引入。

标准XML布局Jetpack Compose
范例命令式(View树)声明式(@Composable函数)
最低版本任意 (API 1+)API 21+ (Android 5.0)
布局XML + data binding / ViewBinding使用Modifier的Kotlin代码
RecyclerView类似RecyclerView + Adapter + ViewHolderLazyColumn / LazyGrid
预览Android Studio中的XML预览带交互的@Preview注解
重组notifyDataSetChanged(完全)自动、精细 (DiffUtil)
互操作性完全(所有库)XML中的ComposeView / Compose中的AndroidView

谷歌推荐所有新项目使用 Jetpack Compose。XML布局在旧项目支持和需要最大View自定义(Canvas、SurfaceView)的情况下仍然相关。Compose代码平均比等效的XML + ViewBinding短40%。

kotlin
// Jetpack Compose — 用户资料屏幕
@Composable
fun ProfileScreen(
    user: User,
    onEditClick: () -> Unit,
    modifier: Modifier = Modifier
) {
    Column(
        modifier = modifier
            .fillMaxSize()
            .padding(16.dp),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        AsyncImage(
            model = user.avatarUrl,
            contentDescription = "用户头像",
            modifier = Modifier
                .size(120.dp)
                .clip(CircleShape)
        )

        Spacer(modifier = Modifier.height(16.dp))

        Text(
            text = user.name,
            style = MaterialTheme.typography.headlineMedium
        )

        Text(
            text = user.email,
            style = MaterialTheme.typography.bodyLarge,
            color = MaterialTheme.colorScheme.onSurfaceVariant
        )

        Spacer(modifier = Modifier.height(24.dp))

        Button(onClick = onEditClick) {
            Icon(Icons.Default.Edit, contentDescription = null)
            Spacer(modifier = Modifier.width(8.dp))
            Text("编辑个人资料")
        }
    }
}

@Preview(showBackground = true, showSystemUi = true)
@Composable
fun ProfileScreenPreview() {
    MaterialTheme {
        ProfileScreen(
            user = User(1, "安娜·彼得罗娃", "anna@example.com"),
            onEditClick = {}
        )
    }
}

ProfileScreen 函数声明为@Composable——它声明式地描述UI而无需创建View实例。Compose在user更改时自动更新屏幕。@Preview直接在IDE中显示结果,无需在模拟器上构建和运行。

Activity和Fragment的生命周期

Android中的每个 Activity 经历六个生命周期状态:onCreate、onStart、onResume、onPause、onStop、onDestroy。Fragment增加了onAttach、onCreateView、onViewCreated。理解生命周期对于内存管理和防止泄漏至关重要。

Activity的主要状态

onCreate — 在创建Activity时调用一次。这里执行初始化:setContentView、适配器设置、LiveData订阅。onResume — Activity在前台并与用户交互。onPause — Activity失去焦点(对话框、另一个Activity)。onStop — Activity不可见。onDestroy — Activity被销毁。

kotlin
// 通过LifecycleScope处理生命周期的Activity
class MainActivity : ComponentActivity() {
    private val viewModel: UserViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            MaterialTheme {
                lifecycleScope.launch {
                    repeatOnLifecycle(Lifecycle.State.STARTED) {
                        viewModel.users.collect { users ->
                            updateUi(users)
                        }
                    }
                }
            }
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("last_search", searchQuery)
    }

    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        searchQuery = savedInstanceState.getString("last_search", "")
    }
}

使用 repeatOnLifecycle 确保数据收集在Activity进入后台时暂停,并在返回前台时恢复。这可以防止泄漏和不必要的网络请求。onSaveInstanceState在屏幕旋转时保存临时状态。

Google Play:发布和要求

Google Play 是官方Android应用商店。开发者账户注册费用为一次性$25。每个应用程序都会经过自动Google Play Integrity检查,以检测恶意代码、政策违规和权限使用不当。

发布要求

谷歌要求通过 Android App Bundle (AAB) 或APK签署应用程序。AAB是推荐格式,可以为每种设备配置生成优化的APK。应用程序必须使用具有有效证书的密钥 (keystore) 签名。Google Play App Signing是谷歌端的可选密钥加密。

隐私政策

所有请求访问个人数据的应用程序必须提供 隐私政策。自2024年起,谷歌要求Data Safety声明——指定收集的数据类型和处理目的的表单。针对Android 14+的应用程序必须使用Declarations API声明权限。

要求描述
Android App Bundle用于优化交付的AAB格式
Data Safety关于收集和处理个人数据的表单
目标SDK应用程序必须针对最新的Android API级别
内容分级年龄分级问卷
商店列表名称、图标、截图、描述

常见问题

哪种语言最适合Android开发?

Kotlin — Google官方推荐的Android语言。Java也支持旧项目。Kotlin提供空安全性、协程和扩展函数,与Java相比将代码量减少30-40%。

选择什么:Jetpack Compose还是XML布局?

Jetpack Compose 因其声明式语法和自动重组优化而推荐用于所有新项目。XML布局 保留在旧项目和需要精细自定义Canvas或SurfaceView的情况下。

在Google Play上发布需要多少钱?

Google Play开发者注册费用为一次性 $25。商店佣金为前100万美元收入的15%,之后为30%。对于订阅,佣金从第一天起为15%。与Apple Developer Program不同,没有年费。

什么是Android Jetpack?

Android Jetpack 是官方SDK中包含的Google库集合:Navigation、Room(带有编译时查询检查的SQLite ORM)、WorkManager(保证的后台任务)、ViewModel(状态管理)、LiveData和StateFlow(用于响应式编程)。

Android应用程序的最低要求是什么?

新项目的最低支持版本是 API 24 (Android 7.0)。AndroidManifest.xml描述应用程序的组件和权限。APK/AAB使用keystore签名。目标SDK必须与发布时的最新API级别匹配。

总结

  • Android — 基于Linux内核的开放移动操作系统,全球市场份额72%,制造商可定制
  • Kotlin — 主要Android开发语言,具有空安全性、协程和100% Java兼容性
  • Android架构 建立在四层之上:Linux内核、HAL、Android Runtime、Application Framework
  • Activity、Service、BroadcastReceiver、ContentProvider — 在清单中注册的四个组件
  • Jetpack Compose — Google推荐的声明式UI框架,具有自动重组功能
  • Google Play — 一次性支付$25,AAB格式,强制要求Data Safety和隐私政策
  • WorkManager — 推荐用于后台任务的API,具有执行保证和约束

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读