Как предоставить разные значки приложений 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 выберите желаемый тип сборки (отладка, внутренний, основной и т. д.) -> Готово

Таким образом значки заменят все старые значки, которые у вас были.

Другие вопросы по тегам