Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Sabores de Gradle para Android con conjuntos de fuentes personalizadas – ¿Cómo deberían ser los archivos de gradle?

Tengo un viejo proyecto de eclipse que me he trasladado a android studio y configuración para usar sabores. Parecía estar funcionando bien hasta que empecé a tratar de usar diferentes archivos java entre mis sabores.

Mi proyecto de configuración es la siguiente:

  • Alternativa para el onResume () durante la conmutación de fragmentos
  • No se pudo resolver: android.arch.lifecycle: extensions: 1.0.0-alpha1 android studio 3.0
  • Problema para recuperar ConnectivityManager en un dispositivo con multi sim
  • GetSize () no es compatible con versiones anteriores de Android OS, getWidth () / getHeight () obsoleto
  • Android ilegal excepción cuando el cuadro de diálogo está mostrando
  • Eliminar espaciado o relleno en android Spinner
  • ProjectRoot +- acitonbarsherlock +- facebook +- myLib1 +- myProject +- src +- commonFiles +- flavor1 +- flavor2 +- res +- flavor1 +- flavor2 

    Las entrañas del archivo gradle de myProject bloqueo android se ve así:

     android { compileSdkVersion 17 buildToolsVersion "18.0.1" signingConfigs { ... } productFlavors { flavor2 { } flavor1 { } } sourceSets{ main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src/commonFiles/java'] resources.srcDirs = ['src/commonFiles/java'] aidl.srcDirs = ['src/commonFiles/java'] renderscript.srcDirs = ['src/commonFiles/java'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } flavor2 { manifest.srcFile 'AndroidManifest-flavor2.xml' res.srcDirs = ['res-flavor2', 'res'] java.srcDirs = ['src/flavor2/java','src/commonFiles/java'] resources.srcDirs = ['src/flavor2/java','src/commonFiles/java'] aidl.srcDirs = ['src/flavor2/java','src/commonFiles/java'] renderscript.srcDirs = ['src/flavor2/java','src/commonFiles/java'] } flavor1 { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src/flavor1/java','src/commonFiles/java'] resources.srcDirs = ['src/flavor1/java','src/commonFiles/java'] aidl.srcDirs = ['src/flavor1/java','src/commonFiles/java'] renderscript.srcDirs = ['src/flavor1/java','src/commonFiles/java'] res.srcDirs = ['res-flavor1','res'] assets.srcDirs = ['assets'] } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } buildTypes { release { signingConfig signingConfigs.release } } 

    }

    Con mi configuración como este gradle se queja de no ser capaz de encontrar las clases que estoy tratando de heredar de commonFiles en flavor1 o flavor2.

    De los otros temas que he visto aquí veo a otros ni siquiera definiendo conjuntos de fuentes, y siento que lo que estoy haciendo en ellos es tal vez demasiado.

    ¿Alguien ha experimentado con esto antes y sabe cómo esto debe configurarse correctamente?

  • ¿Cómo hago un botón de EditView de Android "Hecho" y ocultar el teclado al hacer clic en él?
  • Cómo reproducir o reanudar la música de otro reproductor de música de mi código?
  • Tabulaciones de la barra de herramientas de Android y enfoque del teclado
  • Cómo configurar la biblioteca de compilación en android studio. LOMBOK
  • ¿Por qué el valor de tiempo de espera no es respetado por HttpURLConnection de Android?
  • Propuesta de participación de Android para facebook- compartir texto y enlace
  • 3 Solutions collect form web for “Sabores de Gradle para Android con conjuntos de fuentes personalizadas – ¿Cómo deberían ser los archivos de gradle?”

    Creo que sería mejor no definir los conjuntos de sourceSets personalizados sino usar la configuración predeterminada de gradle. Solía ​​hacer fuentes personalizadas hasta que me di cuenta de que las convenciones son, bueno, convenientes.

    Usted querrá algo como esto:

     + src + main // this is your common code + java + res + flavor1 + java + res + flavor2 + java + res 

    Entonces usted puede simplemente seguir adelante y quitar el cierre de build.gradle su build.gradle

    NOTA: Para la configuración de gradle , los recursos se combinan o sobrescriben mientras que todo el código java se coloca en la misma ruta de acceso de clase. Por ejemplo, los archivos de AndroidManifest.xml para cada sabor sólo necesitan las diferencias del archivo de manifiesto main . Tener un activo, por ejemplo, ic_launcher en un sabor anula el ic_launcher de main si existe dicho archivo. Sin embargo, tener un archivo HomeActivity.java en el main y el sabor no es posible y dará un error de archivo duplicado.

    Le invitamos a usar los sourceSets y flavours (o buildTypes ) si lo desea.

    Como ejemplo, puede configurarlos en su archivo Gradle de la siguiente manera:

     productFlavors { flavor2 { } flavor1 { } } sourceSets{ main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src/commonFiles/java'] resources.srcDirs = ['src/commonFiles/java'] aidl.srcDirs = ['src/commonFiles/java'] renderscript.srcDirs = ['src/commonFiles/java'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } flavor1.java.srcDirs = ['src-flavor1'] flavor1.res.srcDirs = ['res-flavor1'] ... flavor2.java.srcDirs = ['src-flavor2'] flavor2.res.srcDirs = ['res-flavor2'] ... } 

    Esto es lo que mi Gradle parece:

      productFlavors { // Still keeping the productFlavors closure in case we decide to add flavors later normal { applicationId 'com.akshat' } qa { applicationId 'com.akshat.qa' } } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jni.srcDirs = [] // Set empty since we use our own ndkBuild task jniLibs.srcDirs = ['libs'] } normal { java.srcDirs = ['src_normal'] } qa{ java.srcDirs = ['src_qa'] } 

    Y aquí está cómo mi estructura de Directorio es:

     MyApplication - res - libs - jni - src -com/akshat/ - src_qa - com/akshat/util/FlavorConst.java - src_normal - com/akshat/util/FlavorConst.java 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.