Múltiples aplicaciones de Android dependiendo de la biblioteca de Android con gradle

Todavía estoy aprendiendo gradle pero por lo que he leído, me pregunto si esto es posible.

Tengo varias aplicaciones de Android (app1, app2, app3), que depende de una biblioteca de Android (L). La biblioteca de Android (L) dependería de bibliotecas externas como volley, y las aplicaciones dependerían de bibliotecas externas como picasso.

No quiero copias múltiples de la biblioteca y volley para cada aplicación. Aquí es lo que estaba pensando mi estructura carpeta / gradle se vería así:

app1/ settings.gradle build.gradle src/ com/ test/ app2/ app3/ library/ settings.gradle build.gradle src/ com/ test/ external/ volley/ picasso/ 

Pero no estoy seguro de lo que mi archivo build.gradle para app1 se vería como dependencias de proyecto (biblioteca) parece que tiene que estar dentro de la carpeta app1.

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5+' } } apply plugin: 'android' dependencies { compile files('libs/android-support-v4.jar') compile project(':library') } android { buildToolsVersion "17.0" compileSdkVersion 18 sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aild.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } instrumentTest.setRoot('tests') } } 

¿Cuál sería la mejor forma de estructurar mis proyectos para usar gradle?

Usted podría utilizar esta estructura:

 app1/ build.gradle app2/ app3/ library/ src/ main libs build.gradle settings.gradle 

En settings.gradle

 include ':library' ,':app1' , ':app2', ':app3' 

En app1 / build.gradle

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android' repositories { mavenCentral() } android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 14 targetSdkVersion 19 } } dependencies { //Library compile project(':library') // Support Libraries compile 'com.android.support:support-v4:19.0.0' //OkHttp compile 'com.squareup.okhttp:okhttp:1.2.1' //Picasso compile 'com.squareup.picasso:picasso:2.1.1' } 

En biblioteca / build.gradle

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android-library' repositories { mavenCentral() } android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 14 targetSdkVersion 19 } } dependencies { compile fileTree(dir: 'libs', include: '*.jar') } 

Con aar de maven (como picasso), Gradle detectará múltiples instancias de la misma dependencia, y administrará las cosas para usted. Con jar (como Volley) tienes que prestar atención. No se puede agregar dos veces. Si su proyecto de biblioteca tiene una dependencia en un tarro, entonces el proyecto APK heredará esta dependencia.

Estás confundido acerca de settings.gradle. Debe estar en la raíz de la estructura de carpetas de varios módulos.

Así que usted tiene dos opciones:

  • Cree una sola configuración multi-módulo donde tiene 4 módulos (biblioteca, app1, app2, app3). En este caso, siempre abrirás los 4 proyectos en el estudio, podrás construir todos para las aplicaciones al mismo tiempo, y todos utilizarán la misma versión de la biblioteca. Esto probablemente significa que usted necesita tener cada aplicación desarrollada al mismo tiempo, y tal vez liberar al mismo tiempo (dependiendo del ciclo de desarrollo del proyecto de la biblioteca)

  • Crear 4 proyectos independientes. En este caso, usted está desarrollando la biblioteca por separado y publicándola en un repositorio (interno) usando cualquier versión que desee. Entonces, cada aplicación puede depender de una versión diferente de la biblioteca.

  • Error Gradle - No se puede llamar IncrementalTask.taskAction () en la tarea ': project: mergeDebugResources'
  • Android Studio "No se encontraron pruebas"
  • Errores de Gradle en Android Studio
  • Travis CI Build falla en la aplicación de Android Versión de major.minor no compatible 52
  • ¿Cómo excluir las bibliotecas publicitarias de la compilación de aplicaciones pagadas?
  • Error de Android en la construcción de módulos importados, gradle - No se pudo encontrar el método instrumentTestCompile ()
  • No se encontró ninguna versión que coincida con com.android.tools.build:gradle:1.10+
  • Los archivos múltiples dex definen <mi paquete> / BuildConfig, no pueden encontrar la causa:
  • Android Studio: Gradle Refresh Failed - No se encontró com.android.tools.build:gradle:2.2.0-alpha6
  • ¿Qué errores se detectan en "build" en Android Studio - rol de Gradle
  • Android Studio Sigue diciendo No se pudo completar la ejecución de Gradle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.