2014-06-19 12 views
25

我有一套使用相同模塊的項目,其中包含幾乎所有的實際代碼。該項目是建立這樣的:如何在Android Studio中添加口味模塊?

project/ 
    - app/ 
    - build.gradle 
    - libraries/ 
    - module/ 
     - build.gradle 
    - build.gradle 
    - settings.gradle 

的依賴都設置正確,我可以生成並運行應用程序很棒,但是我只能添加風味的項目,這是不理想的解決方案。 settings.gradle包含以下內容:

include ':app', ':libraries:module' 

在app目錄的的build.gradle文件,添加以下塊:

productFlavors { 
    alpha 
    production 
} 

使用gradle產出0.11,此同步,並創建assembleAlphaDebug,assemblyAlphaRelease,assemblyProductionDebug,assemblyProduct ionRelease任務。當我嘗試做這個模塊中,而不是,我得到的錯誤:

No resource found that matches the given name (at 'theme' with value '@style/MyCustomTheme')

在內置 app/src/main/AndroidManifest.xml

。出於某種原因,該模塊沒有構建,所以自定義主題不起作用。我究竟做錯了什麼?

+0

按我的理解,即使應用程序是一樣的,你「模塊」,並把味道在任何模塊將工作的模塊。編譯代碼時出現什麼錯誤。 – pyus13

+0

@ pyus13進一步看,錯誤似乎是沒有找到給定的味道資源的問題。我在應用程序的清單中設置了一個自定義主題,但是我找到了'找不到與給定名稱相匹配的資源('主題'的值爲'@ style/MyCustomTheme')。 – Phil

+0

是你的模塊是一個庫項目。意思是它有「android-library」或「android」作爲插件? – pyus13

回答

61

在庫模塊的build.gradle,你需要幾個多餘的線條來告訴它導出的口味和被包含從另一個模塊時,如果沒有指定哪個構建變種默認情況下使用:

android { 
    defaultPublishConfig "productionRelease" 
    publishNonDefault true 

    productFlavors { 
     alpha { 
     } 
     production { 
     } 
    } 
} 

如果有人想要取決於productionRelease變體以外的其他內容,則只需要publishNonDefault位。如果您首先在您的圖書館中設置多種口味,那麼可能就是這種情況。現在

如果您通過從另一個模塊添加在其的build.gradle依賴:

dependencies { 
    compile project(':module') 
} 

這將取決於productionRelease變異默認。如果您想依賴於一個非默認的變種:

dependencies { 
    compile project(path: ':module', configuration:'alphaDebug') 
} 
+0

解決了我的問題,謝謝! – Phil

+1

只能依賴風味而不能依賴構建類型嗎? –

+0

我假設你的意思是編譯項目(' – Blundell

相關問題