Подтвердить что ты не робот

Как обеспечить различные значки приложений для 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'])
}
4b9b3361

Ответ 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 выберите нужный тип сборки ( отладка, внутренняя, основная и т.д.) → Готово

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