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

张开发
2026/4/22 18:53:00 15 分钟阅读

分享文章

终极Wire编译器教程:从基础配置到高级优化的完整指南
终极Wire编译器教程从基础配置到高级优化的完整指南【免费下载链接】wiregRPC and protocol buffers for Android, Kotlin, Swift and Java.项目地址: https://gitcode.com/gh_mirrors/wir/wireWire编译器是一个功能强大的工具用于为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文件多于您需要编译的文件可以使用include和exclude来约束输入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文件包含到输出资源中 }在其他模块中可以使用protoPath和implementation来依赖该模块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生成代码最简便的方法是使用CocoaPodspod WireCompiler # Wire编译器 pod Wire # Wire运行时然后使用以下命令编译.proto文件为Swift文件java -jar ./Pods/WireCompiler/compiler.jar \ --proto_pathdirectory containing .proto files \ --swift_outdirectory where the generated .swift files go \ --experimental-module-manifestpath to manifest yaml fileSwift模块可以通过清单文件定义例如CommonProtos: roots: - jedi.Lightsaber - jedi.MindTrick DarkSideProtos: dependencies: - CommonProtos roots: - darkside.* 官方文档与资源详细的Wire编译器文档docs/wire_compiler.mdWire 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),仅供参考

更多文章