studio para descargar configurar android gradle android-studio source-sets

descargar - Sabores Gradle para Android con juegos de fuentes personalizados: ¿cómo deberían ser los archivos gradle?



gradle version android studio (4)

Así es como se ve mi Gradle:

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 así es como 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

Tengo un proyecto de eclipse antiguo. Me mudé al estudio android y configuré para usar sabores. Parecía estar funcionando bien hasta que comencé a tratar de usar diferentes archivos Java entre mis sabores.

La configuración de mi proyecto es esta:

ProjectRoot +- acitonbarsherlock +- facebook +- myLib1 +- myProject +- src +- commonFiles +- flavor1 +- flavor2 +- res +- flavor1 +- flavor2

Las entrañas del cierre de android del archivo gradle myProject se ven 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 poder encontrar las clases que intento heredar de commonFiles en flavor1 o flavor2.

De los otros temas que he visto aquí, veo que otros ni siquiera definen conjuntos de fuentes, y siento que lo que estoy haciendo en ellos es quizás demasiado.

¿Alguien ha experimentado esto antes y sabe cómo debería configurarse correctamente?


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

Querrás algo como esto:

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

Luego, puede continuar y eliminar el cierre de build.gradle su build.gradle

NOTA: Para la configuración gradle , los recursos se fusionan o se reemplazan, mientras que todos los códigos java se colocan en la misma ruta de clase. Por ejemplo, los archivos AndroidManifest.xml para cada sabor solo 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 dicho archivo existe. Sin embargo, no es posible tener un archivo HomeActivity.java en main y en flavor, y dará un error de archivo duplicado.


Le invitamos a utilizar los conjuntos de 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''] res.srcDirs = [''res-flavor1''] ... } }


Puedes codificar como el siguiente ejemplo que tomo

sourceSets { main { manifest.srcFile ''AndroidManifest.xml'' res.srcDirs = [''res''] java.srcDirs = [''src'', ''../3party/Alohalytics/src/android/java'', ''ttsearch/jni/out''] assets.srcDirs = [''assets'', ''flavors/mwm-ttf-assets''] jniLibs.srcDirs = [''libs'', ''jniLibs'', ''ttsearch/libs''] } flavor { manifest.srcFile ''flavor'' assets.srcDirs = [''flavor/assets''] res.srcDirs = [''flavor/res''] res.srcDirs = [''flavor/res''] .... } }