LEGO-Catalog部署指南:如何构建发布版本与配置持续集成
LEGO-Catalog是一个展示Android现代架构最佳实践的LEGO®目录应用,它使用Kotlin语言和Android Jetpack组件库,采用了Clean Architecture、MVVM和Repository模式。这个项目不仅是LEGO爱好者的实用工具,更是Android开发者学习现代架构的绝佳示例。本文将详细介绍如何构建LEGO-Catalog的发布版本以及配置持续集成流程,帮助你快速上手这个优秀的Android架构示范项目。
📱 项目架构概览
LEGO-Catalog应用采用了Google推荐的现代Android架构指南,整个项目基于MVVM(Model-View-ViewModel)和Repository模式构建。应用架构清晰地展示了当前Android开发的最佳实践:
Android应用架构指南
项目使用了Android Jetpack作为架构的核心组件,包括:
- ViewModel - 管理UI相关数据,在配置更改时保持数据
- LiveData - 构建可观察的数据对象,通知视图数据变化
- Room - SQLite数据库,提供编译时检查
- Navigation - 处理应用内导航
- Paging - 分页加载和显示数据
- WorkManager - 管理后台作业
Android Jetpack组件
🔧 环境准备与项目克隆
系统要求
- Android Studio 最新版本
- JDK 8 或更高版本
- Gradle 6.0+(项目已包含Gradle Wrapper)
克隆项目
首先克隆项目到本地:
git clone https://gitcode.com/gh_mirrors/le/LEGO-Catalog
cd LEGO-Catalog
API密钥配置
项目使用Rebrickable.com的API,需要在gradle.properties文件中配置API密钥:
api_developer_token = your_api_token_from_rebrickable.com
你可以在Rebrickable官网注册并获取API密钥。
🏗️ 构建配置详解
项目结构
LEGO-Catalog采用标准的Android项目结构:
- app/ - 主应用模块
- app/src/main/ - 主源代码目录
- app/src/androidTest/ - 仪器化测试
- app/src/test/ - 单元测试
构建脚本分析
项目的主要构建配置位于根目录的build.gradle和app/build.gradle文件中:
根目录build.gradle定义了项目级的依赖版本:
ext {
compileSdkVersion = 28
minSdkVersion = 21
targetSdkVersion = 28
// 依赖版本定义
kotlinVersion = '1.3.41'
roomVersion = '2.2.0-alpha01'
navigationVersion = '2.0.0'
// ... 其他版本定义
}
app/build.gradle配置应用特定的构建选项:
android {
compileSdkVersion rootProject.compileSdkVersion
defaultConfig {
applicationId "com.elifox.legocatalog"
minSdkVersion rootProject.minSdkVersion
targetSdkVersion rootProject.targetSdkVersion
versionCode 1
versionName "1"
}
buildTypes {
debug {
testCoverageEnabled true
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
🚀 构建发布版本
1. 调试版本构建
构建调试版本用于开发和测试:
./gradlew assembleDebug
或使用Android Studio的Build菜单选项。
2. 发布版本构建
构建发布版本需要配置签名密钥:
步骤1:创建签名密钥
keytool -genkey -v -keystore legocatalog.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias legocatalog
步骤2:配置签名信息 在app/build.gradle中添加签名配置:
android {
signingConfigs {
release {
storeFile file("legocatalog.jks")
storePassword "your_password"
keyAlias "legocatalog"
keyPassword "your_password"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
步骤3:构建发布APK
./gradlew assembleRelease
构建完成后,APK文件位于:
app/build/outputs/apk/release/app-release.apk
3. 生成AAB包(用于Google Play)
./gradlew bundleRelease
AAB文件位于:
app/build/outputs/bundle/release/app-release.aab
🔄 持续集成配置
GitHub Actions配置
在项目根目录创建.github/workflows/android-ci.yml文件:
name: Android CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: '1.8'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
- name: Run tests
run: ./gradlew test
- name: Upload build artifacts
uses: actions/upload-artifact@v2
with:
name: app-build
path: app/build/outputs/
Jenkins配置示例
创建Jenkinsfile用于Jenkins流水线:
pipeline {
agent any
environment {
ANDROID_HOME = '/usr/local/android-sdk'
}
stages {
stage('Checkout') {
steps {
git url: 'https://gitcode.com/gh_mirrors/le/LEGO-Catalog', branch: 'master'
}
}
stage('Build') {
steps {
sh './gradlew assembleDebug'
}
}
stage('Test') {
steps {
sh './gradlew test'
sh './gradlew connectedAndroidTest'
}
}
stage('Code Coverage') {
steps {
sh './gradlew fullCoverageReport'
publishHTML([
reportDir: 'app/build/reports/jacoco/fullCoverageReport/html/',
reportFiles: 'index.html',
reportName: 'Code Coverage Report'
])
}
}
}
}
🧪 测试与代码覆盖率
运行单元测试
./gradlew test
运行仪器化测试
./gradlew connectedAndroidTest
生成代码覆盖率报告
LEGO-Catalog项目已经配置了Jacoco代码覆盖率工具:
./gradlew fullCoverageReport
覆盖率报告位于:
app/build/reports/jacoco/fullCoverageReport/
测试配置说明
项目的测试配置在app/build.gradle中定义:
- 单元测试:使用JUnit和Mockito
- 仪器化测试:使用Espresso进行UI测试
- 网络测试:使用MockWebServer模拟网络请求
📊 代码质量检查
Ktlint代码风格检查
项目使用Ktlint强制执行Kotlin代码风格:
./gradlew ktlintCheck
Spotless代码格式化
使用Spotless自动格式化代码:
./gradlew spotlessApply
配置Android Studio Ktlint插件
- 安装Ktlint插件
- 在项目根目录运行:
./ktlint --apply-to-idea-project --android
🔍 调试与监控
Stetho调试工具
LEGO-Catalog集成了Stetho调试桥,提供:
- 网络请求监控
- 数据库查看器
- UI层次结构检查
在调试版本中,可以通过Chrome浏览器访问chrome://inspect来使用Stetho功能。
Timber日志记录
项目使用Timber进行结构化日志记录:
Timber.d("Loading LEGO themes")
Timber.e(exception, "Network error occurred")
📦 依赖管理最佳实践
版本统一管理
所有依赖版本在根目录build.gradle的ext块中统一管理:
ext {
kotlinVersion = '1.3.41'
roomVersion = '2.2.0-alpha01'
navigationVersion = '2.0.0'
// ... 其他版本
}
依赖分类清晰
依赖项按功能分类:
- Android Jetpack组件
- 网络库(Retrofit, OkHttp, GSON)
- 图像加载(Glide)
- 依赖注入(Dagger 2)
- 调试工具(Timber, Stetho)
- 测试框架
🚢 发布流程优化
版本号管理
建议使用语义化版本控制:
versionCode 2
versionName "1.1.0"
构建变体配置
可以配置不同的构建变体:
flavorDimensions "environment"
productFlavors {
dev {
dimension "environment"
applicationIdSuffix ".dev"
versionNameSuffix "-dev"
}
prod {
dimension "environment"
}
}
自动化发布脚本
创建发布脚本release.sh:
#!/bin/bash
# 检查未提交的更改
if [[ -n $(git status --porcelain) ]]; then
echo "有未提交的更改,请先提交或暂存"
exit 1
fi
# 运行测试
./gradlew test
if [ $? -ne 0 ]; then
echo "测试失败,发布中止"
exit 1
fi
# 构建发布版本
./gradlew assembleRelease
# 生成发布说明
git log --oneline --since="1 month ago" > changelog.txt
echo "发布构建完成!"
📈 性能优化建议
构建性能优化
- 启用构建缓存:
org.gradle.caching=true
- 启用并行构建:
org.gradle.parallel=true
- 配置守护进程内存:
org.gradle.jvmargs=-Xmx4096m
APK大小优化
- 启用代码混淆(在
release构建类型中设置minifyEnabled true) - 启用资源压缩
- 使用WebP格式图片
- 移除未使用的资源
🛠️ 故障排除
常见问题解决
问题1:构建失败 - API密钥未配置
错误:找不到API密钥
解决方案:在gradle.properties中添加api_developer_token
问题2:Dagger编译错误
错误:Dagger组件生成失败
解决方案:清理并重新构建
./gradlew clean build
问题3:测试覆盖率报告为空 解决方案:确保在调试构建中启用了测试覆盖率
debug {
testCoverageEnabled true
}
🎯 总结
LEGO-Catalog项目展示了Android现代架构的最佳实践,通过本文的部署指南,你可以:
- ✅ 成功构建发布版本 - 掌握调试和发布版本的构建流程
- ✅ 配置持续集成 - 使用GitHub Actions或Jenkins自动化构建和测试
- ✅ 确保代码质量 - 集成代码覆盖率检查和风格验证
- ✅ 优化发布流程 - 实现自动化的版本管理和发布流程
这个项目不仅是一个功能完整的LEGO目录应用,更是一个学习Android现代架构的绝佳示例。通过遵循本文的指南,你可以轻松地将这些最佳实践应用到自己的Android项目中。
记住,良好的构建和部署流程是项目成功的关键!🚀
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



