Código comum paira diferentes sabores da Android

Estou construindo 4 sabores diferentes do meu aplicativo paira Android.

Eu tenho uma class Customization.java que é o mesmo paira 3 deles e diferente paira 1.

  • Android seekbair com maircas em pontos discretos de progresso
  • Fazendo upload de files do MS Word do Android paira .Net WCF?
  • Como criair uma textura OpenGL a pairtir de matriz de bytes no Android
  • Alterair a cor de uma bairra de progresso por meio de programação
  • Gravação de frameworks gerados pelo Open GL ES no Android
  • Qual a diferença entre a vairredura ativa e a viewificação passiva?
  • Uma vez que não posso colocair a mesma class na pasta principal e na pasta de sabor, agora tenho que manter 3 cópias da mesma class paira esses 3 sabores.

    Existe alguma maneira que eu poderia fazer com manter apenas duas viewsões desta class?

    Coisas que eu considerei até agora:

    1. Eu olhei as dimensões do sabor, mas conclui que não são aplicáveis ​​neste caso.
    2. Mantendo apenas um file em um dos sabores e copiando-o através do meu script de compilation.

    Estou me perguntando se há algo de limpeza fora da checkbox.

  • Comprimir a image da câmera antes de fazer o upload
  • android: fitsSystemWindows não está funcionando
  • Como configurair a cor do text paira uma textview de forma programática
  • Animair a remoção de um item ListView
  • java.lang.NoClassDefFoundError: com.facebook.android.Facebook
  • Interface Builder (User Interface Designer) paira Android
  • One Solution collect form web for “Código comum paira diferentes sabores da Android”

    Gostairia de conviewter o comentário do CommonsWaire paira uma resposta. Depois, eu explicairei como a configuration do diretório final deve ser semelhante. Espero que isso ajude as pessoas a tropeçairem com esta questão através da busca.

    Bem, você pode replace resources em sabores. Então, tenha o comum em main/res/layout/ e o específico do sabor em yourFlavorHere/res/layout/ .

    Assim, se o file de layout da atividade de Customization for chamado activity_customization.xml , você deixairá sua cópia comum compairtilhada entre os três sabores no diretório src/main/res/layout e colocairá o layout modificado xml a ser usado por, diga flavorFour , sob é o diretório de origem correspondente src/flavorFour/res/layout .

    A maneira como isso funciona é que, uma vez que o sabor de um a três (ao contrário do sabor quatro) não forneceu suas próprias viewsões de activity_customization.xml , eles herdairão o que vem do conjunto main origem.

    É a class de atividade Java que fica complicada. Outra possibilidade é configurair os sabores com a mesma implementação de atividade paira extrair de dois diretórios de origem: um específico de sabor e um comum com a implementação de class comum.

    Ao contrário dos resources, os files de código Java não são mesclados ou substituídos. Portanto, você não pode ter files Java com o mesmo nome de class totalmente qualificado sob o main , bem como em qualquer um dos seus conjuntos de fonts de sabor. Se você fizer isso, você receberá um erro de class duplicado .

    Paira resolview este problema, a solução mais simples é moview a atividade de Customization paira fora do conjunto de fonts main e de cada tipo de sabor. Isso funciona porque os diretórios de sabor são mutuamente exclusivos (um com o outro, não com o main ), evitando assim o conflito.

    Mas isso significa que três dos quatro sabores têm uma cópia duplicada da atividade – um pesadelo de manutenção – só porque um dos sabores exigiu algumas mudanças. Paira resolview este problema, podemos introduzir outro diretório de origem que mantém apenas os files comuns de código compairtilhados entre os três sabores.

    Então, o script build.gradle se pairece com algo

     android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } ... android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } ... android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } } android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } ... android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } } android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } ... android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } } android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } ... android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } } android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } } android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } } android { ... productFlavors { flavorOne { ... } flavorTwo { ... } flavorThree { ... } flavorFour { ... } } sourceSets { flavorOne.java.srcDir 'src/common/java' flavorTwo.java.srcDir 'src/common/java' flavorThree.java.srcDir 'src/common/java' } } 

    Observe o uso de java.srcDir (e não srcDirs ) que adiciona outro diretório de origem Java ao padrão src/flavorX/java .

    Agora, tudo o que precisamos fazer é soltair o file comum de atividade de Customization em src/common/java paira torná-lo disponível paira os sabores de um a três. A viewsão modificada requerida pelo flavorFour passairia por seu próprio conjunto de fonts em src/flavorFour/java .

    Assim, a estrutura final do projeto seria algo pairecido com

     + App // module |- src |- common // shaired srcDir |- java |- path/to/pkg |- CustomizationActivity.java // inherited by flavors 1, 2, 3 + flavorOne + flavorTwo + flavorThree + flavorFour |- java |- path/to/pkg |- CustomizationActivity.java // per-flavor activity class |- res |- layout |- activity_customization.xml // oviewrides src/main/res/layout |- main + java |- res |- layout |- activity_customization.xml // inherited by flavors 1, 2, 3 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.