新闻详情

新闻详情

首页 / 资讯中心 / 详情

Komi Store 开发者贡献指南:从本地构建到落地合入 PR 的完整实践

发布时间:2026/10/1 21:22:58来源:尧图网络
Komi Store 开发者贡献指南:从本地构建到落地合入 PR 的完整实践
移动开发桌面应用【免费下载链接】komi-store A free, open-source app store for developers releases on GitHub, Codeberg Forgejo — browse, discover, and install apps with one click. Formerly GitHub Store.项目地址https://gitcode.com/gh_mirrors/git/komi-store点击查看免费下载Komi Store曾用名 GitHub Store是一款基于 Kotlin Multiplatform Compose Multiplatform 构建的开源应用商店面向 GitHub、Codeberg 与 Forgejo 上开发者发布的 Release提供浏览、发现与一键安装能力。本文以仓库根目录的 CONTRIBUTING.md 为骨架结合仓库源码与构建配置系统讲解如何从零开始为该项目贡献代码包含环境搭建、常用 Gradle 命令、项目结构、编码规范、分支与提交风格、Pull Request 流程、多语言翻译以及发布节奏帮助贡献者快速上手并顺利落地第一个合入的变更。参与贡献的方式不写代码也能帮上忙官方指南列出的途径包括报告 Bug可复现的 Bug 报告最好附带日志价值最高。建议功能先以 Issue 描述用户侧遇到的问题实现方案可以在讨论中展开。整理 IssueTriage复现未解决的 Bug、补充缺失信息、打标签。写代码认领标记为good first issue或help wanted的 Issue。翻译字符串项目支持 13 种语言详见下文「翻译」一节。测试预发布版本关注仓库新打的 tag 并实际试用。需要说明的是本文规则面向的是客户端应用本体composeApp所在的仓库如果目标是贡献兄弟仓库backend 或 api应参考各自仓库的贡献说明。如何报告 Bug官方提供两条路径应用内报告Profile → Send feedback。该入口会自动填充应用版本、平台与安装方式选择邮件或 GitHub Issue 渠道即可完成提交。在 GitHub 上打开 Bug 报告模板说明现象、复现步骤与你的环境日志和截图有助于定位但不强制。日志在哪里Androidadb logcat | grep zed.rainxch.githubstore应用包名为zed.rainxch.githubstore见 gradle/libs.versions.toml 中的projectApplicationId。桌面端macOS~/Library/Logs/GitHub-Store/session.logWindows%LOCALAPPDATA%/GitHub-Store/logs/session.logLinux$XDG_STATE_HOME/GitHub-Store/logs/session.log桌面日志的落盘机制可以在源码中印证composeApp/src/jvmMain/kotlin/zed/rainxch/githubstore/CrashReporter.kt 在启动时DesktopApp的main第一行通过TeePrintStream把 stdout/stderr 同步写入session.log并在日志超过 5MB 时轮转为session.1.log同时通过Thread.setDefaultUncaughtExceptionHandler捕获未处理异常在会话日志旁写出crash-yyyyMMdd-HHmmss-SSS.log。也就是说「会话日志 崩溃转储」是一对配套产物提交 Bug 时最好一起提供。如何建议功能打开功能请求 Issue 时先讲「痛点」而非「方案」你正在做什么、应用在哪些方面不满足需求。对于较大的想法新页面、新平台支持、架构级调整官方建议先开 Issue 并等待一轮讨论再动手写代码避免返工。本地开发环境搭建环境要求依赖要求说明JDK21推荐 Temurin需正确设置JAVA_HOMEAndroid StudioHedgehog 或更新版本需安装 Kotlin Multiplatform 插件Android SDKtarget API 36、min API 26构建 Android 产物所需Git已配置 username/email提交与分支操作所需min/target SDK 在 gradle/libs.versions.toml 中定义为projectMinSdkVersion 26、projectTargetSdkVersion 36与文档一致。一次性初始化git clone https://github.com/kurikomi-labs/komi-store.git cd komi-store在仓库根目录创建local.propertiessdk.dir/path/to/Android/sdk GITHUB_CLIENT_IDyour-oauth-client-id-or-leave-blank-for-local其中GITHUB_CLIENT_ID仅在你想本地测试 GitHub OAuth device-flow 登录时才需要填写其余功能不依赖它即可运行。常用 Gradle 命令# Android debug 构建 ./gradlew :composeApp:assembleDebug # Android release 构建需要在 local.properties 中配置签名 ./gradlew :composeApp:assembleRelease # 桌面端开发模式运行 ./gradlew :composeApp:run # 桌面端安装包 ./gradlew :composeApp:packageExe :composeApp:packageMsi # Windows ./gradlew :composeApp:packageDmg :composeApp:packagePkg # macOS ./gradlew :composeApp:packageDeb :composeApp:packageRpm # Linux # 全量构建检查编译 lint ./gradlew build # 格式检查ktlint ./gradlew ktlintCheck # 自动格式化 ./gradlew ktlintFormat首次构建会拉取大量依赖后续构建会复用 Gradle 构建缓存。缓存配置可以在 gradle.properties 中看到org.gradle.cachingtrue、org.gradle.paralleltrue、org.gradle.configuration-cachetrue均已开启并设置了 4GB Gradle 堆与 3GB Kotlin daemon 堆。桌面安装包的 target format 是在 composeApp/build.gradle.kts 的compose.desktop.application块中按当前操作系统动态选择的Windows 产出Exe/MsimacOS 产出Dmg/PkgLinux 产出Deb/Rpm按仓库源码还可生成AppImage。Linux 安装包还会读取projectVersionName作为appRelease与debPackageVersion。项目结构官方文档给出的顶层布局如下与仓库实际一致composeApp/ # 主应用入口 导航 core/ domain/ # 仓储接口、模型、用例 data/ # 仓储实现、Ktor、Room、DI presentation/ # 共享主题 可复用 Compose 组件 feature/ apps/ # 已安装应用管理 auth/ # GitHub OAuth device flow details/ # 仓库 Release 详情 dev-profile/ # 开发者 / 用户资料 favourites/ # 收藏 home/ # 发现trending / hot / popular profile/ # 用户资料、设置、外观 search/ # 带过滤条件的搜索 starred/ # Star 的仓库 build-logic/convention/ # 自定义 Gradle convention 插件每个feature/name/通常包含最多三个子模块domain/、data/、presentation/。部分功能如favourites、starred、recently-viewed是纯 presentation 模块直接消费 core 层的仓储。这一分层在 settings.gradle.kts 的include(...)列表中有完整映射新增模块时需要同步在此注册。架构的完整说明见 CLAUDE.md各 feature 的专属说明见feature/name/CLAUDE.md如 feature/apps/CLAUDE.md、feature/auth/CLAUDE.md、feature/tweaks/CLAUDE.md。编码规范项目使用 Kotlin 官方代码风格kotlin.code.styleofficial见 gradle.propertiesCI 会用 ktlint 检查每个 PR。架构Clean Architecture MVIdomain 层零框架依赖data 层实现 domain 接口presentation 层持有 ViewModel 与 Compose 代码。每个页面采用State / Action / Event模式class XViewModel : ViewModel() { private val _state MutableStateFlow(XState()) val state _state.asStateFlow() private val _events ChannelXEvent() val events _events.receiveAsFlow() fun onAction(action: XAction) { ... } }Action、Event、导航路由均使用sealed interface。Koin做依赖注入每个 feature 模块从data/di/SharedModule.kt暴露一个 Koin moduleViewModel 在composeApp/src/commonMain/kotlin/zed/rainxch/githubstore/app/di/initKoin.kt中统一装配并通过koinViewModel()注入。实际装配点可以从 initKoin.kt 看到startKoin { modules(mainModule, coreModule, networkModule, databaseModule, viewModelsModule, ...) }一次聚合了 core 与各 feature 的模块。类型安全导航基于Serializablesealed interfaceGithubStoreGraph其完整路由定义在 GithubStoreGraph.kt包括ExploreScreen、SearchScreen、DetailsScreen、TweaksScreen、HostTokensScreen等 30 余条路由。Source setscommonMain共享代码Compose UI、ViewModel、仓储契约。androidMain仅 Android 的平台实现Shizuku、PackageManager、OkHttp。jvmMain仅桌面的平台实现CIO、文件路径、原生安装器。命名包名zed.rainxch.{module}.{layer}。私有状态字段使用下划线前缀_state、_events。Composable 函数使用PascalCase。布尔状态使用isXxx/hasXxx/canXxx。注释除非函数意图无法从签名和函数体看出否则不要写 KDoc / docstring。行内注释只保留给不显然的不变量、棘手的并发逻辑、第三方 Bug 的 workaround、反直觉的选择。如果读代码就能回答「为什么」就删掉注释。该规则全局适用评审者会对凑数的注释提出异议。技术栈要点以 gradle/libs.versions.tomlVersion Catalog为准当前实际版本为Kotlin 2.3.10、Compose Multiplatform 1.10.3、Ktor 3.4.0、Room 2.8.4、Koin 4.1.1另含 kotlinx.serialization 1.10.0、DataStore 1.2.0、Landscapist 2.9.5、Kermit 2.0.8、Shizuku 13.1.5、AGP 8.13.2 等。所有版本统一放在 Version Catalog 中。新增依赖时把版本号和 alias 写进libs.versions.toml不要在模块自己的build.gradle.kts里直接写版本。约定插件位于build-logic/convention/如KmpLibraryConventionPlugin.kt、CmpLibraryConventionPlugin.kt、CmpFeatureConventionPlugin.kt、CmpApplicationConventionPlugin.kt、RoomConventionPlugin.kt、KtlintConventionPlugin.kt等用于统一模块的构建脚本。新增模块时应选用合适的约定插件convention.kmp.library、convention.cmp.library、convention.cmp.feature等而不是手写构建脚本。分支与提交风格分支默认分支为main。绝不允许直接向main提交先开特性分支。命名约定与仓库现有分支保持一致feat/issue#-short-slug功能特性。fix/short-slugBug 修复。chore/short-slug重构、依赖升级、文档、构建清理。示例feat/470-sui-support、fix/auth-stuck-on-direct-and-dialog-loop、chore/drop-legacy-query-hash。提交一个提交 一个逻辑变更。不要把重构和功能打包进同一提交也不要把两个无关功能塞进一个提交。提交信息简短、祈使语气与仓库现有风格一致通常是一句不超过 72 字符的句子✅fix: clear parked install metadata once the system confirms install✅feat: support multi-select platform filter on Home❌fixed bug/wip/more changes复杂变更可以写长正文重点解释为什么而不是做了什么diff 已经展示了做了什么。允许使用 AI 辅助工具但提交信息与 PR 描述必须是你自己的语言且代码是你读过并认可的。推送前应去掉自动生成的Co-Authored-By: ...尾注避免污染git log。Pull Request 流程先开或认领 Issue再动手做实质性工作打字错误、单行修复这类小改动可以跳过。从最新main拉分支git fetch origin git checkout -b feat/123-some-thing origin/main做变更保持 PR 聚焦如果超出单一逻辑变更拆成分层提交。运行本地检查./gradlew ktlintCheck build如果确定改动范围有限也可以只跑对应模块的窄范围任务。推送并针对main开 PR描述里包含做了什么为什么——用户侧问题或技术动机如何测试——评审者在干净 checkout 上可复现的确切步骤截图或录屏——任何 UI 变更都要求视觉差异强制关联 IssueCloses #123/Fixes #123。评审前自己先跑本地检查。CI 不会对 PR 自动运行构建./gradlew ktlintCheck build是你的安全网不要指望 merge 按钮兜住坏构建。处理 CodeRabbit 的自动评审。每个 PR 都会收到 CodeRabbit AI 的评审意见逐条阅读判断是否正确要么修复要么回复解释为什么保留。「Looks fine to me」不回复是不合格的maintainer 会在合并前要求你处理这些评论。CodeRabbit 并非永远正确带理由地反驳是被欢迎的。处理人类评审意见时用后续提交跟进评审期间除非评审者要求不要 force-push合入时自动 squash。合并由 maintainer 通过 GitHub 的 Squash and merge 执行合并后你的分支会被自动删除。什么样的 PR 会被拒绝混合多个关注点一个 PR 里同时包含重构 功能 依赖升级。新增依赖但描述里没有理由。视觉变更没有截图。代码无视项目既有模式例如「为什么不是XViewModel」「为什么跳过了约定插件」。提交信息空洞 / 含糊或历史里残留 WIP 提交。翻译Komi Store 内置 13 种语言。字符串资源位于core/presentation/src/commonMain/composeResources/下core/presentation/src/commonMain/composeResources/ values/strings.xml # 默认英语 values-ar/strings-ar.xml # 阿拉伯语 values-bn/strings-bn.xml # 孟加拉语 values-es/strings-es.xml # 西班牙语 values-fr/strings-fr.xml # 法语 values-hi/strings-hi.xml # 印地语 values-it/strings-it.xml # 意大利语 values-ja/strings-ja.xml # 日语 values-ko/strings-ko.xml # 韩语 values-pl/strings-pl.xml # 波兰语 values-ru/strings-ru.xml # 俄语 values-tr/strings-tr.xml # 土耳其语 values-zh-rCN/strings-zh-rCN.xml # 简体中文Android 侧的镜像资源在 composeApp/src/androidMain/res/values 及各语言values-*/strings.xml桌面与移动端共享同一套多语言体系。新增翻译的步骤在values/strings.xml中找到缺失或新增的 key。将本地化内容加到对应的values-lang/strings-lang.xml。提交 PR标题格式为i18n: language — short note例如i18n: Spanish — translate APK Inspect strings。若新增一种全新的语言环境需要先联系 maintainer 配置 locale 文件及相关语言专属资源。另外未经核验的机器翻译不建议直接提交——低质量翻译比缺失更糟因为它会覆盖回退的英文文案。发布流程发布由 maintainer 在main上经过短暂稳定窗口后执行在composeApp/build.gradle.kts中升级versionName和versionCode当前版本定义集中在 gradle/libs.versions.toml 的projectVersionName/projectVersionCode由 build 脚本引用。为提交打 tagvX.Y.Z。maintainer 使用签名密钥构建 Android release并构建桌面安装包.exe、.msi、.dmg、.pkg、.deb、.rpm、.appimage、.tar.zst。Release Notes 由人工撰写覆盖用户可见的变更而非逐条列 commit。F-Droid 与应用内更新器会自动拾取新发布。作为贡献者通常不需要参与发布只需了解合入main不意味着立即发布之上还有发布节奏。安全披露不要在公开 Issue 中提交安全漏洞。请使用 GitHub 的私有漏洞报告功能或发送邮件至hellogithub-store.org。项目将 token 泄露、安装流程漏洞、绕过签名路径视为严重级别其余问题按尽力而为原则分类处理。常见问题与沟通渠道实时沟通官方 Discord 服务器是与 maintainer 及其他贡献者交流最快的方式。邮件hellogithub-store.org适用于不合适的公开渠道的事项赞助、合作、敏感协调。一般问题 / 讨论通过 GitHub Discussion如已启用或功能请求 Issue。本地环境卡住可以开一个包含现有进度的 draft PR并在描述里求助——项目宁愿帮助你完成也不希望你默默放弃。总而言之Komi Store 的贡献流程以「小而聚焦」为核心干净的 feature 分支、语义化的提交信息、State/Action/Event 的 MVI 模式、Koin 装配与类型安全导航是代码层面必须遵守的骨架./gradlew ktlintCheck build是提交前必须通过的本地安全网。对照本文从环境搭建开始认领一个good first issue即可完整走通「Issue → 分支 → 变更 → 检查 → PR → 评审 → 合入」的闭环。赞分享移动开发桌面应用【免费下载链接】komi-store A free, open-source app store for developers releases on GitHub, Codeberg Forgejo — browse, discover, and install apps with one click. Formerly GitHub Store.项目地址https://gitcode.com/gh_mirrors/git/komi-store点击查看免费下载相关推荐Frigate 贡献者开发指南从本地环境搭建到提交 PR 的完整实践Frigate 贡献者开发指南从本地环境搭建到提交 PR 的完整实践 Frigate 是一套面向 IP 摄像头的实时本地目标检测 NVR 系统其代码库横跨人工智能计算机视觉音视频OmniRoute 贡献者开发指南从本地构建到 PR 全流程实战OmniRoute 贡献者开发指南从本地构建到 PR 全流程实战 本文是 OmniRoute 官方《Współtworzenie OmniRoute》Pol后端API网关LLM 网关人工智能大模型MCP 服务桌面应用RS School App 贡献指南从本地开发到 PR 合入的完整工作流RS School App 贡献指南从本地开发到 PR 合入的完整工作流 本指南以仓库根目录的 CONTRIBUTING.md https://link.gi教育后端前端上一篇KernelSU 架构与实践基于 Linux 内核的 Android Root 方案解析docs/README_ES 技术深读下一篇Thorium 浏览器上手指南选对五个指令集版本让老电脑也跑上编译加速创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

TortoiseGit对接码云:安装、连接与日常使用全指南 2026/10/1 22:17:44

TortoiseGit对接码云:安装、连接与日常使用全指南

如果你在Windows环境下写代码、传代码,一定听过“小乌龟”这个名字。它其实是指TortoiseGit,一个把Git命令全部包装成鼠标点击操作的图形客户端。配上“码云”(Gitee,国内用得最多的Git托管平台之一),本地提…

阅读更多 →
YOLOv5实战:从数据集训练到TensorRT部署全流程解析 2026/10/1 22:17:38

YOLOv5实战:从数据集训练到TensorRT部署全流程解析

简介:面向YOLOv5学习者的完整实战代码仓库,内容按入门、拓展、进阶、部署四篇编排,从环境安装、模型推理、数据集构建、模型训练,到界面开发、网页演示、云端服务器训练、推理加速部署等均有涉及,适合零基础起步、逐步…

阅读更多 →
日置电阻测试仪上位机源码实战:C#串口采集与判定系统 2026/10/1 22:17:31

日置电阻测试仪上位机源码实战:C#串口采集与判定系统

简介:面向电气测量与自动化测试开发者的XCS电阻测试软件完整源码包,聚焦C#与日置电阻测试仪的集成控制,完整覆盖串口连接、SCPI命令生成与发送、回显解析、量程切换、阻值换算、断线重连、异常返回码判断等自动化测试闭环,适合正在…

阅读更多 →
工业 AP 的三流射频部署实践:3×3 MIMO 链路预算、驱动适配与载板集成 2026/10/1 22:17:02

工业 AP 的三流射频部署实践:3×3 MIMO 链路预算、驱动适配与载板集成

WLE900VX 7AA给嵌入式整机配无线模块,参数表只能回答一半问题,另一半在驱动、载板和校准口径里。本文以一块双频 33 802.11ac MiniPCIe 模块(型号 WLE900VX,高通 QCA9880 平台)为参考,整理三流 MiniPCIe 无…

阅读更多 →
从v3到v4:Godot AI升级迁移指南与签名自更新系统原理 2026/10/1 22:16:55

从v3到v4:Godot AI升级迁移指南与签名自更新系统原理

从v3到v4:Godot AI升级迁移指南与签名自更新系统原理 【免费下载链接】godot-ai Production-grade MCP server and AI tools for the Godot engine. A Snap to install. Totally free and fun. 项目地址: https://gitcode.com/gh_mirrors/go/godot-ai Godot …

阅读更多 →
组态王与MCGS触摸屏Modbus TCP通讯配置、地址映射与故障排查 2026/10/1 22:16:35

组态王与MCGS触摸屏Modbus TCP通讯配置、地址映射与故障排查

上个月帮一家做乡镇污水提升泵站的朋友调系统,原来的上位机是组态王跑在一台工控机上,现场新装了两台 MCGS 的 TPC 触摸屏做就地操作面板,要求是两边都能看到同一套液位、流量、泵状态,还要能互相下发启停指令。朋友一开始打算用两…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉