.jar中的Firestore自定义对象由Java服务器和Android共享

时间:2018-01-18 19:07:27

标签: java android firebase google-cloud-firestore firebase-admin

我正在使用Firestore,在我的项目中,我有一个Java服务器和一个Android应用程序,它们当前共享一个公共数据模型库/ .jar。问题是我无法弄清楚如何在数据模型类中使用任何Firestore注释,如@Exclude或@ServerTimestamp,因为datamodel库需要依赖于两个冲突的包(一个用于Firestore的Android风格,一个用于Java风味):

compile 'com.google.firebase:firebase-firestore:11.8.0'

compile 'com.google.firebase:firebase-admin:5.8.0'

我是否可以做一些Gradle魔法来确保数据模型仅依赖于最小值(注释定义)?

如果是这样,我可以添加如下内容:

private @com.google.firebase.database.Exclude @com.google.cloud.firestore.annotation.Exclude String sentBy;

现在我收到以下错误:

All gms/firebase libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 5.8.0, 11.8.0. Examples include com.google.firebase:firebase-admin:5.8.0 and com.google.android.gms:play-services-appinvites:11.8.0

1 个答案:

答案 0 :(得分:1)

知道了!完全透明......这有点像黑客,但它的工作原理。基本上,您只需为您的数据模型库提供独立编译,然后在各自的Android和服务器项目中提取完整的Firestore依赖项。

datamodel 库中:
a)制作完全模拟所需注释的包。只需将注释类的内容复制到Exclude,ServerTimestamp等中 b)然后确保您在Gradle / POM中 NOT 拥有任何Firestore依赖项。
c)使用两者 Android和服务器注释标记类,字段和方法。

datamodel project structure

datamodel tagging fields



Android 项目中,包含您的数据模型库/项目,但排除您的数据模型编译的虚拟Android注释。使用Android应用程序所依赖的Firestore库,该库中的实际类将满足所有这些依赖项。

Android gradle



服务器项目中执行相同操作,但排除您的数据模型编译的虚拟服务器注释。

结果:所有项目都应该按照Firestore的预期进行编译并排除字段等,并且您不必保留2个版本的Java数据模型。

注意:如果更改了注释类,则必须更新注释类。但是,这似乎很少发生,并且不必保留所有Java数据模型的2个副本是一个很好的权衡。