
PhotoAffix项目架构全解析6个Gradle模块的完整结构详解【免费下载链接】photo-affix Stitch your photos together vertically or horizontally easily!项目地址: https://gitcode.com/gh_mirrors/ph/photo-affixPhotoAffix 是一款开源的 Android 照片拼接工具可以把多张图片轻松地在竖直或水平方向上拼接成长图。本文带你从 Gradle 多模块架构的角度拆解这个项目它由 6 个 Gradle 模块组成模块职责清晰、依赖方向单向是学习 Android 模块化开发的优秀范本。从 settings.gradle 看懂6个Gradle模块整个项目的模块注册只有一行位于 settings.gradleinclude :app, :viewcomponents, :prefs, :utilities, :dialogs, :engine这 6 个模块各司其职一张表看懂模块职责定位核心文件app应用主入口唯一可打包安装的模块MainActivity.ktengine核心图片拼接引擎负责位图加载与拼接计算AffixEngine.ktutilities通用工具库IO、媒体扫描、Kotlin 扩展UtilityModule.ktprefs用户偏好设置管理方向、间距、背景色等PrefsModule.ktviewcomponents自定义 UI 组件圆环、设置面板等SettingsLayout.ktdialogs图片间距、缩放比例等设置对话框ImageSpacingDialog.kt各Gradle模块职责详解从UI到引擎app组装一切的应用外壳app模块依赖其余全部 5 个模块见 app/build.gradle负责把 UI、对话框、引擎粘合起来。它还引入了assent权限申请和drag-select-recyclerview网格拖选等第三方库。engine拼接逻辑的核心engine模块与 Android UI 几乎无关是纯 Kotlin 的图像处理核心可单测AffixEngine.kt对外门面提供process()计算尺寸和commit()执行拼接落盘两个挂起函数StitchEngine.kt真正把多张位图拼成一张图的子引擎DimensionsEngine.kt根据所选图片计算最终输出宽高BitmapManipulator.kt位图缩放与编码这种引擎模块零 UI 依赖的设计让拼接算法可以用 AffixEngineTest.kt 这样的单元测试在 JVM 上直接验证。utilities 与 prefs底层支撑层utilities提供 IoManager.kt临时文件管理、MediaScanner.kt媒体扫描和一组 Kotlin 扩展函数prefs基于 RxkPrefs 库在 PrefsModule.kt 中定义了水平堆叠、缩放优先级、背景填充色、竖直/水平间距 5 个偏好项并用StackHorizontally等 限定注解 区分同类注入。viewcomponents 与 dialogsUI 表现层viewcomponents封装了可复用的自定义控件CircleView.kt、SettingsLayout.ktdialogs则在其之上构建间距与缩放的设置对话框两者都通过prefs读写用户配置。Gradle模块依赖方向一张单向依赖图从各模块build.gradle的implementation project(...)声明可以整理出严格的单向依赖链下层不反向依赖上层模块依赖的其他模块appdialogs、viewcomponents、engine、prefs、utilities全部dialogsviewcomponents、utilities、prefsviewcomponentsutilities、prefsengineutilities、prefsutilitiesprefsprefs无最底层仅依赖第三方库这条prefs → utilities → viewcomponents/engine/dialogs → app的链路保证了核心引擎可以脱离 UI 独立演进UI 模块可以脱离引擎单独修改这正是多模块架构最直观的收益。Dagger依赖注入6个模块如何被缝在一起PhotoAffix 使用 Dagger 2 完成跨模块的组件装配每个模块贡献自己的ModulePrefsModule.ktProvides提供 RxkPrefs 与各类 PrefUtilityModule.kt绑定 DpConverter、IoManager、MediaScannerEnginesModule.kt绑定 StitchEngine、DimensionsEngine、AffixEngine、BitmapManipulatorAppBindModule.kt绑定 PhotoLoader 与 MainPresenter最终的装配点在 AppComponent.ktSingleton Component( modules [ PrefsModule::class, AppBindModule::class, UtilityModule::class, EnginesModule::class, AppProvideModule::class ] ) interface AppComponent所有模块的 Module 在这里汇合由app统一注入MainActivity、SettingsLayout等消费方——这就是模块化 依赖注入协作的完整闭环。版本集中管理与工程规范所有第三方库的版本号集中声明在 dependencies.gradle 的ext.versions中Kotlin 1.3.30、Dagger 2.21、RxJava 2.2.6、Glide 4.9.0 等各模块只引用versions.xxx而不写死版本号升级依赖只需改一处。此外spotless.gradle 配合 spotless.license.kt 统一了代码格式与 Apache 2.0 许可头versionsPlugin.gradle 则配合版本发布——小型项目也能拥有大型工程的规范感。总结新手可以学到的3个架构要点职责单一引擎、UI、设置、工具各占一个模块engine零 UI 依赖可独立测试依赖单向从settings.gradle注册表出发依赖链始终由上层指向下层杜绝循环依赖集中治理版本号集中声明、Dagger 模块化装配、Spotless 统一代码风格为长期维护打好地基。按prefs → utilities → viewcomponents/engine/dialogs → app的顺序阅读源码你就能完整掌握 PhotoAffix 这个 6 模块拼接工具的架构全貌。✅【免费下载链接】photo-affix Stitch your photos together vertically or horizontally easily!项目地址: https://gitcode.com/gh_mirrors/ph/photo-affix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考