【问题标题】: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 中复制的文件重复”。有什么问题?

【问题讨论】:

标签: android gradle android-gradle-plugin android-icons application-icon


【解决方案1】:

你有几个选择:

  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 也是如此。

  2. 保留现有布局(和 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 创建文件夹还是自动创建?
猜你喜欢
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
相关资源
最近更新 更多