如何为不同的 gradle buildType 提供不同的 Android 应用图标



我的gradle文件中设置了两种构建类型:debugrelease。我希望能够为debug构建类型设置不同的应用程序图标。有没有办法只通过构建类型,而不涉及产品口味?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'])
}

通了。您需要做的是创建一个名为 debug 的单独 src 文件夹,其中包含不同的图标。例如,如果您的项目布局如下,并且您的启动器图标称为 ic_launcher.png

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

然后,若要为调试生成类型添加单独的图标,请添加:

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

然后,当您在调试构建类型下生成时,它将使用在 debug 文件夹中找到的ic_launcher。

这是一种方便的方法,尽管它有一个重要的缺点......两个启动器都将放入您的APK中。 – 巴特克·利平斯基

更好的方法:疯狂的答案

安卓清单.xml

<manifest 
    ...
        <application
        android:allowBackup="true"
        android:icon="${appIcon}"
        android:roundIcon="${appIconRound}"
        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",
                    appIconRound: "@mipmap/ic_launcher_test_round"
            ]
        }
        Product{
            resValue "string", "app_name", "App"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher",
                    appIconRound: "@mipmap/ic_launcher_round"
            ]
        }
    }
}

Github 网址:使用 Gradle 构建多版本应用

您也可以在

产品风格的部分 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>

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

用于在使用具有多个维度的不同口味时获取不同的图标,例如:

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

这可以通过以下方式实现:

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

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'
}

分步解决方案,包括替换 mipmap-anydpi-v26 并保留所有维度的文件:

首先在build.gradle(模块:应用程序)中定义你的构建类型在android中 ->buildType ->调试,内部等

在项目层次结构中,在Android下方,右键单击应用程序->新建->图像资产->在路径中选择您的图标->背景层和旧版的任何其他更改->下一步->在Res Directory中选择所需的构建类型(调试,内部,主等) ->完成

这样,图标将替换您拥有的每个旧图标。

最新更新