如何为不同的gradle buildTypes提供不同的Android应用程序图标?

我在我的gradle文件中设置了两个构buildtypes: debugrelease 。 我希望能够为debug构buildtypes设置一个不同的应用程序图标。 有没有什么办法通过构buildtypes,没有进入产品口味? 下面是build.gradle文件。

 apply plugin: 'android' //... android { compileSdkVersion 19 buildToolsVersion "19.0.3" defaultConfig { minSdkVersion 14 targetSdkVersion 19 versionCode 30 versionName "2.0" } buildTypes { debug { packageNameSuffix '.debug' versionNameSuffix '-SNAPSHOT' } release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) } 

弄清楚了。 你需要做的是创build一个名为debug的单独的src文件夹来保存不同的图标。 例如,如果您的项目布局如下所示,并且您的启动器图标称为ic_launcher.png

 [Project Root] -[Module] -src -main -res -drawable-* -ic_launcher.png 

然后为debugging版本types添加一个单独的图标,添加:

 [Project Root] -[Module] -src -main -res -drawable-* -ic_launcher.png -debug -res -drawable-* -ic_launcher.png 

然后,在构builddebugging构buildtypes时,它将使用debugging文件夹中的ic_launcher。

这是一个方便的方法,虽然它有一个重要的缺点…两个发射器将被放入您的apk。 – Bartek Lipinski

更好的方法: InsanityOnABun的答案

AndroidManifest.xml中

 <manifest ... <application android:allowBackup="true" android:icon="${appIcon}" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> ... </application> </manifest> 

的build.gradle

 android { ... productFlavors{ Test{ versionName "$defaultConfig.versionName" + ".test" resValue "string", "app_name", "App-Test" manifestPlaceholders = [ appIcon: "@mipmap/ic_launcher_test" ] } Product{ resValue "string", "app_name", "App" manifestPlaceholders = [ appIcon: "@mipmap/ic_launcher" ] } } } 

Githuburl: 使用Gradle构build多版本应用程序

您也可以在产品风味的部分AndroidManifest.xml文件中指定图标:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application tools:replace="android:icon" android:icon="@drawable/alternative_icon" /> </manifest> 

这将覆盖您在原始AndroidManifest.xml中指定的图标

为了在使用不同风格的多个维度时获得不同的图标,例如:

 flavorDimensions "color", "size" productFlavors { black { dimension "color" } white { dimension "color" } big { dimension "size" } small { dimension "size" } } 

这可以实现为:

首先,将debugging资源放在单独的文件夹中,如:

 src/blackDebug/res src/whiteDebug/res 

其次,把多个风味维度的关键字放在一起,即源代码集名称必须包含所有可能的风味组合,即使其中一些维度不影响图标。

 sourceSets { // Override the icons in debug mode blackBigDebug.res.srcDir 'src/blackDebug/res' blackSmallDebug.res.srcDir 'src/blackDebug/res' whiteBigDebug.res.srcDir 'src/whiteDebug/res' whiteSamllDebug.res.srcDir 'src/whiteDebug/res' } 

为了说清楚,在使用多个维度时,以下内容不起作用

 sourceSets { // Override the icons in debug mode blackDebug.res.srcDir 'src/blackDebug/res' whiteDebug.res.srcDir 'src/whiteDebug/res' }