2014-02-20 30 views
16

我想根據產品風格定義不同的meta-data清單屬性。我試圖做到這一點,android + gradle:每種風味的不同清單元數據

src/ 
    main/ 
    AndroidManifest.xml 
    prod/ 
    AndroidManifest.xml 
    dev/ 
    AndroidManifest.xml 

main清單是完整的,但proddev版本稀少,只包含元數據,

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      package="com.example.inventory" 
      android:versionCode="1" 
      android:versionName="1.0"> 

    <meta-data android:name="analytics" 
      android:value="true"/> 

</manifest> 

這是我的理解是,味道艙單會與主合併。在我的build.gradle,我這樣做,

android { 
    productFlavors { 
    prod { 
     manifest.srcFile "prod/AndroidManifest.xml" 
    } 
    dev { 
     manifest.srcFile "dev/AndroidManifest.xml" 
    } 
    } 
    ... 
} 

然而,找到我嘗試建立 「assembleProdDebug」,我得到這個,

* What went wrong: 
A problem occurred evaluating project ':Inventory'. 
> No signature of method: org.gradle.api.java.archives.internal.DefaultManifest.srcFile() is applicable for argument types: (java.lang.String) values: [prod/AndroidManifest.xml] 

感謝。

回答

19

在你的gradle文件中,你不需要定義清單的路徑。

使用:

productFlavors{ 
prod {} 
dev{} 
} 

確認您的目錄結構是正確的:一個目錄中的味道的名字,每個味道,在src目錄下,並在每個目錄放在壓倒一切的清單文件。

Gradle將合併文件。

PS - 如果您的元數據標籤位於應用程序標籤內,則還應該在覆蓋清單中應用該應用程序標籤。

+0

謝謝,你設法抓住我的兩個錯誤。 –

相關問題