如何为每种产品风格提供不同的启动器图标

Posted

技术标签:

【中文标题】如何为每种产品风格提供不同的启动器图标【英文标题】:How to provide different launcher icon per product flavour 【发布时间】:2013-08-29 21:14:52 【问题描述】:

我有一个由 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"
    


它工作正常,但现在我想为每种产品风格提供特定的启动器图标。我试图为亚马逊添加额外的 Manifest 文件,但没有成功。我收到错误“在 APK AndroidManifest.xml 中复制的文件重复”。有什么问题?

【问题讨论】:

安卓风格的演示goo.gl/5NSnEM 【参考方案1】:

你有几个选择:

    切换到新的 android studio/gradle 布局并为您的 productFlavors 创建文件夹:

    src/main/ - 跨所有风格的共享代码/资源src/amazon - 跨所有风格的亚马逊特定代码/资源src/google - 跨所有风格的谷歌特定代码/资源

    因此,在您的主清单 (src/main/AndroidManifest.xml) 中,如果您的 android:icon@drawable/icon,您将在 src/amazon/res/drawable-*/icon.png 中找到相应的图标,对于您的其余 productFlavors 也是如此。

    保留现有布局(和 build.gradle)并将资源目录附加到 res.srcDirs

所以,对于您的亚马逊资源集:

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

然后在您的/path/to/amazon/res/dir/drawable-* 中,您将拥有启动器图标。

【讨论】:

没关系,但只是部分。如果我只有 2 个图标,例如 google 和 amazon 版本或 lite 和完整版,它将起作用。问题是我有风味组,我希望精简版亚马逊的图标与谷歌的精简版不同。如果我为亚马逊提供图标,它将用于两个版本(精简版和完整版),我不希望这种行为。有没有像 AmazonLite 这样的特定任务,我可以在其中放置该图标,或者我必须删除风味组并只制作纯风味? @smoak 我需要手动为不同的 productFlavours 创建文件夹还是自动创建?

以上是关于如何为每种产品风格提供不同的启动器图标的主要内容,如果未能解决你的问题,请参考以下文章

如何为不同的产品风格定义不同的依赖关系

每种口味的android不同的应用程序图标

如何为两个可启动的活动提供两个不同的名称?

如何为多种产品设计产品表,其中每种产品都有很多参数

如何为 Spring Boot 启动器拆分库中的代码

应该如何为具有不同字段的几个猫鼬模型创建模式?