我想知道是否有一種方法來爲根項目定義/注入它的依賴項中的一些屬性。更具體地說,我遇到的問題是一個庫項目必須知道在運行組裝/編譯任務之前是否需要「免費」或「專業」Java源和其他資源。有點像指定庫項目的產品風格(從它的父項目繼承而來),但Android插件不支持Gradle。更改庫項目結構,即創建「自由」和「專業」庫不是一種選擇。Gradle安卓依賴產品風格
編輯: 我已經設法到目前爲止達到的最好的是這樣的:
根:的build.gradle
android {
...
productFlavors {
free, pro
}
sourceSets {
free {
project(':..:lib') {
groupFreePro = 'free'
// java.srcDirs = ['src', 'free/src']
}
}
pro {
project(':..:lib') {
groupFreePro = 'pro'
// java.srcDirs = ['src', 'pro/src']
}
}
...
}
}
庫: gradle.build
android {
...
sourceSets {
main {
java.srcDirs = [groupFreePro + '/src']
res.srcDirs = [groupFreePro + '/res']
}
}
...
}
}
那個w唉我注入groupFreePro變量到lib項目中。但是這種方法有一個問題:
當lib項目得到它的android-> sourceSets任務時,groupFreePro總是被設置爲「pro」。我認爲這是因爲讀取了根項目中的所有sourceSets(而不僅僅是我想要構建的一個變體;例如「free」),因此最後的設置/任務總是覆蓋之前設置的groupFreePro的值。
如果我嘗試以其他方式設置groupFreePro的值,它要麼被覆蓋(就像在上面的例子中),要麼我不知道合適的任務/時間/地點,我應該把這個變量注入的東西將變量設置爲所需的值。在根項目中取消註釋java.srcDirs
也無濟於事。
我試着自己解決這些問題,但我對Gradle真的很陌生,也缺乏適當的文檔(至少對於Android部分)讓我猜測大部分時間做什麼,所以我做了很多試驗和錯誤(但現在我有點卡住了)。
您是否嘗試過製作「圖書館」項目的正常計劃。 Gradle的依賴管理意味着你可以使用任何非常像庫項目的項目。 –
我有,但我有構建其他問題。我認爲問題在於,其他庫作爲常規項目構建,生成了構建系統(或我)不知道如何將其包含到主項目/ APK中的APK。我可能會再嘗試一次,看看我能否以不同的方式來解決問題。 – croc
您可以共享該設置的代碼嗎? –