2014-01-10 191 views
2

我有一個使用Gradle從命令行構建的Eclipse項目。
有一個單獨的資源文件夾,其中包含應該用於發佈版本的應用程序圖標。
這裏就是我想要做的事:覆蓋資源

sourceSets { 
    main { 
     res.srcDirs = isRelease() ? ['res', 'res-release'] : ['res'] 
    } 
} 

搖籃拒絕覆蓋圖標:

Execution failed for task ':myapp:mergeApphanceDebugResources'. 
> /myapp/res-release/drawable-xhdpi/app_icon.png: Error: Duplicate resources: /myapp/res-release/drawable-xhdpi/app_icon.png:drawable-xhdpi/app_icon, /myapp/res/drawable-xhdpi/app_icon.png:drawable-xhdpi/app_icon 

有沒有辦法告訴搖籃覆蓋衝突?

編輯:我想保留默認的Eclipse項目結構(即沒有主/ Java)。

+0

爲什麼你不使用'debug'和'release'構建類型呢? – CommonsWare

+0

@CommonsWare也許我應該。您能否請教如何使用不同的構建類型來解決問題? (從Eclipse構建時仍應該能夠獲得'調試'構建) – yanchenko

+0

你想實現什麼?重新發布的附加內容是什麼? –

回答

5

Mark的答案是正確的,但由於您在其他答案中提到了Eclipse支持,所以我會創建一個新答案。

正如Mark所說,使用src/release/res(或調試)來放置您的只發布圖標。

android { 
    sourceSets { 
     main { 
      res.srcDirs = ['res'] 
     } 
     release { 
      res.srcDirs = ['res-release'] 
     } 
    } 
} 

所有生成類型(默認情況下你必須:如果你想繼續支持Eclipse的,只是搬遷sourceset以同樣的方式,你重新定位主sourceset釋放他們會自動覆蓋那些在src/main/res

現在debugrelease)以及所有風味(默認情況下不含風味),自動創建默認值爲src/<name>/[java|res|...]的源集。所有這些sourceSets都可以通過DSL重新配置以重新定位文件夾。

1

從評論你只是想有不同的圖標。正如馬克所說,用口味很容易實現。讓我稱他們爲developproduction風味。

所以build.gradle

... 
android { 
    productFlavours { 
     develop { 
      debuggable true 
      packageSuffix ".dev" 
     } 

     production { 
      debuggable false 
     } 
    } 
} 
... 

項目結構:

src 
-main 
-java 
-res 
    -icon.png 
-production 
-res 
    -icon.png 

要建立相應的APK:

.gradlew assembleDevelop 
.gradlew assembleProduction 
+1

我只是使用股票調試版和發佈版,而不是發明兩種新的構建類型。 – CommonsWare

+0

@CommonsWare,我不知道'debug'和'release'只是'productFlavours'中的自定義配置。如果是這樣,'build.gradle'中的文本數量會少得多。我會嘗試 –

+0

對不起,我沒有注意到你正在創造產品口味。由於這個問題是關於調試和發佈構建的,我會使用'debug'和'release'構建類型。 – CommonsWare

4

第1步:把你的產品圖標src/main/res/drawable-XXXX/icon.png,所有必要的XXXX的值,並代入你想要的icon.png

步驟#2:將您的調試圖標放入src/debug/res/drawable-XXXX/icon.png中,獲取XXXX的所有必需值,以及與步驟#1相同的名稱。

步驟#3:沒有步驟#3。您的debug源圖標集的圖標版本應該會在構建時替換源圖標集的版本。