Как предоставить разные значки приложений Android для разных типов сборки gradle?
У меня есть два типа сборки в моем файле Gradle: debug
а также release
, Я хотел бы иметь возможность установить другой значок приложения для 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'])
}
4 ответа
Догадаться. Что вам нужно сделать, это создать отдельную папку src под названием debug
который содержит различные значки. Например, если ваш макет проекта выглядит следующим образом, и ваш значок запуска называется 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, находящийся в папке отладки.
Это удобный подход, хотя он имеет важный недостаток... оба запуска будут помещены в ваш 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"
]
}
}
}
URL-адрес 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>
Это перезапишет значок, который вы указали в оригинальном AndroidManifest.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 (Module: app) ваш тип сборки в android -> buildTypes -> debug, internal и т. Д.
В иерархии проекта под Android щелкните правой кнопкой мыши приложение -> Создать -> Актив изображения -> в Пути выберите свой значок -> любые другие изменения на Фоновом слое и Наследии -> Далее -> в Каталоге Res выберите желаемый тип сборки (отладка, внутренний, основной и т. д.) -> Готово
Таким образом значки заменят все старые значки, которые у вас были.