Appearance
Android
https://developer.android.google.cn/
核心特性
系统架构
Android 系统架构分为五个层次,从底层到顶层依次为:
┌─────────────────────────────────────────────────┐
│ 应用层 (Applications) │
│ 联系人、浏览器、相机、设置等系统应用 │
├─────────────────────────────────────────────────┤
│ 应用框架层 (Application Framework) │
│ Activity Manager、Content Providers、 │
│ View System、Package Manager 等 │
├─────────────────────────────────────────────────┤
│ Android 运行时层 (Android Runtime) │
│ Core Libraries + Dalvik/ART 虚拟机 │
├─────────────────────────────────────────────────┤
│ 原生库层 (Native Libraries) │
│ OpenGL ES、SQLite、WebKit、libc 等 │
├─────────────────────────────────────────────────┤
│ 硬件抽象层 (HAL) │
│ Camera、Bluetooth、Sensors 等硬件接口 │
├─────────────────────────────────────────────────┤
│ Linux 内核层 (Linux Kernel) │
│ 内存管理、进程管理、驱动程序、安全机制 │
└─────────────────────────────────────────────────┘主要特性
- 开放性:开源移动操作系统,支持自由定制和分发
- 应用生态:Google Play 商店拥有数百万款应用
- 多任务处理:支持后台应用运行和快速切换
- 通知系统:统一的通知管理机制
- Google 服务集成:Google Play Services、GCM/FCM 推送
- 设备多样性:手机、平板、手表、电视、汽车等多种设备类型
版本演进
| 版本 | 代号 | API 级别 | 发布时间 | 主要特性 |
|---|---|---|---|---|
| Android 15 | Vanilla Ice Cream | 35 | 2024 | 私密空间、预测返回、健康连接 |
| Android 14 | Upside Down Cake | 34 | 2023 | 分区存储改进、PhotoPicker |
| Android 13 | Tiramisu | 33 | 2022 | 通知权限、照片选择器 |
| Android 12 | Snow Cone | 31 | 2021 | Material You 设计语言 |
| Android 11 | Red Velvet Cake | 30 | 2020 | 气泡对话、屏幕录制 |
| Android 10 | Quince Tart | 29 | 2019 | 暗黑模式、隐私增强 |
系统配置与管理
系统设置
bash
# 通过 adb 查看系统属性
adb shell getprop ro.build.version.sdk # 获取 SDK 版本
adb shell getprop ro.product.model # 获取设备型号
adb shell getprop ro.build.version.release # 获取 Android 版本
adb shell getprop ro.build.fingerprint # 获取系统指纹
# 通过 adb 设置属性(需要 root)
adb shell setprop debug.myapp.enabled 1开发者选项
bash
# 启用开发者选项
adb shell settings put global development_settings_enabled 1
# 开启 USB 调试
adb shell settings put global usb_debugging_enabled 1
# 开启动画缩放
adb shell settings put global window_animation_scale 0.75
adb shell settings put global transition_animation_scale 0.75
adb shell settings put global animator_duration_scale 0.75
# 显示触摸操作
adb shell settings put system show_touches 1
adb shell settings put system pointer_location 1
# 开启 GPU 渲染分析
adb shell settings put global hw_ui_layer_mode 1应用管理
bash
# 列出所有已安装应用
adb shell pm list packages # 所有应用
adb shell pm list packages -s # 系统应用
adb shell pm list packages -3 # 第三方应用
adb shell pm list packages -i # 包含安装信息
# 安装/卸载应用
adb install -r app.apk # 覆盖安装
adb install --bundle AAB # 通过 App Bundle 安装
adb install -g app.apk # 授予所有权限
adb uninstall com.example.app # 卸载应用
adb uninstall -k com.example.app # 卸载但保留数据
# 清除应用数据
adb shell pm clear com.example.app
# 查看应用信息
adb shell dumpsys package com.example.app
adb shell dumpsys package com.example.app | grep version权限管理
bash
# 查看应用权限
adb shell dumpsys package com.example.app | grep permission
# 授予权限
adb shell pm grant com.example.app android.permission.CAMERA
adb shell pm grant com.example.app android.permission.READ_CONTACTS
# 撤销权限
adb shell pm revoke com.example.app android.permission.CAMERA
# 查看运行时权限状态
adb shell dumpsys package com.example.app | grep -A 5 "runtime permissions"命令行工具
ADB 常用命令
bash
# 设备连接
adb devices # 列出设备
adb devices -l # 详细列表
adb connect 192.168.1.100:5555 # 通过 WiFi 连接
adb usb # USB 模式
# 文件传输
adb push local/path /sdcard/ # 推送文件到设备
adb pull /sdcard/file local/ # 从设备拉取文件
# 应用安装
adb install app.apk
adb install-multiple base.apk split_config.xx.apk # 分包安装
# 端口转发
adb forward tcp:8080 tcp:8080 # 本地端口转发
adb reverse tcp:8080 tcp:8080 # 设备端口转发
# 日志管理
adb logcat # 查看日志
adb logcat -d # 打印当前日志并退出
adb logcat -c # 清除日志缓存
adb logcat -s MainActivity # 过滤标签
adb logcat *:E # 只显示 Error 级别
adb logcat -f /sdcard/log.txt # 输出到文件
# 截图和录屏
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png
adb shell screenrecord /sdcard/video.mp4
adb shell screenrecord --time-limit 30 --size 720x1280
# 模拟按键
adb shell input keyevent 26 # 电源键
adb shell input keyevent 4 # 返回键
adb shell input keyevent 3 # Home 键
adb shell input text "Hello World" # 输入文本
# 模拟触摸
adb shell input tap 500 500 # 点击坐标
adb shell input swipe 100 500 400 500 # 滑动Fastboot 命令
bash
# 进入 fastboot 模式
adb reboot bootloader
# 设备管理
fastboot devices # 列出设备
fastboot oem unlock # 解锁 bootloader
fastboot oem lock # 锁定 bootloader
# 刷机操作
fastboot flash boot boot.img # 刷入 boot 分区
fastboot flash system system.img # 刷入 system 分区
fastboot flash userdata userdata.img # 刷入 userdata 分区
fastboot flash recovery recovery.img # 刷入 recovery 分区
fastboot update update.zip # 通过 OTA 包更新
# 擦除分区
fastboot erase cache
fastboot erase userdata
# 重启
fastboot reboot
fastboot reboot recovery
fastboot reboot bootloaderShell 交互
bash
# 进入设备 shell
adb shell
# 常用 Linux 命令
adb shell ls -la /sdcard/
adb shell cd /data/data && ls
adb shell cat /proc/meminfo
adb shell top -m 5 # 查看进程
adb shell ps -A | grep com.example
adb shell kill -9 <pid> # 杀死进程
# 文件操作
adb shell mkdir -p /sdcard/newdir
adb shell cp /sdcard/source /sdcard/dest
adb shell mv /sdcard/source /sdcard/dest
adb shell rm -rf /sdcard/temp
adb shell chmod 755 /data/local/tmp/script.sh
# 系统服务
adb shell service list # 列出所有服务
adb shell service call phone 1 s16 "12345678901" # 拨打电话
adb shell service call alarm 2 i32 300 # 设置闹钟
# dumpsys 系统诊断
adb shell dumpsys # 所有系统服务信息
adb shell dumpsys activity # Activity 管理器
adb shell dumpsys meminfo # 内存信息
adb shell dumpsys battery # 电池状态
adb shell dumpsys wifi # WiFi 状态
adb shell dumpsys input # 输入系统
adb shell dumpsys power # 电源管理开发环境配置
Java 环境
bash
# 查看 Java 版本
java -version
javac -version
# 设置 JAVA_HOME(Windows)
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk-17", "Machine")
$env:PATH = "$env:JAVA_HOME\bin;$env:PATH"
# Android Studio 使用特定 JDK
# File -> Project Structure -> JDK Location
# 推荐使用 JDK 17 (LTS)Android SDK 管理
bash
# 查看 SDK 管理器
sdkmanager --list # 列出可用包
sdkmanager --list_installed # 已安装包
sdkmanager --list_updates # 可更新包
# 安装组件
sdkmanager "platforms;android-34"
sdkmanager "build-tools;34.0.0"
sdkmanager "platform-tools"
# 安装命令行工具
sdkmanager "cmdline-tools;latest"
# 接受许可证
sdkmanager --licenses
yes | sdkmanager --licenses
# 更新 SDK
sdkmanager --updateGradle 配置
groovy
// build.gradle (Project)
plugins {
id 'com.android.application' version '8.2.0' apply false
id 'org.jetbrains.kotlin.android' version '1.9.20' apply false
}
tasks.register('clean', Delete) {
delete rootProject.buildDir
}
// build.gradle (Module)
android {
namespace 'com.example.myapp'
compileSdk 34
defaultConfig {
applicationId "com.example.myapp"
minSdk 24
targetSdk 34
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
applicationIdSuffix ".debug"
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
buildFeatures {
viewBinding true
buildConfig true
}
lint {
abortOnError false
warningsAsErrors false
checkDependencies true
}
}
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'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}properties
# gradle.properties
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true
org.gradle.parallel=true
org.gradle.caching=trueproperties
# gradle/wrapper/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists环境变量配置
bash
# Windows (PowerShell)
# 设置 ANDROID_HOME
[Environment]::SetEnvironmentVariable("ANDROID_HOME", "C:\Users\$env:USERNAME\AppData\Local\Android\Sdk", "Machine")
[Environment]::SetEnvironmentVariable("ANDROID_SDK_ROOT", "C:\Users\$env:USERNAME\AppData\Local\Android\Sdk", "Machine")
$env:PATH = "$env:ANDROID_HOME\platform-tools;$env:ANDROID_HOME\cmdline-tools\latest\bin;$env:PATH"
# Linux/macOS (bash/zsh)
export ANDROID_HOME="$HOME/Android/Sdk"
export ANDROID_SDK_ROOT="$HOME/Android/Sdk"
export PATH="$PATH:$ANDROID_HOME/platform-tools"
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin"构建命令
bash
# Debug 构建
./gradlew assembleDebug
# Release 构建
./gradlew assembleRelease
# 运行测试
./gradlew test
./gradlew connectedAndroidTest
# 代码检查
./gradlew lint
./gradlew ktlintCheck
# 清理构建
./gradlew clean
# 构建所有变体
./gradlew build
# 查看依赖树
./gradlew app:dependencies
# 构建报告
./gradlew build --info
./gradlew build --stacktrace常见操作与技巧
性能优化
bash
# 分析应用启动时间
adb shell am start -W -n com.example/.MainActivity
# 输出:
# Starting: Intent { cmp=com.example/.MainActivity }
# Status: ok
# LaunchState: COLD
# Activity: com.example/.MainActivity
# TotalTime: 523
# WaitTime: 536
# 分析布局性能
adb shell dumpsys activity activities | grep -E "mResumedActivity|mFocusedActivity"
adb shell dumpsys gfxinfo com.example
# 重置 gfxinfo 数据
adb shell dumpsys gfxinfo com.example reset
# 分析内存使用
adb shell dumpsys meminfo com.example
adb shell dumpsys meminfo --package com.example
# 获取内存快照
adb shell am dumpheap com.example /sdcard/heap.hprof
adb pull /sdcard/heap.hprof
# 分析电池使用
adb shell dumpsys batterystats > batterystats.txt
adb shell bugreport > bugreport.zip调试技巧
bash
# 查看布局层次结构
adb shell dumpsys activity activities
# 调试布局
adb shell setprop debug.layout true
adb shell settings put global force_debuggable 1
# 网络调试
adb shell settings put global http_proxy 192.168.1.100:8888
# 数据库检查
adb shell sqlite3 /data/data/com.example/databases/app.db
# .tables
# .schema
# SELECT * FROM users;
# SharedPreferences 检查
adb shell dumpsys package com.example | grep -A 10 "Preference"
adb shell cat /data/data/com.example/shared_prefs/settings.xml
# 捕获 ANR
adb pull /data/anr/traces.txt
# 获取应用崩溃日志
adb logcat | grep -E "FATAL|AndroidRuntime|CRASH"设备管理
bash
# 模拟各种状态
adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE
# 模拟位置
adb shell gps set 37.7749 -122.4194
# 模拟网络条件
adb shell settings put global network_scoring_ui_enabled 1
adb shell cmd netpolicy add restrict-background uid 10086
# 模拟电池状态
adb shell dumpsys battery unplug
adb shell dumpsys battery reset
# 设置电池电量
adb shell dumpsys battery set level 50
adb shell dumpsys battery set status charging备份与恢复
bash
# 使用 adb backup
adb backup -f backup.ab -apk -system com.example
# 恢复备份
adb restore backup.ab
# 使用 Android Backup Service
# 需要实现 BackupAgent
public class MyBackupAgent extends BackupAgent {
@Override
public void onBackup(ParcelFileDescriptor oldState,
BackupDataOutput data,
ParcelFileDescriptor newState) throws IOException {
// 备份逻辑
}
@Override
public void onRestore(BackupDataInput data,
int appVersionCode,
ParcelFileDescriptor newState) throws IOException {
// 恢复逻辑
}
}最佳实践
应用架构推荐
kotlin
// 遵循 Clean Architecture 原则
// Presentation Layer
@Composable
fun MainScreen(viewModel: MainViewModel = hiltViewModel()) {
val state by viewModel.uiState.collectAsState()
// UI 实现
}
// Domain Layer
class GetUserUseCase(private val repository: UserRepository) {
suspend operator fun invoke(userId: String): Result<User> {
return repository.getUser(userId)
}
}
// Data Layer
class UserRepositoryImpl(
private val localDataSource: UserLocalDataSource,
private val remoteDataSource: UserRemoteDataSource
) : UserRepository {
override suspend fun getUser(userId: String): Result<User> {
return try {
val user = remoteDataSource.fetchUser(userId)
localDataSource.cacheUser(user)
Result.success(user)
} catch (e: Exception) {
val cached = localDataSource.getCachedUser(userId)
cached?.let { Result.success(it) } ?: Result.failure(e)
}
}
}性能优化技巧
kotlin
// 1. 使用协程处理异步操作
viewModelScope.launch {
val data = withContext(Dispatchers.IO) {
repository.fetchData()
}
_uiState.value = data
}
// 2. 避免内存泄漏
class MyFragment : Fragment() {
private var binding: FragmentBinding? = null
override fun onDestroyView() {
super.onDestroyView()
binding = null // 防止内存泄漏
}
}
// 3. 使用懒加载
private val viewModel: MainViewModel by viewModels()
// 4. 优化列表加载
RecyclerView.Adapter<VH>().apply {
setHasStableIds(true)
}
// 5. 资源优化
// 使用 vector drawable
// 实现图片加载库(如 Coil、Glide)
// 压缩资源文件安全性最佳实践
kotlin
// 1. 使用加密存储
val sharedPrefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build(),
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
// 2. 网络安全配置
// res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">10.0.2.2</domain>
</domain-config>
</network-security-config>
// 3. ProGuard 规则
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.example.model.** { *; }
-keepclassmembers class com.example.model.** { *; }发布流程
bash
# 1. 版本管理
# 更新 versionName 和 versionCode
# AndroidManifest.xml 或 build.gradle
# 2. 构建 Release APK
./gradlew assembleRelease
# 3. 生成签名
keytool -genkey -v -keystore my-release-key.keystore \
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
# 4. 对齐优化
zipalign -v 4 app-release-unaligned.apk app-release.apk
# 5. 生成 AAB (Android App Bundle)
./gradlew bundleRelease
# 6. 使用 App Signing
# 上传 .keystore 到 Google Play Console
# Google Play 会自动优化 APK常见问题解决
ADB 连接问题
bash
# 设备未识别
adb kill-server
adb start-server
adb devices
# 授权问题
# 在设备上撤销 USB 调试授权
# 重新连接并接受调试授权
# USB 驱动问题
# 安装 Google USB Driver 或 OEM 驱动
# WiFi 连接
adb tcpip 5555
adb connect <device_ip>:5555构建问题
bash
# 清理 Gradle 缓存
rm -rf ~/.gradle/caches/
rm -rf build/ app/build/
# 同步项目
./gradlew --refresh-dependencies
# 查看详细错误
./gradlew build --stacktrace --info
# 内存不足
# 修改 gradle.properties
org.gradle.jvmargs=-Xmx4096m -XX:+HeapDumpOnOutOfMemoryError性能问题排查
bash
# 布局渲染慢
adb shell dumpsys gfxinfo com.example framestats
# 内存泄漏
# 使用 Android Studio Profiler
# MAT (Memory Analyzer Tool) 分析 hprof 文件
# 卡顿问题
# 开启 GPU 渲染分析
adb shell setprop debug.hwui.profile true
adb shell setprop debug.hwui.profile visual_bars
# 启动慢
# 使用 Android App Startup Library
# 延迟初始化非必要组件