Как да предоставите различна икона за стартиране за вкус на продукт

Имам проект, дефиниран от файла 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 и създайте папки за вашия productFlavors:

    src/main/ - Споделен код/ресурси във всички разновидности
    src/amazon - Специфичен код/ресурси на Amazon за всички разновидности
    src/google - Специфичен код/ресурси на Google за всички разновидности

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

  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 версия или за lite и пълна версия. Проблемът е, че имам ароматни групи и искам иконата ми за олекотената версия на Amazon да е различна от олекотената версия за google. Ако предоставя икона за Amazon, тя ще се използва и за двете версии (облекчена и пълна) и не искам това поведение. Има ли някаква конкретна задача като AmazonLite, където мога да поставя тази икона, или трябва да премахна flavorgroups и да направя само чисти аромати? - person mar3kk; 28.08.2013
comment
@smoak трябва ли да създавам папки за различни productFlavours ръчно или ще се създават автоматично? - person WitVault; 22.09.2017