Dos proyectos de Android compartiendo un module común en el mismo repository usando gradle

Estamos creando una aplicación (en realidad 2) que se divide en 2 proyectos separados pero que comparten el mismo repository de GIT (2 carpetas separadas en la raíz de git). Es una aplicación para dispositivos portátiles y una para otra plataforma. Pero deberían compartir algún código como utilidades, llamadas API, etc.

La estructura de la carpeta se ve así:

Raíz GIT
– Proyecto (Proyecto)
— Aplicación 1 (aplicación Android)
— Aplicación 2 (aplicación Android)
— Común (biblioteca de Android)

App1 y App2 deberían poder acceder al código desde el principio, pero no desde el otro sentido.

Intenté hacer lo anterior y usar Gradle, pero parece que no funciona. Sé que compartir el mismo repository git para ambas aplicaciones puede no ser la mejor manera de manejar este escenario, pero no tengo opciones aquí.

¿Crees que esto es posible de alguna manera? (Tal vez simplemente no entiendo los modules correctamente o algo así)

Soy nuevo en Gradle, lo que hace que esto sea aún más difícil …

Esto no es demasiado difícil de hacer si los tres proyectos están en el mismo repository de Git. Aquí está el esqueleto de cómo deben configurarse sus proyectos:

App1 (Android application) |_ build.gradle |_ src App2 (Android application) |_ build.gradle |_ src Common (Android library) |_ build.gradle |_ src settings.gradle build.gradle 

El file build.gradle nivel build.gradle puede tener configuraciones de gradle comunes que usará para todos los subproyectos

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' } } allprojects { repositories { mavenCentral() } } 

Asegúrese de que el file settings.gradle incluya todos sus proyectos:

 include ':App1' include ':App2' include ':Common' 

Configuración Common para ser un proyecto de biblioteca de Android. En el file build.gradle para Common agregue la línea:

 apply plugin: 'com.android.library' 

Configure los otros dos proyectos para que sean aplicaciones de Android e incluya el proyecto Common como una dependencia.

 apply plugin: 'com.android.application' dependencies { compile project(':Common') : : } 

Deberías tener tres repositorys git para esto. App1, App2 y Common.

Haga común un proyecto de biblioteca usando gradle.

 apply plugin: 'com.android.library' 

Puede usar el complemento android maven para build el aar localmente y ponerlo a disposition de cada aplicación secundaria. Agregue classpath 'com.github.dcendents:android-maven-plugin:1.2' Y apply plugin: 'com.github.dcendents.android-maven'

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' classpath 'com.github.dcendents:android-maven-plugin:1.2' } } apply plugin: 'com.github.dcendents.android-maven' 

Definir el grupo y la versión de la aplicación de la biblioteca

 group = 'com.foo.example' version = '1.0.0-SNAPSHOT' 

Instale la aplicación de la biblioteca localmente usando ./gradlew installDebug

Aplicaciones para niños

Ahora la aplicación principal se puede include en la aplicación secundaria como una dependencia. Agregue dependencia a build.gradle.

 compile('com.foo.example:library:1.0.0-SNAPSHOT@aar') {transitive = true} 

Cada vez que realice un cambio en la aplicación de la biblioteca, deberá volver a instalarla. Luego tiene que volver a sincronizar los files gradle en su aplicación para niños. Herramientas -> Android -> Proyecto de synchronization con files Gradle