繁体   English   中英

构建取决于Android Project Gradle的Java库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM