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:

  • Mostrar icono de emoji / emoción en Android TextView
  • Cómo crear botones sin bordes en Android
  • Android: ¿Cómo puedo imprimir una variable en la consola eclipse?
  • Cómo configurar el caché Http cuando se utiliza Volley con OkHttp?
  • No se puede resolver el símbolo 'AndroidJUnit4'
  • Cómo solucionar java.lang.OutOfMemoryError: Límite de sobrecarga de GC excedido error en android studio
  • 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?

  • La navegación ActionBar up recrea la actividad principal en lugar de onResume
  • OnTouchListener no funciona
  • ListFragment "vista de contenido aún no creada" en Rotate
  • ¿Puedo integrar Microsoft Lens en mi aplicación?
  • Cómo crear una pantalla deslizante (como en Tweetdeck) en Android?
  • Calcular la distancia real recorrida por el móvil
  • 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.