簡體   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