LEGO-Catalog部署指南:如何构建发布版本与配置持续集成

LEGO-Catalog部署指南:如何构建发布版本与配置持续集成

【免费下载链接】LEGO-Catalog A LEGO® Catalog app illustrating current Android Architecture state using Android development best practices. 【免费下载链接】LEGO-Catalog 项目地址: https://gitcode.com/gh_mirrors/le/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.gradleapp/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插件

  1. 安装Ktlint插件
  2. 在项目根目录运行:
./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.gradleext块中统一管理:

ext {
    kotlinVersion = '1.3.41'
    roomVersion = '2.2.0-alpha01'
    navigationVersion = '2.0.0'
    // ... 其他版本
}

依赖分类清晰

依赖项按功能分类:

  1. Android Jetpack组件
  2. 网络库(Retrofit, OkHttp, GSON)
  3. 图像加载(Glide)
  4. 依赖注入(Dagger 2)
  5. 调试工具(Timber, Stetho)
  6. 测试框架

🚢 发布流程优化

版本号管理

建议使用语义化版本控制:

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 "发布构建完成!"

📈 性能优化建议

构建性能优化

  1. 启用构建缓存
org.gradle.caching=true
  1. 启用并行构建
org.gradle.parallel=true
  1. 配置守护进程内存
org.gradle.jvmargs=-Xmx4096m

APK大小优化

  1. 启用代码混淆(在release构建类型中设置minifyEnabled true
  2. 启用资源压缩
  3. 使用WebP格式图片
  4. 移除未使用的资源

🛠️ 故障排除

常见问题解决

问题1:构建失败 - API密钥未配置

错误:找不到API密钥

解决方案:在gradle.properties中添加api_developer_token

问题2:Dagger编译错误

错误:Dagger组件生成失败

解决方案:清理并重新构建

./gradlew clean build

问题3:测试覆盖率报告为空 解决方案:确保在调试构建中启用了测试覆盖率

debug {
    testCoverageEnabled true
}

🎯 总结

LEGO-Catalog项目展示了Android现代架构的最佳实践,通过本文的部署指南,你可以:

  1. ✅ 成功构建发布版本 - 掌握调试和发布版本的构建流程
  2. ✅ 配置持续集成 - 使用GitHub Actions或Jenkins自动化构建和测试
  3. ✅ 确保代码质量 - 集成代码覆盖率检查和风格验证
  4. ✅ 优化发布流程 - 实现自动化的版本管理和发布流程

这个项目不仅是一个功能完整的LEGO目录应用,更是一个学习Android现代架构的绝佳示例。通过遵循本文的指南,你可以轻松地将这些最佳实践应用到自己的Android项目中。

记住,良好的构建和部署流程是项目成功的关键!🚀

【免费下载链接】LEGO-Catalog A LEGO® Catalog app illustrating current Android Architecture state using Android development best practices. 【免费下载链接】LEGO-Catalog 项目地址: https://gitcode.com/gh_mirrors/le/LEGO-Catalog

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值