android - 如何将protobuf添加到flutter/kotlin android项目中

标签 android flutter kotlin gradle protocol-buffers

我正在尝试将 protobuf 添加到我的 flutter 项目中。这是树ls flutter_project:

android  docker  ios   protobuf      Readme.md         test
assets   docs    lib   pubspec.lock  
build    gen     oboe  pubspec.yaml  

.proto 文件位于 protobuf 文件夹

我按照 https://github.com/google/protobuf-gradle-plugin 上的说明进行操作。这是我的 build.gradle 文件:

flutter_project/android/build.gradle:

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.14'
    }
}

//...

flutter_project/android/app/build.gradle:

//...

apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
apply plugin: 'kotlin-android'

apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion 29

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
        main {
            proto {
                srcDir '../../protobuf/proto_java/'
            }
        }
    }

//..

项目同步正常,但我无法导入 MainActivity.kt 中的任何原始文件。例如protobuf文件:

syntax = "proto3";
package proto_pack
enum MessageResponseCode {

}

我无法在 MainActivity.kt 上执行 import proto_pack 操作,也无法输入 MessageResponseCode 提示任何内容。

最佳答案

首先,我没有看到您的 protobuf 编译器配置,如果未设置,它将在系统路径中搜索它(是否可用?)。通常为了避免出现问题,我通过在应用程序 gradle 构建文件中配置 protobuf 配置来使用分布式版本的编译器。另外,我正在使用 lite 运行时,因为它是 Android 的推荐方式。

dependencies {
    implementation  "com.google.protobuf:protobuf-javalite:3.10.0"
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.10.0"
    }

    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option 'lite'
                }
            }
        }
    }
}

尝试编译您的应用程序,您应该在 flutter_project/build/app/generated/source/proto/debug/java/proto_pack 中看到 java 生成的文件

如果是这样,您的类(class)应该在 MainActivity 中可用。

最后一点,您的原始文件在语法上不正确,但我认为它只是为了示例。

关于android - 如何将protobuf添加到flutter/kotlin android项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65514600/

相关文章:

android - 如何仅在侧面设置 View 阴影以进行高程 View

flutter - 如何使用 flutter_tagging 清除选定的标签?

gradle - flutter webview_flutter插件由于gradle问题而无法工作?

dart - 在 Flutter 应用程序中更改 SliverAppBar 标题颜色

android - 使用 Kotlin 在 fragment 中创建 AlertDialog

java - 使用 supportFragmentManager 推送新 Fragment

android - 如何将初始 Prop (或启动选项)传递给第一个场景?

Android: list targetSdkVersion 更改导致:图标不可见,小部件不再工作,并且无法访问数据

android - 动态添加发现蓝牙设备到 ListPreference

android - Room 不能选择一个构造函数,因为多个构造函数是合适的错误