项目结构

了解 Kotlin 模板的文件夹、功能模块和职责边界。

Android 模板是一个 Gradle app module,package 代码位于 com.soarstarter.kotlin。 主要分层是:core/ 放可复用应用服务,data/ 放持久化和网络边界,feature/ 放屏幕族, nav/ 放类型安全 routes 和图组合。

模板的 AGENTS.md / CLAUDE.md 目录树略有过期。当前代码有 core/showcase/,没有 feature/test/,没有 AuthGate.kt,也没有独立 MainNavGraph.ktMainNavGraphAppNavGraph.kt 内的 private composable。

项目地图

local.properties 被 git ignore,位于 repo root。Android Studio 也会在这里写入 sdk.dir。 Firebase client config 放在 app/google-services.json;只有该文件存在时 Gradle 才应用 Google Services plugin。

App 入口

文件职责
SoarApp.kt@HiltAndroidApp;进程启动时启动 Sentry、PostHog 和 update controller
MainActivity.kt@AndroidEntryPoint;处理 deep-link intent、edge-to-edge、主题、语言、gates、root nav 和 ToastHost
app/build.gradle.ktsAndroid SDK 版本、BuildConfig 字段、条件式 Google Services plugin、签名配置
AndroidManifest.xml权限、FCM service、launcher activity、custom scheme、App Links

core/

core/ 是可复用应用基础设施。feature code 可以依赖它;core/ 不应依赖 feature screens。

Folder职责
analytics/PostHog 的 AnalyticsController 和 typed AnalyticsEvent
auth/SessionController 和 Google Sign-In controller
biometric/Biometric app-lock controller 和 gate
deeplink/DeepLinkHandlerDeepLinkResolverDeepLinkDestination
di/DataStore、repositories、session flow、coroutines、biometric binding 的 Hilt modules
error/AppErrorBusErrorBoundarySentryReporter
haptics/toast 和 demo 使用的 Android vibrator wrapper
legal/法律文档模型、consent controller、LEGAL_VERSION
locale/AppLanguageLocaleControllerLocalizedAppHost
onboarding/Onboarding completion controller
purchases/RevenueCat lifecycle、entitlement reader、PremiumGate
rating/Play In-App Review controller
result/AppResultAppError、友好错误映射
showcase/removable Showcase leaf 共享的 capability catalog model
ui/components/可复用 Compose 控件和状态
ui/theme/Material 3 color schemes、typography、theme controller
ui/toast/SharedFlow toast controller 和 root overlay
update/Play In-App Updates controller 和 gate state

data/

data/ 用来把平台和 backend 细节从 screens 隐藏起来。

Folder职责
local/AppPreferences,提供 theme、locale、gates、rating、biometrics 的 typed DataStore flows
model/TodoProfileSubscription、profile/user DTOs 等 serializable models
network/基于 ConnectivityManager.NetworkCallbackNetworkObserver
notifications/FCM service、token table data source、内存 inbox、test-push function client
remote/SupabaseClientProvider 和 Supabase plugin setup
repository/Auth、todos、profile、subscription、upload repositories 及 Supabase remote data sources

添加 backend-backed feature 时,沿用现有形状:

data/model/NewThing.kt
data/repository/NewThingRemoteDataSource.kt
data/repository/SupabaseNewThingRemoteDataSource.kt
data/repository/NewThingRepository.kt
core/di/RepositoryModule.kt binding
feature/newthing/NewThingViewModel.kt
feature/newthing/NewThingScreen.kt
nav/Routes.kt + graph mount

feature/

每个 feature folder 拥有一个 screen family、对应 ViewModel 和私有 UI。

Folder职责
auth/Login、signup、verification、forgot/reset password、纯 validators
component/数据驱动 UI component gallery 和交互 demos
guide/purchase-gated developer-guide 示例内容
home/Home tab 和 entitlement-aware license card
legal/Consent gate UI 和 legal document screens
main/Main shell、bottom tabs、drawer、sign-out state
notifications/Push setup、FCM token 展示、内存 inbox、test push button
onboarding/四页 onboarding pager
paywall/Paywall、subscription management、redeem-code screen
permissions/Permission priming screen
profile/Me tab、personal info、account security、biometric toggle
refer/Android share-sheet referral 示例
showcase/removable demo catalog 和 capability demos
todos/Home stack 上的示例 CRUD feature
update/UpdateGate 使用的 update dialogs
upload/Supabase Storage 图片上传示例

当前没有 feature/test/ folder。如果需要手动 observability triggers,请使用 Showcase demos 或添加自己的 debug-only screen。

当前文件:

文件职责
Routes.ktobject AppRoutes 中的类型安全 @Serializable app routes
AppNavGraph.ktRoot gates、outer nav destinations、auth graph、private MainNavGraph
OnboardingGate.kt在 consent/main content 之前显示 onboarding 的 gate

Tab graph 挂载在 feature/main/MainShellScreen.kt 中,每个 tab 都有 nested destination graph, tab navigation 会保留 back stacks。

测试

Unit tests 位于 app/src/test。当前测试覆盖 controllers、repositories、validators、model rules、 component catalogs、entitlement gates 和 view models,并使用 fakes 与 kotlinx-coroutines-test

Instrumented tests 位于 app/src/androidTest。当前包含 smoke instrumented test 和 nav/NavRouteTest.kt。只有连接设备或模拟器后才运行:

./gradlew connectedDebugAndroidTest

相关页面

On this page