当前位置: 首页 > news >正文

终极Wire编译器教程:从基础配置到高级优化的完整指南

终极Wire编译器教程:从基础配置到高级优化的完整指南

【免费下载链接】wiregRPC and protocol buffers for Android, Kotlin, Swift and Java.项目地址: https://gitcode.com/gh_mirrors/wir/wire

Wire编译器是一个功能强大的工具,用于为Android、Kotlin、Swift和Java生成gRPC和protocol buffers代码。本教程将带您从基础配置开始,逐步掌握高级优化技巧,帮助您充分利用Wire编译器的潜力,提升项目开发效率。

🚀 快速入门:Wire编译器基础配置

Wire编译器的最佳配置和执行方式是通过其Gradle插件,该插件需要Gradle 5.5或更高版本。典型项目的.proto文件位于标准的src/main/proto目录中,如下所示:

src/ main/ proto/ com/ example/ pizza/ pizza_delivery.proto pizza.proto sales/ price.proto store.proto geo/ address.proto country.proto

基础插件配置

使用插件DSL的简单配置如下:

plugins { id 'application' id 'org.jetbrains.kotlin.jvm' id 'com.squareup.wire' } wire { kotlin {} }

插件将读取.proto模式定义,进行验证、链接,并生成Kotlin代码。默认情况下,Wire会在src/main/proto中查找.proto文件,并将生成的文件放在build/generated/source/wire目录中,该目录会自动注册为项目的源目录。

Wire编译器基础工作流程:从.proto源文件到生成的Kotlin代码

如果需要生成Java源代码,只需将kotlin替换为java即可。

📥 输入与输出:灵活管理源文件和生成代码

Wire可以从本地目录、本地.jar文件或通过Maven坐标指定的外部工件中提取源.proto模式定义。您可以通过sourcePath配置来指定这些源:

wire { sourcePath { srcDir 'src/main/protos' // 本地目录 srcJar 'lib/pizza-protos.jar' // 本地JAR文件 srcJar 'com.example.pizza:pizza-protos:1.0.0' // Maven坐标 } }

过滤输入文件

如果资源或目录包含的.proto文件多于您需要编译的文件,可以使用includeexclude来约束输入:

wire { sourcePath { srcDir 'src/main/protos' include 'com/example/pizza/**' // 包含特定路径下的文件 exclude 'com/example/juice/**' // 排除特定路径下的文件 } }

多语言输出配置

Wire可以在同一构建中生成多种语言的代码。使用includes可以指定为目标语言发出哪些类型,后续语言将发出剩余的类型:

wire { kotlin { includes = ['com.example.pizza.*'] // Kotlin只生成匹配的类型 } java { // Java生成其余所有类型 } }

Wire编译器输入与输出配置:从多种源到多语言代码生成

🔗 库的Proto路径:管理大型项目依赖

大型项目可能跨越多个模块,Wire的"proto path"功能可以支持这种场景。proto路径上的.proto模式文件用于链接和验证,但不会在生成的输出中产生文件。

wire { protoPath { srcDir 'src/main/address-protos' // 本地目录 srcJar 'lib/price.jar' // 本地JAR文件 srcJar 'com.example:countries:1.0.0' // Maven坐标 } }

sourcePath和protoPath链接在一起,但只有sourcePath上的类型会被生成。

Wire库的Proto路径配置:管理模块间的依赖关系

Gradle模块间依赖

Wire支持在同一项目内定义模块之间的依赖关系。一个模块可以将其.proto文件包含到输出资源中,供其他proto或Wire项目使用:

wire { protoLibrary = true // 将.proto文件包含到输出资源中 }

在其他模块中,可以使用protoPathimplementation来依赖该模块:

dependencies { protoPath(project(':common-protos')) // 依赖其他模块的proto implementation(project(':common-protos')) }

✂️ 代码修剪:优化移动项目大小

对于移动项目,很容易生成大量不必要的代码。Wire提供了自己的代码收缩器,可以及早消除不需要的声明。

使用prune和root进行修剪

使用prune可以精确消除不需要的类型或成员,这些将连同所有对它们的引用一起被消除:

wire { prune 'com.example.store.Store' // 修剪特定类型 prune 'com.example.geo.Country' // 修剪特定类型 }

或者,您可以指定要保留的内容,修剪所有不可从该集合访问的内容:

wire { root 'com.example.pizza.PizzaDelivery' // 只保留可从该类型访问的内容 }

Wire代码修剪功能:消除不必要的代码,优化应用大小

版本匹配修剪

另一种修剪过时字段的方法是为它们分配版本,然后针对版本范围或唯一版本生成代码。超出版本范围的字段将被修剪:

import "wire/extensions.proto"; message Singer { optional string name = 1; optional int32 age = 2 [(wire.until) = "5.0"]; // 5.0版本前有效 optional Date birth_date = 3 [(wire.since) = "5.0"]; // 5.0版本后有效 }

客户端代码通常针对单个版本:

wire { onlyVersion "5.0" // 只生成5.0版本的字段 }

服务代码可以支持版本范围:

wire { sinceVersion "3.0" // 从3.0版本开始 untilVersion "6.0" // 到6.0版本结束 }

🎨 自定义输出:根据需求调整生成代码

Wire允许您根据项目需求自定义生成的代码。以下是Java和Kotlin的主要配置选项:

Java配置

wire { java { includes = ['com.example.pizza.*'] // 包含的类型 excludes = ['com.example.sales.*'] // 排除的类型 out "${buildDir}/custom" // 输出目录 android = false // 是否实现Parcelable androidAnnotations = false // 是否启用Android注解 compact = false // 是否使用反射实现方法 buildersOnly = false // 是否只生成构建器 } }

Kotlin配置

wire { kotlin { includes = ['com.example.pizza.*'] // 包含的类型 excludes = ['com.example.sales.*'] // 排除的类型 out "${buildDir}/custom" // 输出目录 android = false // 是否实现Parcelable javaInterop = false // 是否支持Java互操作 rpcCallStyle = 'blocking' // RPC调用风格 rpcRole = 'server' // RPC角色 nameSuffix = "Suffix" // 服务类型名称后缀 } }

📱 Swift支持:为iOS项目生成代码

Wire也支持为Swift生成代码,最简便的方法是使用CocoaPods:

pod 'WireCompiler' # Wire编译器 pod 'Wire' # Wire运行时

然后使用以下命令编译.proto文件为Swift文件:

java -jar ./Pods/WireCompiler/compiler.jar \ "--proto_path=<directory containing .proto files>" \ "--swift_out=<directory where the generated .swift files go>" \ "--experimental-module-manifest=<path to manifest yaml file>"

Swift模块可以通过清单文件定义,例如:

CommonProtos: roots: - jedi.Lightsaber - jedi.MindTrick DarkSideProtos: dependencies: - CommonProtos roots: - darkside.*

📚 官方文档与资源

  • 详细的Wire编译器文档:docs/wire_compiler.md
  • Wire Gradle插件源码:wire-gradle-plugin/
  • Wire编译器源码:wire-compiler/

通过本教程,您应该已经掌握了Wire编译器的基础配置和高级优化技巧。开始使用Wire编译器,为您的Android、Kotlin、Swift和Java项目生成高效、简洁的gRPC和protocol buffers代码吧!

【免费下载链接】wiregRPC and protocol buffers for Android, Kotlin, Swift and Java.项目地址: https://gitcode.com/gh_mirrors/wir/wire

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/632100/

相关文章:

  • CowPi嵌入式教学平台:内存映射I/O与轮询中断实践
  • 为什么选择over-golang:Go语言学习者的终极资源宝库
  • 为什么选择r2?深度解析现代HTTP客户端的5大优势
  • 如何为HashMD编辑器添加多语言支持:从入门到精通的国际化实践指南
  • 终极Retina.js指南:10个专业技巧打造完美高清图片方案
  • AudioSeal保姆级教程:从零配置GPU驱动到AudioSeal Web服务上线
  • 嵌入式HTTPS客户端:基于WolfSSL的轻量级封装库
  • 如何利用Retina.js实现高分辨率图片自动适配:完整指南与核心原理
  • Qt 5.12+版本中QPalette::Background弃用问题及替代方案详解
  • chromeplugin叛
  • 终极Deno安全开发指南:从权限控制到依赖审计的完整实践
  • 终极Dig性能优化指南:5个减少反射开销的实用策略
  • 3proxy未来发展规划:新特性、新架构与社区路线图终极指南
  • 【头部AIGC平台内部文档首度公开】:基于eBPF+OPA的大模型集群策略引擎设计(含YAML模板与RBAC权限矩阵)
  • 【微机原理】GPU的功能和架构
  • 2026年4月口碑好的灵活用工企业推荐,人力资源外包/BPO/人事外包/项目外包/人力资源服务,灵活用工机构怎么选择 - 品牌推荐师
  • 2026年Q2塑石假山修建公司排行:特色民宿建造、修建水泥假山、创意民宿设计、卡通民宿设计、太空舱民宿修建、打造萌宠民宿选择指南 - 优质品牌商家
  • 探索GXUI跨平台渲染原理:OpenGL驱动与WebGL支持的终极指南
  • 终极指南:如何使用Apache Shiro与JWT实现现代Web应用的无状态认证
  • 微软发布的《生成式人工智能初学者.NET 第二版》课程谒
  • 深度剖析Open-XML-SDK架构:从框架设计到实现原理的完整指南
  • Dhall安全保证揭秘:如何避免配置文件的7大常见陷阱
  • 2026年4月路牙石品牌推荐,台阶石/石材/路牙石/火烧板/花岗岩石材/花坛石/蘑菇石/树坑石/路沿石,路牙石门店哪家强 - 品牌推荐师
  • 2026年实力强的青岛市高新技术企业申报/高新技术企业研发投入奖励申报专业公司推荐 - 行业平台推荐
  • PhotoEditor保存功能完整指南:从图片导出到文件管理的所有细节
  • ts-proto入门指南:如何将.proto文件转换为TypeScript类型定义
  • R语言中的循环与取模运算
  • 如何快速开发Docfx文档处理器:从零开始构建自定义扩展
  • 终极RT-DETR社区贡献指南:从新手到核心开发者的完整路径
  • Microsoft Agent Framework Skills 执行 Scripts(实战指南)倬