如果我们在清单中设置 android:debuggable=true 并且像在 iOS 中那样设置 android:debuggable=false ,是否可以为应用程序设置单独的图标?
我参加聚会有点晚了,但无论如何。目前我在 16 年发布此内容,实际上您可以设置不同的启动图标,只需将它们放入各自的目录中,但不确定它在 13 年是如何返回的。为此,您需要在 app/src 下创建 debug/res 目录,并将您的 mipmap 或可绘制目录放在那里。 所以你将有 app/src/main/res/ 和 app/src/debug/res/ 路径。 Android 对于与构建相关的资源目录具有更高的优先级 - main 目录。将调试和发布资源放置到适当的路径,您就会得到您想要的。考虑到您必须使用 Gradle 构建系统,请执行上述所有操作。
在这里您可以阅读有关此类内容的更多信息:http://tools.android.com/tech-docs/new-build-system/resource-merging
有点晚了(实际上大约8年了),但是今天在浏览DuckDuckGo的Android源代码时,我发现他们是这样做的:
在您的
app/build.gradle
(DuckDuckGo 的 app/build.gradle
)
android {
...
buildTypes {
debug {
...
manifestPlaceholders = [
appIcon: "@mipmap/ic_launcher_blue",
appIconRound: "@mipmap/ic_launcher_blue_round"
]
}
release {
...
manifestPlaceholders = [
appIcon: "@mipmap/ic_launcher_red",
appIconRound: "@mipmap/ic_launcher_red_round"
]
}
}
...
}
并且在您的
AndroidManifest.xml
中只需使用(DuckDuckGo的AndroidManifest.xml
)
<application
...
android:icon="${appIcon}"
android:roundIcon="${appIconRound}"
...
/>
...
</application>
有点晚了,但我会将我的解决方案留给正在寻找相同答案的人。
在定义 buildTypes 的 build.gradle 上,我为 debug_test 构建类型添加了后缀,以便在我的设备上安装不同的 apk。
buildTypes {
release {
...
}
debug_test {
debuggable true
applicationIdSuffix '.debug'
...
}
}
之后,转到“文件”>“新建”>“Android 资源目录”,并为您的 debug_test 构建类型创建一个新的 mipmap 资源目录(如您在源集上看到的那样):
我创建了 mipmap 文件夹,因为它是仅用于放置应用程序/启动器图标的文件夹。所有其他图像应放置在可绘制文件夹中。
将 ic_launcher 图标添加到创建的文件夹中(app > src > res > mipmap > ic_launcher.png)。
现在,只需在 AndroidManifest 上引用您的图标,如下所示:
<application
android:name=".MyApplication"
android:icon="@mipmap/ic_launcher"
...
</application>
魔法完成了!
据我所知,应用程序图标仅依赖于它们所在的可绘制文件夹,并且没有-debug的文件夹限定符,并且您无法根据清单更改来更改图标
您需要 gradle 和 buildflavor 才能做到这一点。然后你就可以为不同的风格拥有不同的资源文件夹。
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-flavors
我知道这是一个老问题 - 但如果其他人搜索这个......
您可以通过创建调试清单 (src/debug/AndroidManifest.xml) 并更新其属性来完成此操作。
请参阅:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Markers
一个简单的解决方案,无需摆弄
gradle
:
在
debug
下创建一个文件夹module_name/src
然后在 debug
下创建文件夹 res/drawable
或 res/mipmap
并将调试图标放在那里。
完成上述操作后,将不会有一个额外的“res”文件夹用于调试资源,但您会在资源旁边看到“debug”注释,如下所示:
(第二个
ic_launcher.xml
位于src/debug/res/mipmap
下方,并且在src/debug/res/drawable
中使用自适应背景)
因此,当选择构建变体进行调试时,您将看到该图标是您提供的调试图标,而当构建变体设置为发布时,您将看到发布图标。
已在生产中验证并使用。
亚历克斯的回应很好,以防不使用口味,在使用具有多个维度的不同口味时获得不同的图标,例如:
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'
}
2024 年更新(Adnan 的答案),使用 Kotlin 构建配置:
在你的
app/build.gradle.kts
:
android {
...
buildTypes {
getByName("debug") {
...
manifestPlaceholders["appIcon"] = "@mipmap/app_logo_debug"
}
getByName("release") {
...
manifestPlaceholders["appIcon"] = "@mipmap/app_logo"
}
}
}
并在您的
AndroidManifest.xml
中:
<application
...
android:icon="${appIcon}"
/>
...
</application>
您可以通过添加具有相同前景层和您选择的不同颜色作为背景层的新图像资源,轻松创建徽标的单独颜色版本。
您可以尝试在可绘制文件夹中使用两个不同的应用程序图标 - 即:
将调试模式设置为 true 时:
<android xmlns:android="http://schemas.android.com/apk/res/android">
<manifest>
<application
android:debuggable="true"
android:icon="@drawable/app_icon_debug"
android:label="Your App Name" >
</application>
</manifest>
</android>
否则,当调试模式为 false 时:
<android xmlns:android="http://schemas.android.com/apk/res/android">
<manifest>
<application
android:debuggable="false"
android:icon="@drawable/app_icon_release"
android:label="Your App Name" >
</application>
</manifest>
</android>