21

Ho un progetto definito dal file di build.gradleCome fornire diversi launcher icona per il sapore del prodotto

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

Funziona bene ma ora voglio fornire specifiche icone di avvio per ogni sapore del prodotto. Ho provato a mettere il file Manifest extra per Amazon ma non ha funzionato. Ho ricevuto un errore "Duplica i file copiati in APK AndroidManifest.xml". Cosa potrebbe esserci di sbagliato?

+0

demo per Android flavor http://goo.gl/5NSnEM – nitesh

risposta

21

Hai un paio di opzioni:

  1. passare al nuovo studio/disposizione Gradle Android e creare cartelle per i productFlavors:

    src/main/ - codice condiviso/risorse in tutti i sapori
    src/amazon - Codice/risorse specifiche di Amazon su tutti i sapori
    src/google - Codice/risorse specifiche di Google per tutti i gusti

    Quindi nel file manifest principale (src/main/AndroidManifest.xml) se il tuo android:icon è @drawable/icon, l'icona appropriata si trova in src/amazon/res/drawable-*/icon.png e, analogamente, per il resto del prodottoFlavor.

  2. Mantenere il layout esistente (e build.gradle) e aggiungere una directory delle risorse alla res.srcDirs:

Quindi, per il vostro Amazon sourceset:

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

E poi nella vostra /path/to/amazon/res/dir/drawable-* avresti la tua icona di avvio.

+2

Va bene, ma solo parzialmente. Funzionerà se ho solo 2 icone per esempio per la versione google e amazon o per la versione lite e completa. Il problema è che ho gruppi di gusti e voglio che la mia icona per la versione lite di Amazon sia diversa dalla versione lite di Google. Se fornisco l'icona per Amazon, verrà utilizzata per entrambe le versioni (lite e completa) e non desidero tale comportamento. C'è qualche compito specifico come AmazonLite dove posso mettere quell'icona o devo rimuovere i flavorgroup e fare solo aromi puri? – mar3kk

+0

dove aggiungere questo insieme di sorgenti android.sourceSets.amazon ??? –

+0

@smoak ho bisogno di creare cartelle per prodotti diversi manualmente o sarà creato automaticamente? – WitVault

Problemi correlati