Как обеспечить различные значки приложений для Android для разных gradle buildTypes?
У меня есть два типа сборки, установленные в моем файле 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'])
}
Ответы
Ответ 1
Выяснил это. Вам нужно создать отдельную папку 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, найденный в папке отладки.
Ответ 2
Это удобный подход, хотя у него есть важный недостаток... обе пусковые установки будут помещены в ваш 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
Ответ 3
Вы также можете указать значок в частичном файле 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.
Ответ 4
Для получения разных значков при использовании разных вкусов с несколькими параметрами, например:
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'
}
Ответ 5
В дополнение к ответу InsanityOnABun настройте такую структуру, когда вы запускаете проект с несколькими предпочтениями:
martins-mbp:~ martin$ tree -d /Users/.../app/src/pro
pro
├── debug
│ └── res
│ ├── mipmap-hdpi
│ ├── mipmap-mdpi
│ ├── mipmap-xhdpi
│ ├── mipmap-xxhdpi
│ └── mipmap-xxxhdpi
└── res
├── mipmap-hdpi
├── mipmap-mdpi
├── mipmap-xhdpi
├── mipmap-xxhdpi
├── mipmap-xxxhdpi
└── values
ПРИМЕЧАНИЕ: про является одним из моих одолжений.
Слава принадлежат InsanityOnABun!
Ответ 6
Пошаговое решение, включая замену mipmap-anydpi-v26 и сохранение файлов для всех измерений:
Сначала определите в build.gradle(Module: app) ваш тип сборки в android → buildTypes → debug, internal и т.д.
В иерархии проекта, под Android, щелкните правой кнопкой мыши приложение → Создать → Актив изображения → в Путь, выберите значок → Любые другие изменения в Фоновом слое и Наследие → Далее → в Res Directory выберите нужный тип сборки ( отладка, внутренняя, основная и т.д.) → Готово
Таким образом значки заменят все старые значки, которые у вас были.