我有一個由不同模塊組成的Android項目(已經移植到Android Studio並使用Gradle)。有條件依賴Gradle,有可能嗎?
該項目實際上用於創建兩個不同的應用程序,代碼幾乎相同,除了一些資源。
因此資源被分成兩個不同的模塊。
該項目的原創作者曾在Eclipse中工作,並根據他想構建的應用程序切換依賴關係中包含的資源模塊。而且他還用手動更改了AndroidManifest.xml中的包名稱
我想將所有這些自動化,仍然有一個代碼庫,但是每個目標都有兩個具有特定模塊的構建目標。這對Gradle有用嗎?
更新:
爲了使事情變得更加困難,我的項目有一個層次是非常如下:
--+--MainProject
+--LibData
+--LibBase
+--LibResA
+--LibResB
其中:
- MainProject取決於LibBase和LibData。
- LibData取決於LibBase
- LibBase要麼依賴LibResA或LibResB基於我需要建立的最終APK。
至於建議,我試着用口味實施這一通過增加在MainProject的build.gradle如下:
productFlavors {
producta {
}
productb {
}
}
然後在LibBase我已經添加了以下到它的build.gradle :
dependencies {
productaCompile project(':LibResA')
productbCompile project(':LibResB')
}
但是,當我構建項目時,LibData找不到從LibBase繼承的類和資源。所以現在我堅持這個錯誤。對我來說,它看起來像LibBase沒有被複制到LibData的中間體。這樣LibData無法解析LibBase中的類,但這只是我的假設。
更新2:
我一直在調查這個問題,現在我已經改變了我的build.gradle文件看起來像這樣:
主項目的build.gradle:
defaultPublishConfig "productaRelease"
publishNonDefault true
productFlavors {
producta {
applicationId "com.producta"
}
productb {
applicationId "com.productb"
}
}
dependencies {
compile project(':LibData')
}
LibData build.gradle(沒有產品口味,只是依賴關係):
dependencies {
compile project(':LibBase')
}
LibBase build。gradle這個:
defaultPublishConfig "productaRelease"
publishNonDefault true
productFlavors {
producta {
}
productb {
}
}
dependencies {
productaCompile project(path: ':LibResA')
productbCompile project(path: ':LibResB')
}
這樣做通常gradle clean build
,但我可以看到,包括資源總是那些LibResA就像defaultPublishConfig是在任何時候都使用的只有一個,當我得到任何錯誤。
如果我在Android Studio(0.8.1 atm)中打開此項目,結果是如果我嘗試切換LibBase模塊的構建變體並將其設置爲productbRelease,則顯示以下錯誤:Error:Module 'LibBase'選擇了變體'productbRelease',但模塊'LibData'取決於變體'productaRelease'。
我正在用盡想法。
您是否知道產品風味是否只能在主項目的build.gradle中指定,或者是否可以在庫模塊中使用? –
我發現風味只適用於根項目。 AFAIK,沒有辦法指定你的根項目所依賴的庫的風格。這將是一個很好的功能。 –
@JeffBrateman我已經完成了Radim的建議,我已經用我所做的更新了原始問題。顯然,即使我在根項目中指定了風味,但依賴於實際包含基於風味的不同資源的模塊的模塊仍存在問題。任何想法,如果有這個解決方法? –