我有一个使用 graphql 与服务器通信的 Android 项目。
它有很多模块。每个都有自己的 graphql 查询/突变,但它们共享相同的模式。
目前,我遇到了 Apollo 自动生成多个type.CustomType
类的问题,并且似乎顶级“app”模块将type.CustomType
使用任意模块的实现进行编译。
根据模块的查询,内容会type.CustomType
有所不同,因此FieldNotFoundException
即使我没有使用反射并且项目编译良好,也会出现崩溃。
例如
java.lang.NoSuchFieldError: No static field LONG of type Lapi/type/CustomType; in class Lapi/type/CustomType; or its superclasses (declaration of 'api.type.CustomType' appears in /data/app/com.functorz.app-oV7ixVEf0e0CIt1sWzT4uA==/base.apk!classes6.dex)
at com.functorz.network.GraphQLRequestUtil.initialSubscriptionClient(GraphQLRequestUtil.java:151)
at com.functorz.network.GraphQLRequestUtil.<init>(GraphQLRequestUtil.java:111)
at com.functorz.network.GraphQLRequestUtil.<clinit>(GraphQLRequestUtil.java:48)
at com.functorz.network.GraphQLRequestUtil.getInstance(GraphQLRequestUtil.java:162)
GraphQLRequestUtil 第 151 行的代码非常简单,它是引用 CustomType 的第一行,即
.addCustomTypeAdapter(CustomType.LONG, TypeUtil.LONG_TYPE_ADAPTER)
在
apolloSubscriptionClient = ApolloClient.builder()
.serverUrl(subscriptionUrl)
.okHttpClient(subscriptionOkHttpClient)
.subscriptionTransportFactory(new WebSocketSubscriptionTransport.Factory(socketUrl, subscriptionOkHttpClient))
.addCustomTypeAdapter(CustomType.LONG, TypeUtil.LONG_TYPE_ADAPTER)
.addCustomTypeAdapter(CustomType.OFFSETDATETIME, TypeUtil.DATE_TIME_TYPE_ADAPTER)
.addCustomTypeAdapter(CustomType.LOCALDATE, TypeUtil.LOCAL_DATE_TYPE_ADAPTER)
.addCustomTypeAdapter(CustomType.SQLDATE, TypeUtil.SQL_DATE_TYPE_ADAPTER)
.addCustomTypeAdapter(CustomType.URL, TypeUtil.URL_TYPE_ADAPTER)
.addCustomTypeAdapter(CustomType.BIGDECIMAL, TypeUtil.DECIMAL_TYPE_ADAPTER)
.build();
我认为我错误地模块化了我的项目。当所有模块都依赖于 Apollo 时,是否有人对如何将项目拆分为多个模块有建议?