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