【问题标题】:How to share a proto definition file between an android module and a non-android module (without using another module)?如何在 android 模块和非 android 模块之间共享 proto 定义文件(不使用另一个模块)?
【发布时间】:2021-01-22 19:29:35
【问题描述】:

假设我们在 Android Studio (4.1) 中有一个项目,它由两个模块组成,一个 android app 模块和一个包含(Kotlin 或 Java)服务器应用程序的模块,该应用程序应该在非 Android 设备上运行(可能在本地主机上,在第一次运行时)。两个模块都应该使用协议缓冲区(protobuf)。对于 android 应用程序,这已经很有效了。 到目前为止,对应的 protobuf 定义(.proto)驻留在 android 模块中。

现在,我想在服务器应用程序模块中重用 protobuf 定义。我知道如何使一个模块依赖于另一个模块,这是万一真的想重用另一个模块的代码的方法。但是,我只想在两个模块(protobuf-lite vs protobuf,也许是其他语言)中重用 .proto 并运行 protoc(生成 protobuf 源和标头)。

也许这很容易回答,但我找不到允许在两个模块之间共享单个文件的解决方案。谁能给我提示?

我发现了这个 Managing Shared Protocol Buffer library and using Gradle to Compile ,但这个解决方案假定原型定义在网络上的某个地方。

【问题讨论】:

    标签: android-studio kotlin gradle protocol-buffers


    【解决方案1】:

    挖了一阵子,自己找到了解决办法。我不知道它是否是最好的,所以请发表评论并让我知道您的想法。

    我刚刚将我的定义文件从模块子目录移到顶级项目目录src/main/proto。从每个模块中,我只需将此目录添加到 proto srcSet。所以对于安卓应用:

    android {
        sourceSets {
            main {
                proto {
                    srcDir '../src/main/proto'
                }
            }
        }
    }
    

    对于 Java/Kotlin 非安卓应用程序

    sourceSets {
        main {
            proto {
                proto.srcDirs = ['../src/main/proto']
            }
        }
    }
    

    这可以作为方面工作,我不必在不同的位置维护 .proto 文件。但是,将代码或类似代码的文件移动到 gradle 项目的顶层有什么缺点吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2016-04-20
      • 2011-08-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多