logo
0
0
WeChat Login

android-demo

CNB Pipeline CNB Clone Build Status

一个基于 Jetpack Compose 的现代 Android 应用示例项目,演示如何使用 云原生构建(CNB) 进行自动化构建和打包。

目录

项目简介

本项目是一个现代化的 Android 应用示例,使用 Kotlin 语言和 Jetpack Compose UI 框架开发。它展示了如何使用云原生构建(CNB)平台进行持续集成和自动化构建,实现了从源码到 APK 的完整构建流程。

技术栈

  • 语言: Kotlin 1.9.0
  • UI 框架: Jetpack Compose 2024.04.01
  • 最低 SDK: API 24 (Android 7.0)
  • 目标 SDK: API 34 (Android 14)
  • 构建工具: Gradle 8.6.0
  • CI/CD: 云原生构建(CNB)

主要功能

  • ✅ 基于 Jetpack Compose 的现代化 UI 实现
  • ✅ 支持 Material Design 3 设计规范
  • ✅ 完整的构建配置和依赖管理
  • ✅ 云原生构建(CNB)自动化构建支持
  • ✅ 声明式构建缓存配置
  • ✅ 单元测试和 UI 测试支持
  • ✅ ProGuard 代码混淆配置

项目依赖

核心依赖

库名称版本说明
androidx.core:core-ktx1.10.1Android 核心库 KTX 扩展
androidx.lifecycle:lifecycle-runtime-ktx2.6.1生命周期运行时
androidx.activity:activity-compose1.8.0Compose Activity 支持
androidx.compose:compose-bom2024.04.01Compose 材料清单
androidx.compose.ui:ui-Compose UI 基础库
androidx.compose.material3-Material Design 3 组件
junit5.0-SNAPSHOT单元测试框架
androidx.test.espresso:espresso-core3.5.1UI 测试框架

完整的依赖信息请参考 gradle/libs.versions.toml

兼容性说明

系统要求

  • Android Studio: Arctic Fox (2020.3.1) 或更高版本
  • Gradle: 8.6.0
  • JDK: 8 或更高版本
  • Kotlin: 1.9.0

设备兼容性

  • 最低 Android 版本: Android 7.0 (API 24)
  • 目标 Android 版本: Android 14 (API 34)
  • 架构支持: ARM64-v8a, ARMv7, x86, x86_64

安装步骤

方式一:克隆仓库

# 克隆项目 git clone https://cnb.cool/examples/ecosystem/android-demo.git cd android-demo # 给 gradlew 添加执行权限(Linux/macOS) chmod +x gradlew

方式二:使用 CNB 快速开始

# 使用云原生构建初始化项目 cnb-init-from https://cnb.cool/examples/ecosystem/android-demo.git

本地构建

# 清理旧的构建 ./gradlew clean # 构建调试版本 ./gradlew assembleDebug # 构建发布版本 ./gradlew assembleRelease # 运行测试 ./gradlew test

构建产物位置:

  • 调试 APK: app/build/outputs/apk/debug/app-debug.apk
  • 发布 APK: app/build/outputs/apk/release/app-release.apk

使用说明

前提条件

  1. 使用 云原生构建(CNB) 构建你的项目
  2. 配置声明式的构建缓存

云原生构建配置

在项目根目录创建 .cnb.yml 文件:

master: push: - docker: # 可以在 hub.docker.com 上找需要的 android sdk 版本的 docker 镜像 # https://hub.docker.com/r/mobiledevops/android-sdk-image # https://github.com/docker-android-sdk # 当这些都不满足您的需求时,您可以制作自己的 docker 镜像安装您需要的 sdk 版本和工具 image: mobiledevops/android-sdk-image:34.0.1 volumes: - /root/.gradle:cow stages: - name: android-build script: ./gradlew build - name: "ls" script: ls ./app/build/outputs/apk/release

配置说明

修改应用信息

编辑 app/build.gradle.kts 文件:

defaultConfig { applicationId = "com.example.android_demo" // 修改为您的包名 versionCode = 1 // 版本号 versionName = "1.0" // 版本名称 minSdk = 24 // 最低 SDK 版本 targetSdk = 34 // 目标 SDK 版本 }

配置签名

发布版本需要配置签名信息,在 app/build.gradle.kts 中:

signingConfigs { create("release") { storeFile = file("your-keystore.jks") storePassword = "your-store-password" keyAlias = "your-key-alias" keyPassword = "your-key-password" } } buildTypes { release { signingConfig = signingConfigs.getByName("release") isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } }

配置选项

Gradle 属性配置

gradle.properties 文件中可以配置以下选项:

# Android 构建选项 android.useAndroidX=true android.enableJetifier=true # 构建性能优化 org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.caching=true org.gradle.daemon=true

ProGuard 配置

app/proguard-rules.pro 文件中自定义混淆规则:

# 保持类成员不被混淆 -keepclassmembers class * { public <init>(...); } # 保留特定类 -keep class com.example.android_demo.** { *; }

项目结构

android-demo/ ├── .cnb.yml # 云原生构建配置文件 ├── .gitignore # Git 忽略文件配置 ├── build.gradle.kts # 项目级构建脚本 ├── gradle.properties # Gradle 属性配置 ├── settings.gradle.kts # Gradle 设置文件 ├── gradlew # Gradle 包装器(Unix) ├── gradlew.bat # Gradle 包装器(Windows) ├── LICENSE.txt # MIT 许可证文件 ├── README.md # 项目说明文档 ├── app/ # 应用模块 │ ├── build.gradle.kts # 应用模块构建脚本 │ ├── proguard-rules.pro # ProGuard 混淆规则 │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml # 应用清单文件 │ │ ├── java/com/example/android_demo/ │ │ │ ├── MainActivity.kt # 主 Activity │ │ │ └── ui/theme/ # UI 主题配置 │ │ │ ├── Color.kt # 颜色定义 │ │ │ ├── Theme.kt # 主题配置 │ │ │ └── Type.kt # 字体样式 │ │ └── res/ # 资源文件 │ │ ├── drawable/ # 可绘制资源 │ │ └── mipmap-*/ # 应用图标 │ ├── test/ # 单元测试 │ └── androidTest/ # Android UI 测试 └── gradle/ # Gradle 配置 ├── libs.versions.toml # 依赖版本管理 └── wrapper/ # Gradle 包装器 JAR

代码示例

主 Activity 示例

class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { AndroidDemoTheme { // Surface 容器使用 'background' 颜色 Surface( modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background ) { Greeting("Android") } } } } } @Composable fun Greeting(name: String, modifier: Modifier = Modifier) { Text( text = "Hello $name!", modifier = modifier ) }

主题配置示例

@Composable fun AndroidDemoTheme( darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit ) { val colorScheme = when { darkTheme -> DarkColorScheme else -> LightColorScheme } MaterialTheme( colorScheme = colorScheme, typography = Typography, content = content ) }

云原生构建配置示例

master: push: - docker: image: mobiledevops/android-sdk-image:34.0.1 volumes: - /root/.gradle:cow # 启用构建缓存 stages: - name: clean script: ./gradlew clean - name: build script: ./gradlew assembleRelease - name: test script: ./gradlew test - name: upload script: ls ./app/build/outputs/apk/release

常见问题

Q1: 构建失败,提示 Gradle 内存不足?

A:gradle.properties 中增加堆内存:

org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=512m

Q2: 如何切换到不同的 Android SDK 版本?

A: 修改 .cnb.yml 中的 Docker 镜像版本:

image: mobiledevops/android-sdk-image:33.0.2 # 改为所需版本

Q3: 构建缓存不生效?

A: 确保 .cnb.yml 中配置了 volumes

volumes: - /root/.gradle:cow # cow = Copy On Write,启用缓存

Q4: 如何自定义应用图标?

A: 替换 app/src/main/res/mipmap-*/ 目录下的图标文件:

  • ic_launcher.webp - 应用图标
  • ic_launcher_round.webp - 圆形图标

Q5: 如何添加新的依赖库?

A:gradle/libs.versions.toml 中添加:

[versions] yourLibrary = "1.2.3" [libraries] your-library = { group = "com.example", name = "library", version.ref = "yourLibrary" }

然后在 app/build.gradle.kts 中使用:

dependencies { implementation(libs.your.library) }

Q6: 支持 Android Studio 吗?

A: 完全支持。使用 Android Studio 打开项目,它会自动检测 Gradle 配置并进行同步。建议使用 Android Studio Hedgehog (2023.1.1) 或更高版本以获得最佳体验。

贡献指南

我们欢迎任何形式的贡献!如果您想为项目做出贡献,请遵循以下步骤:

提交代码

  1. Fork 本仓库
  2. 创建您的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交您的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启一个 Pull Request

代码规范

  • 遵循 Kotlin 代码风格指南
  • 使用有意义的变量和函数命名
  • 为公共 API 添加文档注释
  • 编写单元测试覆盖新功能

提交信息规范

请遵循 Conventional Commits 规范:

feat: 添加新功能 fix: 修复 bug docs: 文档更新 style: 代码格式调整 refactor: 重构代码 test: 添加测试 chore: 构建/工具链更新

许可证

本项目采用 MIT 许可证 - 详见 LICENSE.txt 文件。

The MIT License (MIT) Copyright (c) 2024-present, cnb.cool Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

联系方式


注意: 本项目主要用于演示云原生构建在 Android 项目中的应用。如果您在生产环境中使用,请根据实际需求调整配置。