Android Studio agrega un proyecto externo a build.gradle
Tengo un proyecto de muestra, con la siguiente configuración:
/root
+ Pure Java Lib
+ Android Test Lib
+ Android Test Project
Donde el ' Proyecto de prueba ' depende de la ' Test Lib ', y el último depende de la ' Pure Java Lib '. Compilar el proyecto y ejecutar esta configuración funciona bien.
Ahora estoy pensando en importar mi espacio de trabajo anterior de Eclipse y trabajar con Android Studio, el problema es que la configuración del proyecto es diferente y me gustaría mantenerlo así.
por ejemplo si usamos el ejemplo anterior:
/root
+ Android Test Lib
+ Android Test Project
/Some Other folder (another repository for example)
+ Pure Java Lib
Probé muchas configuraciones, pero no encontré una manera de hacer referencia a un proyecto fuera del alcance de la carpeta principal (' raíz ' en el caso de ejemplo).
En muchas plataformas/módulos puedes usar '..' para subir en las carpetas, pero esto no funcionó para mí, tal vez lo usé mal.
¿Alguien sabe cómo se puede lograr esto con Gradle?
ACTUALIZAR
Intentaré ser más genérico:
/C:/
/Project A
+ Module 1 - Pure Java
+ Module 2 - Android Test Lib
+ Module 3 - Android Test Project
/Project B
+ Module 1 - Pure Java
+ Module 2 - Pure Java
+ Module 3 - Pure Java
Me gustaría utilizar el Módulo 1 del proyecto B , en el proyecto A.
ACTUALIZACIÓN: 03-09-19
Vi esto ahora y debo actualizar... después de casi 6 años, hoy soy más sabio y definitivamente puedo decir que el problema fue que no entendí bien el concepto de "Fuente de la verdad".
Si bien es bueno tener una referencia a una biblioteca... y puede parecer una "Fuente de la verdad", la "Fuente de la verdad" REAL sería la versión del código que cada proyecto está usando de esa biblioteca, porque la biblioteca por sí sola tiene versiones... muchas versiones y la "Fuente de la verdad" es relativa al proyecto que utiliza la biblioteca.
La forma correcta sería usar lo que a la mayoría de los desarrolladores no les gusta, y son los submódulos de git, y sí, duplicar las fuentes en cada proyecto porque es más probable que cada proyecto use una versión diferente del código.
Sin embargo, necesitaría apuntar a que todos sus proyectos utilicen la última y mejor versión de todas sus bibliotecas... lo cual es un desafío en sí mismo.
La razón por la que esta es la forma correcta de desarrollar un proyecto con fuentes de biblioteca es que esto escala... puede tener cientos de proyectos, cada uno con su propia configuración de biblioteca.
Suponiendo que Alguna otra carpeta es un proyecto de Gradle, puede agregar algo como lo siguiente a su archivo settings.gradle:
include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')
Tienes que poner en tu archivo settings.gradle estas líneas:
include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')
Luego debes agregar en tu builde.gradle (Módulo: aplicación) en el árbol de dependencias , esta línea:
implementation project(':module2')
o vaya a Estructura del proyecto > aplicación > Dependencias , haga clic en Agregar , elija 3 dependencias del módulo y seleccione su módulo
Con Gradle 1.10 (no sé para qué otras versiones será válido), esto es lo que se me ocurrió en base a una respuesta dada aquí http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy
Tengo un proyecto de biblioteca API, un proyecto de biblioteca común y el proyecto de aplicación principal. Cada uno es un proyecto de desarrollo independiente y las dos bibliotecas deben compartirse entre varias aplicaciones.
En settings.gradle para el proyecto común:
def apiLibDir = file('../android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'
Luego, en la configuración del proyecto de la aplicación principal.gradle:
def apiLibDir = file('../android-libs/android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'
def commonLibDir = file('../android-libs/android-common/android-common-lib')
settings.createProjectDescriptor(rootProjectDescriptor, 'android-common-lib', commonLibDir)
include ':android-common-lib'
En cada uno de los respectivos archivos build.gradle, simplemente haga referencia a ellos por el nombre que les dio en settings.createProjectDescriptor como lo haría con cualquier otra dependencia del proyecto:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':android-api-lib')
compile project(':android-common-lib')
}
Esto parece funcionar. Sospecho que ni siquiera arrojó un error para varios archivos DEX que definen la biblioteca api, porque todo era parte del mismo proceso de compilación y Gradle fue lo suficientemente inteligente como para resolverlo todo.
Haga clic derecho en el proyecto - Seleccione "Abrir configuración del módulo" - Seleccione "Módulos" en el panel izquierdo - Haga clic en el símbolo "+" en la parte superior - Elija "Importar módulo".
Después de importar Module. Debe agregarlo como una dependencia para su proyecto actual.
Mantenga "Módulos" seleccionados en el panel izquierdo y haga clic en su proyecto. Ahora vaya a la pestaña de dependencias y haga clic en el símbolo "+" que se encuentra en la parte inferior. Elija la tercera opción "Dependencias del módulo" y si ha importado su proyecto correctamente, lo hará. le muestra todos los módulos disponibles que se pueden agregar como una dependencia a su proyecto actual.