21

У меня есть проект, определенного 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, но это не сработало. Я получил сообщение об ошибке «Дублирует файлы, скопированные в APK AndroidManifest.xml». Что может быть неправильным?

+0

демо для андроидных ароматов http://goo.gl/5NSnEM – nitesh

ответ

21

У вас есть несколько вариантов:

  1. переключатель на новый андроид студии/Gradle макет и создать папки для productFlavors:

    src/main/ - Общий код/​​ресурсы во всех вкусов
    src/amazon - Специальный код/​​ресурсы Amazon во всех вариантах
    src/google - код и ресурсы Google для всех видов

    Итак, в вашем основном манифесте (src/main/AndroidManifest.xml), если у вашего android:icon есть @drawable/icon, у вас будет соответствующий значок, расположенный в src/amazon/res/drawable-*/icon.png, а также остальная часть вашего продуктаFlavors.

  2. Держите существующий макет (и build.gradle) и добавить каталог ресурсов в res.srcDirs:

Таким образом, для вашего амазонка sourceset:

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

И тогда в вашей /path/to/amazon/res/dir/drawable-* у вас будет значок запуска.

+2

Все нормально, но только частично. Он будет работать, если у меня есть только 2 значка, например, для версии google и amazon или для облегченной и полной версии. Проблема в том, что у меня есть группы вкуса, и я хочу, чтобы мой значок для облегченной версии amazon отличался от версии Lite для google. Если я предоставляю значок для амазонки, он будет использоваться для обеих версий (lite и full), и я не хочу этого поведения. Есть ли какая-то конкретная задача, такая как AmazonLite, где я могу поместить этот значок или мне нужно удалить ароматические группы и сделать только чистые ароматы? – mar3kk

+0

где добавить этот источник android.sourceSets.amazon ??? –

+0

@smoak Мне нужно создать папки для разных productFlavours вручную или будет автоматически создано? – WitVault