2013-10-15 114 views
4

我想使用Gradle創建2個不同的APK(發佈和調試),我想爲它們使用不同的名稱('appName'和'appName debug')。Android Gradle合併字符串資源

我已經找到了一些解決方案,但它並沒有爲我工作:
link 1
link 2

我想在設備上安裝的APK兩種,但我有以下錯誤:

Duplicate resources: 
...\src\release\res\values\config.xml:string/config_app_name, 
...\src\main\res\values\config.xml:string/config_app_name 

如果我從main\res\values\config.xml刪除config_app_name密鑰,那麼Gradle說沒有找到該密鑰。

我有3個清單文件:

...\src\main\AndroidManifest.xml (this uses the `android:label="@string/config_app_name"`) 

...\src\release\AndroidManifest.xml 

...\src\debug\AndroidManifest.xml 

buildTypes { 

    debug { 
     packageNameSuffix ".debug" 
     versionNameSuffix "-debug" 
     buildConfig "public static final String PROVIDER_AUTHORITY = \"" + PROVIDER_DEBUG + "\";" 
     signingConfig signingConfigs.debug 
    } 
    release { 
     buildConfig "public static final String PROVIDER_AUTHORITY = \"" + PROVIDER_RELEASE + "\";" 
     signingConfig signingConfigs.release 
    } 
} 

sourceSets { 
    debug { 
     java.srcDirs = [ 
       'src/main/java'] 
     res.srcDirs = [ 
       'src/main/res', 
       'src/debug/res'] 
    } 

    release { 
     java.srcDirs = [ 
       'src/main/java'] 
     res.srcDirs = [ 
       'src/main/res', 
       'src/release/res'] 
    } 
} 

是否有可能在該項目的主要部分使用一個公共密鑰(字符串,整數,夢詩)和發佈/調試部分覆蓋它?

在此先感謝。

回答

1

我剛剛意識到這只是一個命名問題。發行包的名稱拼寫錯誤。對不起,這個愚蠢的問題。

現在合併按預期工作。

1

看看這裏:http://tools.android.com/tech-docs/new-build-system/resource-merging

您定義生成類型的多個資源來源。在這種情況下,它們具有相同的優先級並可能導致衝突

如果您想正確合併,您需要創建單獨的主源集。它的優先級低於構建類型資源。

sourceSets { 

    main { 
     java.srcDirs = ['src/main/java'] 
     res.srcDirs = ['src/debug/res'] 

    } 

    debug { 
     res.srcDirs = ['src/debug/res'] 
    } 

    release { 
     res.srcDirs = ['src/release/res'] 
    } 
} 

但是對於這樣的目錄結構,它必須從沒有sourceSets定義的框中解決。

+0

我有一個大項目,我需要sourceSets聲明,因爲一些生成類型使用多於2個srcDirs。但是謝謝你的解釋。 – Blehi