project bootstrapping

Project Bootstrapping (项目快速建置)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "project bootstrapping" with this command: npx skills add fwrite0920/android-skills/fwrite0920-android-skills-project-bootstrapping

Project Bootstrapping (项目快速建置)

Instructions

  • 仅在新项目或新模块起步时使用

  • 先填写 Required Inputs,避免边做边改

  • 依照下方章节顺序创建骨架

  • 一次只处理一个子系统(插件、版本、结构)

  • 完成后对照 Quick Checklist

When to Use

  • Scenario A:从零创建新项目

Example Prompts

  • "请依照 One-Command Setup,创建公司模板的项目骨架"

  • "依照 Gradle Convention Plugins 章节,创建 feature module 插件"

  • "请根据 Package Structure 规划模块与套件配置"

Workflow

  • 先确认 Required Inputs(包名、SDK、JDK、CI)

  • 创建 Template 与目录结构

  • 落实 Convention Plugins 与 Version Catalog(禁止硬编码版本)

  • 生成 CI Gate 与验收指令,再用 Quick Checklist 收尾

Practical Notes (2026)

  • 默认创建 CI Gate:lint、detekt、unit test、assemble

  • 新项目先创建 Baseline Profile 量测框架

  • Version Catalog 作为单一依赖来源

  • SDK/JVM 版本集中在 libs.versions.toml ,Convention Plugin 只读取不写死

  • 每次脚手架完成后至少执行一次 ./gradlew help 与 ./gradlew :app:assembleDebug

Minimal Template

目标: packageName: compileSdk/minSdk/targetSdk: JDK/JVM Target: 模块范围: Convention Plugins: CI Gate: 验收: Quick Checklist

Required Inputs (执行前输入)

  • packageName (例如:com.company.app )

  • compileSdk / targetSdk / minSdk

  • jdkVersion / jvmTarget

  • CI provider (GitHub Actions / GitLab CI / Jenkins)

  • 模块清单 (app 、core/* 、feature/* )

Deliverables (完成后交付物)

  • settings.gradle.kts :含模块声明与 includeBuild("build-logic")

  • gradle/libs.versions.toml :集中管理版本与 plugins

  • build-logic/convention/... :至少含 app/library/feature plugin

  • app/build.gradle.kts :不直接写版本号,全部走 Version Catalog

  • CI workflow :至少包含 lint、detekt、test、assemble

  • 可执行验收命令:./gradlew help 、./gradlew :app:assembleDebug

Project Gate (验收门槛)

./gradlew help ./gradlew :app:assembleDebug

One-Command Setup

GitHub Template Repository

创建公司内部的 Template Repository,包含:

my-company-android-template/ ├── app/ ├── build-logic/ │ └── convention/ # Convention Plugins ├── core/ │ ├── common/ │ ├── data/ │ ├── domain/ │ ├── network/ │ └── ui/ ├── feature/ │ └── sample/ ├── gradle/ │ └── libs.versions.toml # Version Catalog ├── .editorconfig ├── detekt.yml └── README.md

使用方式

GitHub Template → Use this template

或使用 gh cli

gh repo create my-new-app --template my-company/android-template

在现有仓库初始化(不走 GitHub Template)

mkdir -p build-logic/convention/src/main/kotlin mkdir -p gradle app core/{common,data,domain,network,ui} feature

Gradle Convention Plugins

目录结构

build-logic/ ├── convention/ │ ├── build.gradle.kts │ └── src/main/kotlin/ │ ├── AndroidApplicationConventionPlugin.kt │ ├── AndroidLibraryConventionPlugin.kt │ ├── AndroidComposeConventionPlugin.kt │ └── AndroidFeatureConventionPlugin.kt └── settings.gradle.kts

settings.gradle.kts (root)

pluginManagement { includeBuild("build-logic") }

AndroidLibraryConventionPlugin.kt

import com.android.build.api.dsl.LibraryExtension import org.gradle.api.JavaVersion import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.getByType

class AndroidLibraryConventionPlugin : Plugin<Project> { override fun apply(target: Project) = with(target) { pluginManager.apply("com.android.library") pluginManager.apply("org.jetbrains.kotlin.android")

    val libs = extensions.getByType&#x3C;VersionCatalogsExtension>().named("libs")
    val compileSdk = libs.findVersion("compileSdk").get().requiredVersion.toInt()
    val minSdk = libs.findVersion("minSdk").get().requiredVersion.toInt()
    val jvmTarget = libs.findVersion("jvmTarget").get().requiredVersion

    extensions.configure&#x3C;LibraryExtension> {
        this.compileSdk = compileSdk

        defaultConfig {
            this.minSdk = minSdk
        }

        compileOptions {
            sourceCompatibility = JavaVersion.toVersion(jvmTarget)
            targetCompatibility = JavaVersion.toVersion(jvmTarget)
        }
    }
}

}

避免版本散落

// ❌ 不要在 module build.gradle.kts 中写死版本 dependencies { implementation("com.squareup.retrofit2:retrofit:2.11.0") }

// ✅ 统一从 Version Catalog 读取 dependencies { implementation(libs.retrofit) }

使用方式 (feature module)

// feature/login/build.gradle.kts plugins { id("mycompany.android.feature") }

dependencies { implementation(projects.core.domain) }

Version Catalog (libs.versions.toml)

[versions]

以下请替换为团队已验证组合

agp = "<agp-verified>" kotlin = "<kotlin-verified>" compileSdk = "<compile-sdk>" targetSdk = "<target-sdk>" minSdk = "<min-sdk>" jvmTarget = "<jvm-target>" composeBom = "<compose-bom-verified>" hilt = "<hilt-verified>" room = "<room-verified>" retrofit = "<retrofit-verified>"

[libraries]

Compose

compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } compose-ui = { group = "androidx.compose.ui", name = "ui" } compose-material3 = { group = "androidx.compose.material3", name = "material3" }

DI

hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" }

Network

retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }

[bundles] compose = ["compose-ui", "compose-material3"]

[plugins] android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }

建议:依赖升级在固定节奏任务中统一进行,不在功能 PR 临时改版本。

Package Structure (Feature-based)

com.example.app/ ├── core/ │ ├── common/ # 共用工具 (Extensions, Utils) │ ├── data/ # Repository 实作 │ ├── domain/ # UseCase, Entity │ ├── network/ # Retrofit, API │ └── ui/ # Design System, Theme ├── feature/ │ ├── auth/ │ │ ├── data/ # Feature-specific data │ │ ├── domain/ # Feature-specific use cases │ │ └── ui/ # Screens, ViewModels │ └── home/ └── app/ # Application, DI, Navigation

Quick Checklist

新项目创建

  • Required Inputs 已填写并冻结

  • 使用 Template Repository 或完成本地初始化

  • Convention Plugins 设置完成

  • Version Catalog 配置且模块内无硬编码版本

  • Detekt/Ktlint 集成

  • CI/CD 基础 Pipeline(lint/detekt/test/assemble)

  • ./gradlew help 与 ./gradlew :app:assembleDebug 可通过

新模块创建

  • 使用正确的 Convention Plugin

  • 遵循 Package Structure

  • 加入 Navigation Graph (如需要)

  • 不在 module 内直接写依赖版本

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

crash monitoring

No summary provided by upstream source.

Repository SourceNeeds Review
General

dependency injection mastery

No summary provided by upstream source.

Repository SourceNeeds Review
General

navigation patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

deep performance tuning

No summary provided by upstream source.

Repository SourceNeeds Review