21

Ich habe ein Projekt von build.gradle Datei Wie anders Launcher-Symbol pro Produktgeschmack

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" 
    } 
} 
} 

definiert schaffen Es funktioniert gut, aber jetzt will ich für jedes Produkt Geschmack spezifische Launcher Icons zur Verfügung zu stellen. Ich habe versucht, eine extra Manifest-Datei für Amazon zu erstellen, aber es hat nicht funktioniert. Ich habe einen Fehler "Dupliziert die in APK AndroidManifest.xml kopierten Dateien". Was könnte falsch sein?

+0

Demo für Android Aromen http://goo.gl/5NSnEM – nitesh

Antwort

21

Sie haben ein paar Optionen:

  1. Umstellung auf das neue Android Studio/gradle Layout und erstellen Sie Ordner für Ihre productFlavors:

    src/main/ - Shared Code/Ressourcen über alle Aromen
    src/amazon - Amazon spezifischen Code/Ressourcen in allen Geschmacksrichtungen
    src/google - Google spezifischen Code/Ressourcen über alle Geschmacksrichtungen

    Also in Ihrem Hauptmanifest (src/main/AndroidManifest.xml) wenn Ihre android:icon@drawable/icon ist, hätten Sie das entsprechende Symbol in src/amazon/res/drawable-*/icon.png und ebenso für den Rest Ihres ProduktsFlavors.

  2. Halten Sie Ihr bestehendes Layout (und build.gradle) und ein Ressourcenverzeichnis in das res.srcDirs anhängen:

Also, für Ihre amazon sourceSet:

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

Und dann in Ihrem /path/to/amazon/res/dir/drawable-* Sie würden Ihr Launcher-Symbol haben.

+2

Es ist in Ordnung, aber nur teilweise. Es funktioniert, wenn ich nur 2 Icons zB für Google und Amazon Version oder für Lite und Vollversion habe. Das Problem ist, dass ich Flavor-Gruppen habe und ich möchte, dass mein Icon für die Lite-Version von Amazon anders ist als die Lite-Version für Google. Wenn ich Icon für Amazon zur Verfügung stelle, wird es für beide Versionen (lite und full) verwendet und ich möchte dieses Verhalten nicht. Gibt es eine spezielle Aufgabe wie AmazonLite, wo ich dieses Icon platzieren kann oder muss ich Flavorgroups entfernen und nur reine Flavours machen? – mar3kk

+0

wo dieses Quellenset hinzufügen android.sourceSets.amazon ??? –

+0

@smoak Muss ich Ordner für verschiedene productFlavours manuell erstellen oder wird es automatisch erstellt? – WitVault