21

Mam projektu określony przez pliku build.gradleJak zapewnić inną ikonę wyrzutni za smak produktu

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

to działa dobrze, ale teraz chcę przedstawić konkretne ikony programów uruchamiających dla każdego smaku produktu. Próbowałem umieścić dodatkowy plik Manifest dla Amazon, ale nie zadziałał. Wystąpił błąd "Powielono pliki skopiowane w pliku APK AndroidManifest.xml". Co może być nie tak?

+0

Demo na smaki dla Androida http://goo.gl/5NSnEM – nitesh

Odpowiedz

21

masz kilka opcji:

  1. Przełącz się na nowy android studio/układ Gradle i tworzyć foldery dla productFlavors:

    src/main/ - wspólna Kod/zasoby we wszystkich smakach
    src/amazon - Amazon specyficzny kod/zasoby dla wszystkich smaków
    src/google - Google specyficzny kod/zasoby dla wszystkich smaków

    W twoim głównym manifeście (src/main/AndroidManifest.xml), jeśli twoja android:icon jest @drawable/icon, będziesz miał odpowiednią ikonę znajdującą się w src/amazon/res/drawable-*/icon.png i podobnie dla reszty twojego produktu Smaki.

  2. Zachowaj istniejący układ (i build.gradle) i dołączyć katalog zasobów do res.srcDirs:

Więc dla Twojego amazon sourceset:

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

A potem w swoim /path/to/amazon/res/dir/drawable-* miałbyś swoją ikonę programu uruchamiającego.

+2

Jest ok, ale tylko częściowo. Będzie działać, jeśli mam tylko 2 ikony, na przykład dla wersji Google i Amazon lub wersji Lite i pełnej. Problem polega na tym, że mam grupy smakowe i chcę, aby moja ikona dla wersji lite amazon była inna niż wersja lite dla google. Jeśli podaję ikonę dla Amazona, będzie ona używana dla obu wersji (lite i full) i nie chcę tego zachowania. Czy istnieje jakieś specjalne zadanie, takie jak AmazonLite, w którym mogę umieścić tę ikonę, czy muszę usunąć grupy smakowe i tworzyć wyłącznie czyste smaki? – mar3kk

+0

gdzie dodać ten zestaw źródeł android.sourceSets.amazon ??? –

+0

@smoak Czy muszę tworzyć foldery dla różnych produktów Smaki ręcznie lub czy będą one tworzone automatycznie? – WitVault