2014-01-10 150 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源图标集的图标版本应该会在构建时替换源图标集的版本。