[英]Building Java Library that Depends on Android Project Gradle
我有一个Android项目,它定义了通过Protocol Buffers序列化的各种数据类型。 我想有一个单独的Java项目,它能够在服务器上反序列化这些数据类型。
我的项目结构如下:
Android Library
- Data
- TypeA
- TypeB
- ...
Java Server
- Parser (depends on .Data)
在此示例中,数据包Data中的所有类都处理自己编组。
在尝试构建Java Server时,它成功编译了Android项目,但最终因Gradle无法找到引用的包而失败。
请注意,如果我只引入其他Java库,我可以成功构建具有跨项目依赖关系的Java Server,这让我相信这是一个Java - > Android依赖问题,而不是Gradle配置问题。
我考虑过的可能解决方案是从Android项目中提取所有这些数据类型并将它们放在一个单独的Java库中。 然而,问题在于其中一些类只提供了将Android特定类(SensorEvent,Location等)转换为可与ProtoBuf一起使用的类型的方法。 我一直在考虑的一个解决方案是这样的:
Data Types
- TypeA
- TypeB
- ...
Android Library
- Data
- AndroidTypeA (Class with Android Specific constructor that can be cast to the parent type)
- AndroidTypeB
- ...
Java Server
- Parser ( Depends on the Data Types module )
虽然这确实可以解决我的问题,但它似乎不是最好的解决方案。
有没有办法通过Gradle单独完成这项工作?
这里参考我的build.gradle
文件的缩写版本。
Android库:
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.0.2"
defaultConfig {
applicationId "com.foo.bar.androidlib"
...
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
...
compile 'com.google.protobuf:protobuf-java:2.6.1'
}
Java服务器:
apply plugin: 'java'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.protobuf:protobuf-java:2.6.1'
compile project(':androidlib')
}
编辑:
特别是Gradle给出以下错误:
错误:包com.foo.bar.androidlib不存在
在Gradle中,您不能拥有依赖于Android库的Java库。 这是因为Gradle中的Android插件不是基于Java插件而且与它不兼容,因此Java不了解它的源集,否则无法使用它。
我不认为你可以完全通过Gradle配置来解决这个问题,即使你可以,它也可能会使你的构建变得复杂和脆弱。 最好的办法是让你的Java东西只依赖于Java的东西,隔离那里常见的protobuf依赖,让Android端依赖Java。 您概述了使用某些类的Android版本的方法; 这可能有用,但我不知道你正在做些什么来详细评论它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.