Как предоставить разные значки запуска для каждого вкуса продукта

У меня есть проект, определенный файлом build.gradle

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath 'com.android.tools.build:gradle:0.5.6'
}
}
apply plugin: 'android'

dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}

android {
compileSdkVersion 17
buildToolsVersion "17.0.0"

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['resources']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    instrumentTest.setRoot('tests')
}

defaultConfig {
    ...
}

signingConfigs {
    debug {
        storeFile file("debug.keystore")
    }

    release {
        ...
    }
}

buildTypes {
    debug {
        debuggable true
        jniDebugBuild true
        signingConfig signingConfigs.debug
        packageNameSuffix ".debug"
        versionNameSuffix ".debug"
    }
    release {
        debuggable false
        jniDebugBuild false
        signingConfig signingConfigs.release
    }
}

flavorGroups "version", "market"


productFlavors {
    amazon {
        flavorGroup "market"
        buildConfig "public static final int COMPILATION = 1;"
    }
    google {
        flavorGroup "market"
        buildConfig "public static final int COMPILATION = 0;"
    }
    lite {
        flavorGroup "version"

        packageName = "package.name.lite"
    }
    full {
        flavorGroup "version"

        packageName = "package.name.full"
    }
}

android.sourceSets.amazon {
    res {
        srcDir "amazon"
    }
    manifest {
        srcFile "amazon/AndroidManifest.xml"
    }
}

android.sourceSets.google {
    res {
        srcDir "google"
    }
}

android.sourceSets.full {
    res {
        srcDir "full"
    }
}

android.sourceSets.lite {
    res {
        srcDir "lite"
    }
}
}

Он отлично работает, но теперь я хочу предоставить определенные значки запуска для каждого вкуса продукта. Я попытался добавить дополнительный файл манифеста для Amazon, но это не сработало. Я получил ошибку «Дублирует файлы, скопированные в APK AndroidManifest.xml». Что может быть не так?


person mar3kk    schedule 27.08.2013    source источник
comment
демонстрация для Android-версий goo.gl/5NSnEM   -  person nitesh    schedule 19.12.2015


Ответы (1)


У вас есть несколько вариантов:

  1. Переключитесь на новый макет Android Studio/Gradle и создайте папки для своего продукта. Вкусы:

    src/main/ – Общий код/ресурсы для всех разновидностей
    src/amazon – Код/ресурсы, специфичные для Amazon, для всех разновидностей
    src/google – Код/ресурсы, специфичные для Google, для всех разновидностей

    Таким образом, в вашем основном манифесте (src/main/AndroidManifest.xml), если ваш android:icon равен @drawable/icon, у вас будет соответствующий значок, расположенный в src/amazon/res/drawable-*/icon.png, а также для остальной части вашего productFlavors.

  2. Сохраните существующий макет (и build.gradle) и добавьте каталог ресурсов в res.srcDirs:

Итак, для вашего исходного кода Amazon:

android.sourceSets.amazon {
    res.srcDirs = ['res', '/path/to/amazon/res/dir']
}

И тогда в вашем /path/to/amazon/res/dir/drawable-* у вас будет значок запуска.

person smoak    schedule 27.08.2013
comment
Это нормально, но только частично. Это будет работать, если у меня есть только 2 значка, например, для версии Google и Amazon или для облегченной и полной версии. Проблема в том, что у меня есть группы вкусов, и я хочу, чтобы моя иконка для облегченной версии Amazon отличалась от облегченной версии для Google. Если я предоставлю значок для Amazon, он будет использоваться для обеих версий (облегченной и полной), и я не хочу такого поведения. Есть ли какая-то конкретная задача, такая как AmazonLite, где я могу поместить этот значок, или мне нужно удалить группы вкусов и делать только чистые вкусы? - person mar3kk; 28.08.2013
comment
@smoak Мне нужно создавать папки для разных вкусов продуктов вручную или они будут созданы автоматически? - person WitVault; 22.09.2017