尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Litho 仓库结构完全指南:模块划分、示例工程与构建系统速查

发布时间:2026/9/27 8:23:09

资讯中心
01
ARTICLE

Litho 仓库结构完全指南:模块划分、示例工程与构建系统速查

Litho 仓库结构完全指南:模块划分、示例工程与构建系统速查
移动开发UI组件【免费下载链接】lithoA declarative framework for building efficient UIs on Android.项目地址https://gitcode.com/gh_mirrors/li/litho点击查看免费下载这篇指南以 docs/repo-structure.md 为骨架结合当前仓库实际布局为你梳理 Litho 开源仓库的目录地图从/lib/的外部依赖管理、三套示例工程到按需拆分的litho-*模块体系以及 Buck 与 Gradle 两套构建入口。读完你可以快速定位源码在哪、示例在哪、测试在哪、改教程该同步哪份代码并理解为何这个仓库被拆成几十个 Gradle 模块。概览一份仓库地图Litho 是一个用于在 Android 上构建高效 UI 的声明式框架。其仓库设计刻意追求模块化与按需裁剪核心框架、注解、处理器、Sections 列表框架、测试工具、示例工程被拆成独立子项目最终用户可以根据自己的集成方式Gradle 或 Buck只取所需。仓库根目录当前工作区下可以看到以下几大类内容docs/与website/文档内容与站点构建lib/外部依赖库拉取式与内置式两类sample/、sample-barebones/、sample-codelab/三套不同用途的示例工程litho-*系列框架本体的各个子模块BUCK、settings.gradle、tools/build_defs/oss/litho_defs.bzl两套构建系统的入口与公共定义下面逐层展开。/docs/ 与 /website/文档内容与站点原文档指出/docs/存放 GitHub Pages 的 Jekyll 文件在当前仓库中这部分已经演进为文档源文件 Docusaurus 站点工程的组合docs/目录存放全部 Markdown / MDX 文档源按主题分子目录例如docs/mainconcepts/组件基础、hooks、props/state、docs/codegen/注解处理器生成的组件、LayoutSpec/MountSpec/SectionSpec 约定、docs/kotlin/Kotlin API、LazyCollections、docs/sections/Sections 架构与服务等。你正在阅读的这篇指南本身也属于其中一员。website/目录则是站点的构建工程Docusaurus包含docusaurus.config.js、sidebars.js、versionConfig.js以及website/static/javadoc/下自动生成的 Javadoc HTML 页面Javadoc 目录 包含上千个 API 文档页面。原文档中Jekyll的描述在当前的 Docusaurus 布局下已不适用读者应以website/为站点构建入口。/lib/外部依赖库的两类管理方式lib/下集中存放外部第三方库按管理方式可分为两类这正是原文档强调的核心区分拉取式Fetched库库本体托管在 Maven 仓库原文档称 jCenter仓库内只保留一个BUCK文件用remote_file声明下载地址与 SHA1 校验。典型例子是lib/soloader/BUCKfb_native.remote_file( name soloader.aar, sha1 56c5199825ebfe8638af6912fb00fa2f120846e1, url mvn:com.facebook.soloader:soloader:aar:0.10.5, )从源码结构看lib/soloader/还同时拉取nativeloader与annotation两个 jar版本同为 0.10.5并聚合成soloader库目标供 Yoga 等模块依赖。类似的还有lib/flipper/其中直接存放了预下载的flipper-0.7.3-20180924.103711-10.aar与对应BUCK。内置Bundled库以完整源码形式提交进仓库体积大但可控性强。最典型的是lib/yoga/Yoga 布局引擎lib/yoga/src/main/下同时包含 56 个头文件、38 个 Java 与 19 个 C 源文件与lib/yogajni/Yoga 的 JNI 桥接层。此外lib/还包含jsr-305/、infer-annotations/、jni-hack/含真实jni.h等编译期依赖以及lib/rt.jar、lib/tools.jar这类 JDK 工具 jar。原文档的评价它们会显著增大仓库体积因此仅在绝对必要时才内置与当前布局一致。lib/yoga/BUCK中可以看到 Yoga 模块的完整依赖声明LITHO_SOLOADER_TARGET、LITHO_INFERANNOTATIONS_TARGET、LITHO_JSR_TARGET等这解释了为何 Yoga 的加载依赖 SoLoaderYoga 带有原生代码运行时需要通过 SoLoader 完成 native 库加载。示例工程三套代码三种用途仓库包含三套相互独立的示例工程它们服务于不同学习阶段这也是原文档着墨最多的部分/sample-barebones/教程的标准答案这是 barebones 教程Hello World → 列表循序渐进最终产物的源码。教程文档直接通过file指令引用其中的 Kotlin 文件例如sample-barebones/src/main/java/com/facebook/samples/lithoktbarebones/SampleApplication.kt初始化 SoLoader与对应的 Activity 代码。原文档特别强调如果修改了教程必须同步更新这里的代码因为两者通过文件引用强绑定。/sample-codelab/分步骤教学实验Codelab 教程codelabs 目录 下有 events、hello-world、state、updating-ui 等十余个独立实验对应sample-codelab/。当前仓库中它的结构在原文档基础上有所扩展位于sample-codelab/src/main/java/com/facebook/samples/lithocodelab/examples/一个逐步骤介绍 Litho 特性的 Activity每个元素指向一个在上一基础上叠加新特性的 ComponentSpec。实际目录examples/modules/中可以看到LearningTextWidgetComponentSpec、LearningLayoutPropsComponentSpec、LearningPropsComponentSpec、LearningStateComponentSpec、LearningClickEventsComponentSpec、LearningRecyclerBinderComponentSpec等正好对应文本 → 布局属性 → Props → State → 事件 → RecyclerBinder的教学路径。根目录LithoLabActivity.java等一个用组件渲染的 Hello world Activity可用于演示或实验课起步。middle/与end/middle/提供实验中间态LithoLabMiddleActivity、LithoLabMiddleComponentSpecend/则是近似于实验终态的完整实现LithoLabApproximateEndActivity与StoryCardComponentSpec、StoryHeaderComponentSpec等。原文档只提到 root 与 end 两部分当前仓库进一步加入了 middle 中间态教学梯度更完整。/sample/完整的示例 App 与 Playgroundsample/是最全面的示例应用也是官方建议的测试与 bug 报告平台原文档明确要求所有 testing/bug reporting 都使用其中的 Playground。当前仓库中它按语言分成两大部分sample/src/main/java/com/facebook/samples/litho/java/Java 版示例涵盖动画animations/含 AnimatedBadge、Transitions、SharedElements 等大量子目录、边框特效bordereffects/、事件与通信events/、communicating/、错误处理errors/、触发器triggers/、增量挂载incrementalmount/、以及playground/PlaygroundComponentSpec.java。sample/src/main/java/com/facebook/samples/litho/kotlin/Kotlin 版示例包含gettingstarted/、lithography/、lithography/sections/、collection/LazyCollections 的滚动、分页、吸顶等交互、primitives/Canvas、TextInput 等 Primitive 组件、canvas/等。此外根目录还有LithoSampleApplication.java、SampleRootActivity.java、Demos.kt与DemoListActivity.java等入口。原文档提到的独立/sample-kotlin/目录在当前仓库中已演变为sample/内部的kotlin/子包同时sample-barebones本身也是 Kotlin 实现这是阅读当前仓库时需要注意的差异。/litho-*/按需拆分的框架模块原文档的核心论点——Litho 拆分成多个子项目以便最终用户挑选使用——在当前仓库中得到了极大强化从原文档列举的 12 个模块扩展到了 Gradlesettings.gradle中声明的近 50 个模块。先看原文档明确列出的骨架模块litho-annotations纯 Java 库包含使用注解处理器所需的注解LayoutSpec、MountSpec、Prop、State等源码位于litho-annotations/src/main/java/。litho-core框架核心代码litho-core/src/main/java/包含com.facebook.litho命名空间下的 Component、LithoView、ComponentContext 等 300 文件。litho-fresco与 Fresco 图片库配合使用的组件litho-fresco/src/main/java/。litho-it框架集成测试独立成模块是为了避免循环依赖litho-it/src/main/java/与litho-it/test/com/。litho-instrumentation-tests需要真机/模拟器运行的仪器化测试litho-instrumentation-tests/src/androidTest/java/。litho-processor独立的注解处理器litho-processor/src/main/java/。litho-testing测试 Litho 组件的工具类litho-testing/src/main/java/。litho-widget常用 Android 控件的 mount speclitho-widget/src/main/java/。Sections 四件套litho-sections-coreSections 框架 Java 代码含com.facebook.litho.sections.common命名空间、litho-sections-annotations供 Sections 处理器使用的注解、litho-sections-processorSections 注解处理器、litho-sections-widgetSections 专用组件如RecyclerCollectionComponentSpec。当前仓库的扩展在骨架之上仓库又新增了大量按能力拆分的模块从 settings.gradle 可以看到完整清单例如RenderCore 系列litho-rendercore及其扩展litho-rendercore-text、litho-rendercore-transitions、litho-rendercore-visibility、litho-rendercore-incremental-mount、litho-rendercore-primitives、litho-rendercore-primitive-components/canvas与utils、litho-rendercore-yoga、litho-rendercore-glide等对应新一代渲染内核与 Primitive 组件体系。Kotlin 生态litho-widget-kotlinKotlin 组件 API、litho-coroutines-kotlin协程支持、litho-live-dataLiveData 支持、litho-fresco-kotlin。工具链litho-compiler-pluginKotlin 编译器插件、litho-editor-core与litho-editor-flipper可视化编辑、litho-espressoEspresso 测试、litho-perf-logger性能日志、litho-permissions、litho-screenshot、litho-tooling、litho-zoomable、litho-widget-material等。这种拆分方式让 Gradle 用户可以用极小的依赖集引入所需能力同时保证 BUCK 下各目标的可见性受LITHO_VISIBILITY等常量约束。构建系统BUCK 与 Gradle 双入口原文档介绍了根目录的LITHO_DEFS与BUCKBUCK是 Buck 的输入LITHO_DEFS包含 Buck 定位仓库内 target 所需的常量并被BUCK导入。这一机制在当前仓库中发生了如下演变根目录的BUCK文件依然存在BUCK但它不再直接导入同级的LITHO_DEFS而是load(//tools/build_defs/oss:litho_defs.bzl, ...)——常量定义已迁移到 tools/build_defs/oss/litho_defs.bzlLITHO_DEFS本身不再是一个独立文件。BUCK中通过litho_android_library定义了components、sections_core、litho_tooling、litho_coroutines_kotlin、litho_perf_logger等聚合目标并利用read_config(litho, is_debug, true)在构建时生成 BuildConfigconfig/build_config_values经 sed 替换{{IS_DEBUG}}得到。同时仓库保留了完整的Gradle 构建链settings.gradle声明全部模块的 include 与 projectDir 映射如project(:yoga).projectDir file(lib/yoga)gradle/、gradlew、gradle.properties构成标准 Gradle 工程骨架。运行示例 App 的两种方式README 明确给出分别是# Buck 方式 buck fetch sample buck install -r sample # Gradle 方式 ./gradlew :sample:installDebug这也解释了settings.gradle中:yoga、:yogajni、:test-processor、:test-specs等模块为何把 projectDir 指回lib/与litho-it/下的子目录——两套构建系统共享同一份源码布局。按图索骥给开发者的使用建议结合上面的地图可以快速定位常见需求学 API先读 docs/mainconcepts组件、Props、State、Hooks再看sample/的gettingstarted/、documentation/子包中的最小可运行示例。找框架实现核心逻辑在litho-core/src/main/java/com/facebook/litho/注解与处理器分别在litho-annotations与litho-processorSections 列表在litho-sections-core。找测试写法单元/集成测试集中在litho-it/test/com/仪器化测试在litho-instrumentation-tests/src/androidTest/java/测试工具则在litho-testing/src/main/java/。提交 bug 或复现问题按原文档建议使用sample/中的 Playgroundsample/src/main/java/com/facebook/samples/litho/java/playground/或kotlin/playground/作为复现载体。改动教程凡涉及 docs/tutorial.mdx 的内容必须同步检查sample-barebones/中被file引用的源码保证文档与代码一致。小结Litho 仓库的目录结构本身就是框架设计哲学的体现litho-*模块化拆分让用户按需裁剪lib/的 fetched/bundled 双轨制平衡了构建速度与可控性三套示例分别覆盖标准答案、分步实验、全量演示三个学习层次而 BUCK 与 Gradle 双入口则服务两种构建生态。以本文为索引你可以在这份地图上快速定位任何想要深入阅读的源码、示例或文档。赞分享移动开发UI组件【免费下载链接】lithoA declarative framework for building efficient UIs on Android.项目地址https://gitcode.com/gh_mirrors/li/litho点击查看免费下载相关推荐Handsontable 代码示例仓库examples完全指南目录结构、开发、构建与部署Handsontable 代码示例仓库examples完全指南目录结构、开发、构建与部署 导读 本文以 Handsontable 仓库中的 example前端UI组件Jetpack Compose Samples 官方示例仓库完全指南项目结构、六大样例与工程化实践Jetpack Compose Samples 官方示例仓库完全指南项目结构、六大样例与工程化实践 本文围绕官方 Jetpack Compose 示例仓库c示例工程AWS SDK for JavaScript (v3) 代码示例仓库javascriptv3完全指南结构与测试体系AWS SDK for JavaScript v3 代码示例仓库javascriptv3完全指南结构与测试体系 本指南以 aws doc sdk exam示例工程教程后端上一篇嵌入式数据库的事务防护盾DuckDB隔离级别实现深度解析下一篇AI提示词标准化开发基于gh_mirrors/v0s/v0-system-prompts-models-and-tools的最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。