web-dev-qa-db-ja.com

製品フレーバーごとに異なるランチャーアイコンを提供する方法

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用に追加のマニフェストファイルを入れようとしましたが、機能しませんでした。 「APKAndroidManifest.xmlにコピーされたファイルを複製します」というエラーが発生しました。何が悪いのでしょうか?

25
mar3kk

いくつかのオプションがあります。

  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にあり、残りのproductFlavorsにも同様です。

  2. 既存のレイアウト(およびbuild.gradle)を保持し、リソースディレクトリをres.srcDirsに追加します。

したがって、Amazonソースセットの場合:

Android.sourceSets.Amazon {
    res.srcDirs = ['res', '/path/to/Amazon/res/dir']
}

そして、/path/to/Amazon/res/dir/drawable-*にランチャーアイコンがあります。

26
smoak