第10章 部署流程与持续集成¶
学习目标:掌握Android应用发布流程,建立CI/CD管道。
预计学习时间:3-5天 实践时间:1-2天
目录¶
1. 应用签名与打包¶
1.1 签名配置¶
Kotlin
// build.gradle.kts (App Module)
android {
signingConfigs {
create("release") {
storeFile = file("my-release-key.jks")
storePassword = System.getenv("STORE_PASSWORD")
keyAlias = "my-alias"
keyPassword = System.getenv("KEY_PASSWORD")
}
}
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
signingConfig = signingConfigs.getByName("release")
}
}
}
1.2 密钥管理¶
Bash
# 生成签名密钥
keytool -genkey -v \
-keystore my-release-key.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias my-alias
# 查看密钥信息
keytool -list -v -keystore my-release-key.jks
# 提取证书指纹(用于Google Play)
keytool -exportcert -alias my-alias -keystore my-release-key.jks | openssl sha1 -binary | openssl base64 # |管道:将前一命令的输出作为后一命令的输入
1.3 打包命令¶
Bash
# 构建Release APK
./gradlew assembleRelease
# 构建Release Bundle (推荐)
./gradlew bundleRelease
# 构建并安装Debug版本
./gradlew installDebug
# 清理并构建
./gradlew clean assembleRelease
2. Play Store发布¶
2.1 Google Play Console¶
- 创建开发者账号
- 访问 https://play.google.com/console
- 支付$25注册费
-
完成账号验证
-
创建应用
- 填写应用名称
- 选择默认语言
-
选择应用类型
-
配置应用信息
- 应用描述
- 截图和图标
- 隐私政策
2.2 发布配置¶
Kotlin
// build.gradle.kts
android {
defaultConfig {
applicationId = "com.example.myapp"
versionCode = 1
versionName = "1.0.0"
// 目标SDK必须是最新稳定版
targetSdk = 35
}
}
// 版本号管理脚本
// version.gradle.kts
object AppVersion {
const val major = 1
const val minor = 0
const val patch = 0
const val versionCode = major * 10000 + minor * 100 + patch
const val versionName = "$major.$minor.$patch"
}
2.3 发布流程¶
3. CI/CD管道搭建¶
3.1 GitHub Actions配置¶
YAML
# .github/workflows/android.yml
name: Android CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Run unit tests
run: ./gradlew testDebugUnitTest
- name: Generate test report
uses: asadmansr/android-test-report-action@v1.2.0
if: always()
build:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Build APK
run: ./gradlew assembleDebug
- name: Upload APK
uses: actions/upload-artifact@v3
with:
name: app-debug
path: app/build/outputs/apk/debug/*.apk
release:
runs-on: ubuntu-latest
needs: [test, build]
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Decode keystore
run: |
echo "${{ secrets.KEYSTORE }}" | base64 -d > my-release-key.jks
- name: Build Release Bundle
run: ./gradlew bundleRelease
env:
STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
- name: Upload to Play Store
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: com.example.myapp
releaseFiles: app/build/outputs/bundle/release/*.aab
track: internal
3.2 自动化版本管理¶
YAML
# .github/workflows/version-bump.yml
name: Version Bump
on:
workflow_dispatch:
inputs:
versionType:
description: 'Version type'
required: true
default: 'patch'
type: choice
options:
- patch
- minor
- major
jobs:
bump-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Bump version
run: |
./gradlew bumpVersion -PversionType=${{ github.event.inputs.versionType }}
- name: Commit changes
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add .
git commit -m "Bump version to $(cat version.txt)"
git push
4. 版本管理¶
4.1 语义化版本¶
Text Only
版本格式:主版本号.次版本号.修订号(MAJOR.MINOR.PATCH)
MAJOR:不兼容的API修改
MINOR:向下兼容的功能新增
PATCH:向下兼容的问题修正
示例:
1.0.0 -> 初始发布
1.1.0 -> 新增功能
1.1.1 -> Bug修复
2.0.0 -> 重大更新(可能不兼容)
4.2 Git工作流¶
Text Only
main: 生产分支,只能合并,不能直接提交
develop: 开发分支,功能分支合并目标
feature/*: 功能分支,从develop创建
release/*: 发布分支,从develop创建
hotfix/*: 热修复分支,从main创建
Bash
# 功能开发流程
git checkout develop
git pull origin develop
git checkout -b feature/new-feature
# 开发...
git commit -m "Add new feature"
git push origin feature/new-feature
# 创建PR合并到develop
# 发布流程
git checkout develop
git checkout -b release/1.1.0
# 版本号更新、最后测试...
git checkout main
git merge release/1.1.0
git tag -a v1.1.0 -m "Release version 1.1.0"
git push origin main --tags
5. 应用监控¶
5.1 Firebase Crashlytics¶
Kotlin
// build.gradle.kts (Project)
plugins {
id("com.google.gms.google-services") version "4.4.0" apply false
id("com.google.firebase.crashlytics") version "2.9.9" apply false
}
// build.gradle.kts (App)
plugins {
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
}
dependencies {
implementation(platform("com.google.firebase:firebase-bom:32.6.0"))
implementation("com.google.firebase:firebase-crashlytics-ktx")
implementation("com.google.firebase:firebase-analytics-ktx")
}
Kotlin
// 自定义崩溃报告
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
// 配置Crashlytics
FirebaseCrashlytics.getInstance().apply {
setCustomKey("app_version", BuildConfig.VERSION_NAME)
setCustomKey("device_model", Build.MODEL)
setUserId(userId)
}
}
}
// 记录非致命异常
try { // try/catch捕获异常
riskyOperation()
} catch (e: Exception) {
FirebaseCrashlytics.getInstance().recordException(e)
}
5.2 性能监控¶
Kotlin
// Firebase Performance
dependencies {
implementation("com.google.firebase:firebase-perf-ktx")
}
// 自定义跟踪
val trace = FirebasePerformance.getInstance().newTrace("load_data")
trace.start()
// 加载数据...
trace.stop()
// HTTP监控
val httpTrace = FirebasePerformance.getInstance()
.newHttpMetric(url, FirebasePerformance.HttpMethod.GET)
httpTrace.start()
// 执行请求...
httpTrace.setHttpResponseCode(responseCode)
httpTrace.stop()
6. 实践练习¶
练习1:完整CI/CD管道¶
任务:为项目搭建完整的CI/CD管道
要求: 1. 配置GitHub Actions 2. 自动运行测试 3. 自动构建Release包 4. 配置Play Store自动部署
练习2:版本发布流程¶
任务:完成一次完整的版本发布
要求: 1. 使用Git Flow工作流 2. 更新版本号和CHANGELOG 3. 创建Release分支 4. 打标签并发布
本章小结¶
核心要点¶
- 应用签名是发布的前提,妥善保管密钥
- Play Store是主要发布渠道,支持多种测试轨道
- CI/CD自动化构建、测试和部署流程
- 语义化版本清晰传达版本变更
- 应用监控及时发现和解决问题
发布检查清单¶
- 版本号已更新
- 签名密钥已配置
- 所有测试通过
- ProGuard/R8配置正确
- 隐私政策已更新
- 应用截图和描述已更新
- CHANGELOG已更新
- 崩溃监控已配置
教程总结¶
恭喜你完成了本教程的全部内容!你已经掌握了:
- ✅ 现代Android开发框架(Kotlin + Compose + MVVM)
- ✅ VS Code开发环境配置
- ✅ Kotlin语言核心特性
- ✅ Jetpack Compose UI开发
- ✅ MVVM架构与组件交互
- ✅ 数据处理与API集成
- ✅ 状态管理与性能优化
- ✅ AI辅助开发集成
- ✅ 测试策略与质量保证
- ✅ 部署流程与持续集成
下一步建议¶
- 完成实践案例:动手实现教程中的示例项目
- 阅读官方文档:深入学习Android官方文档
- 参与开源项目:贡献代码,学习最佳实践
- 持续学习:关注Android技术动态
推荐资源¶
本章完成时间:预计3-5天