2

我嘗試爲多個合作伙伴以及每個合作伙伴製作一個測試和產品版本的應用程序。對於每種口味,我都會創建一個具有res/values的特定文件夾,就像文檔中所說的那樣。Android風味,Gradle來源合併

我gradle這個文件是這樣的:

apply plugin: 'com.android.application' 

android { 
    packagingOptions { 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/NOTICE' 
    } 
    compileSdkVersion 14 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
      versionCode 1 
      versionName 1 
      minSdkVersion 14 
      targetSdkVersion 19 
     } 

    productFlavors { 
     prodPARTNER1 { 
      applicationId "com.PARTNER1" 
     } 

     testPARTNER1 { 
      applicationId "com.PARTNER1.test" 
     } 
     prodPARTNER2{ 
      applicationId "com.PARTNER2" 
     } 

     testPARTNER2{ 
      applicationId "com.PARTNER2.test" 
     } 
    } 
    sourceSets { 
     testPARTNER2 { 
      res.srcDirs = ["testPARTNER2/res", "prodPARTNER2/res"] 
     } 
    } 

} 

dependencies { 
    compile project(':ViewPagerIndicatorLibrary') 
    compile 'com.android.support:support-v4:19.0.0' 
    compile 'com.google.android.gms:play-services:+' 
    compile files('libs/achartengine-1.1.0.jar') 
    compile files('libs/android-async-http-1.4.4.jar') 
    compile files('libs/jackson-annotations-2.2.3.jar') 
    compile files('libs/jackson-core-2.2.3.jar') 
    compile files('libs/jackson-databind-2.2.3.jar') 
    compile files('libs/urlimageviewhelper-1.0.4.jar') 
} 

我想爲一個測試版本採取的督促版本res文件夾(這樣我不重複了這兩個版本的資源),並與測試版本進行合併。 的問題是:

Error:Error: Duplicate resources: C:\...prodPARTNER2\res\values\strings.xml:string/app_name,C:\...testPARTNER2\res\values\strings.xml:string/app_name

任何想法?無法將相同風味的res文件夾合併在一起?

編輯:我使用gradle這個1.1.0和Android工作室1.1.0太

回答

2

警告:這種做法已經改變了一點點Android Plugin for Gradle 3.0.0

使用productFlavors每個合作伙伴的應用程序,並確定用於測試版本的構建類型test

productFlavors { 
    partner1 { 
     applicationId "com.partner1" 
    } 

    partnerN { 
     applicationId "com.partnerN" 
    } 
} 

buildTypes { 
    debug { 
     // use defaults 
    } 
    release { 
     // the 'prod' version, use defaults 
    } 
    test { 
     // config as you want! 
     applicationIdSuffix ".test" 
     versionNameSuffix " Test" 
     debuggable true 
     minifyEnabled false 
     signingConfig signingConfigs.debug 
    } 
} 

您可以使用混搭的源文件夾爲Android Plug-in for Gradle顯示:

要構建應用程序的每個版本,構建系統結合了源代碼和資源:

  • src/main/ - 主源目錄(所有變體的默認配置)
  • src/<buildType>/ - 源目錄
  • src/<productFlavor>/ - 源目錄

編輯:本用戶指南的幫助另一個來源:根據上述連結:

http://tools.android.com/tech-docs/new-build-system/user-guide

編輯2

還爲每個變體創建其他源集:

  • android.sourceSets.flavor1Debug 位置src/flavor1Debug/
  • android.sourceSets.flavor1Release 位置src/flavor1Release/
  • android.sourceSets.flavor2Debug 位置src/flavor2Debug/
  • android.sourceSets.flavor2Release 位置src/flavor2Release/

然後,您可以使用/src/partner1Test/來定義資源特定於partner1風格和Test構建,這是一個partner1Test構建變體。

+0

太好了我不必爲一個伴侶創造兩種味道!但是我怎麼能爲我的測試版本獲得不同的資源(並且與prod版本合併)?原因src/ /成爲src/test並將用於所有合作伙伴,它不是合作伙伴特定的權利? – jaumard 2015-04-01 12:56:43

+0

例如,我想在string.xml中更改app_name以產生MyPartner1App,並且測試它是MyPartner1TestApp,我該怎麼做? – jaumard 2015-04-01 12:57:54

+0

@jaumard comment1,question2:是的,在構建'test'構建類型時,'src/test'將用於所有合作伙伴,它不是合作伙伴特定的。 – 2015-04-01 17:14:02