android 配置 protobuf插件 (以gradle7.4)为例

必读

因gradle8.0有部分api不能用,本配置不适用于gradle 8.0及以上的版本

build.gradle 配置

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.google.protobuf'
}

android {

    sourceSets {
        main {
            proto {
                // 结构(.proto)文件所处路径,默认src/main/proto
                srcDir 'src/main/proto'
            }
        }
    }

}

dependencies {

    // Protocol Buffers 的完整实现,提供了全部的功能和特性
    implementation 'com.google.protobuf:protobuf-java:3.19.3'
    // Protocol Buffers 的轻量级实现,支持 Proto3 语法
    // implementation 'com.google.protobuf:protobuf-lite:3.0.0'

}

protobuf {
    protoc {
        // You still need protoc like in the non-Android case
        artifact = 'com.google.protobuf:protoc:3.7.0'
    }
//    plugins {
//        javalite {
//            // The codegen for lite comes as a separate artifact
//            artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
//        }
//    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                // In most cases you don't need the full Java output
                // if you use the lite output.
                remove java
            }
            task.plugins {
//                javalite { }
                java {}
            }
        }
    }
}

settings.gradle 配置

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.19'
    }
}

proto结构

// 指定protobuf版本
syntax = "proto3";
// 命名空间,不影响生成的java代码输入地址
package com.example.protobuf;

// 生成的java代码所在的包
option java_package="com.example.protobuf";
// 生成的java代码类名
option java_outer_classname="StudentBuf";
// 生成的java代码是否重写hashCode和equals方法
option java_generate_equals_and_hash=true;

// 定义的结构,结构语法 https://protobuf.dev/programming-guides/proto3/
message Student {
  string name = 1;
}

序列化

val bytes = StudentBuf.Student.newBuilder().setName(txt).build().toByteArray()

化序列化

val stu = StudentBuf.Student.parseFrom(bytes)

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
配置protobuf插件,需要以下步骤: 1. 在你的项目中,添加protobuf插件的依赖。可以在项目的构建文件(如pom.xml或build.gradle)中添加以下内容: Maven项目(pom.xml): ```xml <plugins> <plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>0.6.1</version> <configuration> <!-- protobuf相关配置 --> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>test-compile</goal> </goals> </execution> </executions> </plugin> </plugins> ``` Gradle项目(build.gradle): ```groovy plugins { id "com.google.protobuf" version "0.8.13" } protobuf { // protobuf相关配置 } ``` 2. 配置protobuf插件的参数。可以根据需要在上述配置中进行具体的配置,包括源文件目录、输出目录、生成代码的语言等。一般来说,源文件目录是存放.proto文件的目录,输出目录是生成代码的存放目录。 3. 编写.proto文件。根据你的需求,编写符合protobuf语法规范的.proto文件定义你的数据结构。 4. 运行protobuf插件。可以通过命令行或者IDE中的插件工具来执行protobuf插件。执行后,protobuf插件会根据.proto文件生成相应的Java类文件或其他目标语言的类文件。 问题产生的原因是因为在使用protobuf时,需要将.proto文件编译成目标语言的类文件,以便在项目中使用。而protobuf插件就是为了简化这个过程而存在的。通过配置protobuf插件,我们可以指定.proto文件的位置和生成代码的目标语言,并可以在构建项目时自动执行protobuf插件,完成类文件的生成工作。 相关问题: 1. 有哪些常用的protobuf插件? 2. protobuf插件支持哪些目标语言的代码生成? 3. 如何在protobuf中定义嵌套类型? 4. 如何使用protobuf生成的Java类进行序列化和反序列化操作? 5. protobuf插件如何处理.proto文件中的枚举类型?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值