Android 是谷歌的一款移动操作系统,具有开源代码 (AOSP),运行在Linux内核之上。Android开发使用Kotlin语言在Android Studio环境中进行。本文涵盖操作系统架构、应用程序组件、Jetpack Compose以及Google Play发布。
要点
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 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.0 | 2008 | 在HTC Dream上首次发布 |
| Android 4.0 (ICS) | 2011 | 手机和平板电脑的统一设计 |
| Android 5.0 (L) | 2014 | Material Design,ART替代Dalvik |
| Android 6.0 (M) | 2015 | 运行时权限,Doze模式 |
| Android 8.0 (O) | 2017 | Kotlin作为官方语言 |
| Android 10 (Q) | 2019 | Scoped Storage,深色主题 |
| Android 12 (S) | 2021 | Material You,Privacy Dashboard |
| Android 15 | 2024 | 私密空间,卫星连接 |
Android 架构由四个主要层组成,将硬件与用户应用程序隔离开来。每一层通过严格定义的接口使用下层服务。
最底层是修改后的Linux内核(LTS,Android 15中的6.x版本)。它管理内存、进程、网络栈和驱动程序。硬件抽象层 (HAL) 提供统一的API与硬件交互:摄像头、蓝牙、Wi-Fi、传感器。制造商实现HAL模块而不影响上层。
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的进程间通信机制)调用。
// 通过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 是JetBrains开发的一种静态类型编程语言,运行在JVM上。谷歌在2017年的Google I/O上宣布Kotlin为Android官方语言。Kotlin与Java完全兼容,但消除了其缺点:空安全、数据类、扩展函数和协程。
Kotlin 的主要特性是内置的NullPointerException防护。类型分为可空类型 (String?) 和非空类型 (String)。编译器在构建时检查可空访问。安全调用操作符 (?.) 和Elvis操作符 (?:) 简化了可选值的使用,无需嵌套检查。
// 使用协程和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协程是在共享线程池上运行的轻量级线程。网络和磁盘使用 Dispatchers.IO,UI使用 Dispatchers.Main,CPU密集型任务使用 Dispatchers.Default。viewModelScope和lifecycleScope在组件销毁时自动取消协程。
// 使用协程和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 是基于IntelliJ IDEA的官方IDE,由谷歌开发。它包括代码编辑器、布局检查器、设备模拟器、APK分析器、性能分析器(CPU、内存、网络、能源)和Firebase集成。Android Studio 2024 (Ladybug) 支持具有多平台KMP模式的Kotlin 2.0。
Android模拟器使用 KVM(Linux)或 Hyper-V(Windows)进行硬件加速。它支持GPS、传感器、摄像头、通话和短信的模拟。Google Pixel 9 Pro是推荐用于API 35和8 GB模拟器RAM测试的配置。
性能分析器实时显示CPU负载、内存分配、网络请求和能耗。内存分析器允许通过引用树进行堆转储和泄漏分析。网络检查器记录所有HTTP/HTTPS请求及其正文和标头。对于深入分析,使用Android Studio Canary。
Android应用程序 由四种类型的组件组成,每种组件都有自己的入口点和生命周期。组件在AndroidManifest.xml文件中注册。
| 组件 | 目的 | 入口点 |
|---|---|---|
| Activity | 用于用户交互的UI屏幕 | 带有Action.MAIN和LAUNCHER类别的Intent |
| Service | 无UI的后台任务执行 | startService() 或 bindService() |
| BroadcastReceiver | 接收系统或自定义事件 | 在清单或代码中注册 |
| ContentProvider | 管理对结构化数据的访问 | 通过ContentResolver的URI |
Activity 是用户界面的基本组件。每个屏幕都是一个单独的Activity或Activity内的Fragment。屏幕之间的导航通过Intent进行——包含操作(ACTION_VIEW、ACTION_SEND)和数据(URI)的对象。在Jetpack Navigation Graph中,导航用XML描述。
Service 执行后台任务,但从Android 8开始,后台服务受到限制。WorkManager是推荐用于延迟和保证后台任务的库,支持链、约束(例如,仅在充电时)和崩溃后重启。
在 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 + ViewHolder | LazyColumn / LazyGrid |
| 预览 | Android Studio中的XML预览 | 带交互的@Preview注解 |
| 重组 | notifyDataSetChanged(完全) | 自动、精细 (DiffUtil) |
| 互操作性 | 完全(所有库) | XML中的ComposeView / Compose中的AndroidView |
谷歌推荐所有新项目使用 Jetpack Compose。XML布局在旧项目支持和需要最大View自定义(Canvas、SurfaceView)的情况下仍然相关。Compose代码平均比等效的XML + ViewBinding短40%。
// 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中显示结果,无需在模拟器上构建和运行。
Android中的每个 Activity 经历六个生命周期状态:onCreate、onStart、onResume、onPause、onStop、onDestroy。Fragment增加了onAttach、onCreateView、onViewCreated。理解生命周期对于内存管理和防止泄漏至关重要。
onCreate — 在创建Activity时调用一次。这里执行初始化:setContentView、适配器设置、LiveData订阅。onResume — Activity在前台并与用户交互。onPause — Activity失去焦点(对话框、另一个Activity)。onStop — Activity不可见。onDestroy — Activity被销毁。
// 通过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 是官方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级别 |
| 内容分级 | 年龄分级问卷 |
| 商店列表 | 名称、图标、截图、描述 |
常见问题
Kotlin — Google官方推荐的Android语言。Java也支持旧项目。Kotlin提供空安全性、协程和扩展函数,与Java相比将代码量减少30-40%。
Jetpack Compose 因其声明式语法和自动重组优化而推荐用于所有新项目。XML布局 保留在旧项目和需要精细自定义Canvas或SurfaceView的情况下。
Google Play开发者注册费用为一次性 $25。商店佣金为前100万美元收入的15%,之后为30%。对于订阅,佣金从第一天起为15%。与Apple Developer Program不同,没有年费。
Android Jetpack 是官方SDK中包含的Google库集合:Navigation、Room(带有编译时查询检查的SQLite ORM)、WorkManager(保证的后台任务)、ViewModel(状态管理)、LiveData和StateFlow(用于响应式编程)。
新项目的最低支持版本是 API 24 (Android 7.0)。AndroidManifest.xml描述应用程序的组件和权限。APK/AAB使用keystore签名。目标SDK必须与发布时的最新API级别匹配。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。