如何为不同的等级构建类型提供不同的 Android 应用程序图标?

我有两个建设类型设置在我的年级文件: debugrelease。我希望能够为 debug构建类型设置一个不同的应用程序图标。有没有办法只通过构建类型,而不涉及产品风味?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'])
}
54230 次浏览

我想明白了。您需要做的是创建一个名为 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

然后,在调试生成类型下生成时,它将使用在调试文件夹中找到的 ic _ launcher。

您还可以在产品风格的部分 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 中指定的图标

这是一个方便的方法,虽然它有一个重要的缺点... 两个发射器将被放入您的 apk。巴特克 · 利平斯基(Bartek Lipinski)

更好的办法: 疯狂 OnABun 的回答

AndroidManifest.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>

建造,分级

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 构建多版本应用程序

用于获得不同的图标,同时使用不同风味的多维,如:

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 (Module: app)中定义你在 android-> buildTypes-> debug,Internal 等中的构建类型

在 Android 下面的项目层次结构中,右键单击 app-> New-> Image Asset-> in Path 选择您的图标-> 背景层和 Legacy 上的任何其他更改-> Next-> 在 Res Directory 中选择您想要的构建类型(debug,Internal,main,etc)-> Finish

这样,图标将取代每一个旧的图标,你有。