Código compartido en Android Studio

Empecé a trabajar en un proyecto en el que necesitaré compartir un montón de classs de Java en varias aplicaciones. En Eclipse fue posible crear un proyecto con todas esas classs y usarlo como una biblioteca en un espacio de trabajo con todos sus proyectos dependientes, pero en Android Studio no parece posible hacerlo (al less no fácilmente).

He estado leyendo un montón de publicaciones y muchas de ellas sugieren la creación de un proyecto de biblioteca, la generación de un file aar y su uso en mis proyectos. Pero, según tengo entendido, esto hará que mi biblioteca sea de código abierto (¿estoy en lo cierto?), Lo que no quiero. Estoy haciendo esto para un cliente y quiero que la base de código sea privada.

Además, sé que un module se puede importar a un nuevo proyecto. Pero esto crea una COPIA del module original. Esto no es lo que quiero en absoluto. No quiero mantener copys múltiples de las mismas classs, lo que derrota por completo el propósito de 'compartir código'.

¿Hay alguna buena manera de lograr lo que estoy buscando? Cualquier ayuda es apreciada.

Tienes un par de opciones diferentes.

Una opción es mantener sus bibliotecas como proyectos separados y comstackrlos en un formatting de file, como JAR o AAR; Los files JAR son para bibliotecas de Java puro, y AAR es para bibliotecas de Android (que contienen código que accede a las API de Android y / o tiene resources de Android). Como se señaló en los comentarios, AAR no lo obliga a publicar su código en el mundo más de lo que lo harían los files JAR; es solo un formatting de file de file cuyos files pueden ser locales para su máquina o su organización.

Con ese file de file en la mano, puede includelo en otros proyectos. Si usted es parte de una organización de múltiples desarrolladores, puede ser conveniente utilizar un administrador de repositorys para publicar y mantener esas bibliotecas dentro de su organización , y puede usar las especificaciones de estilo de coorderadas de Maven para include bibliotecas en sus proyectos, que no tiene que copyr manualmente a su máquina de desarrollo.

La desventaja de este enfoque es que hace un poco más difícil hacer cambios en esas bibliotecas: necesita cargar el proyecto, hacer cambios, crear un file y distribuir el file.

El otro enfoque es mantener la biblioteca como un module fuente como lo hizo en Eclipse. Observó que Android Studio realizará una copy del module si lo importa a través de la interfaz de usuario, pero si omite la interfaz de usuario y modifica los scripts de construcción directamente, puede hacer lo que desee, que es usar el module in situ y compartir una sola copy entre múltiples proyectos. Para hacer esto, trabaje en su file settings.gradle y agregue esto:

 include ':module_name' project(':module_name').projectDir = new File(settingsDir, '../relative/path/to/module') 

Le recomiendo encarecidamente que no utilice un path relativo puro aquí; en este ejemplo, la ruta está anclada a la variable settingsDir proporcionada por Gradle, que se define como el directory donde se encuentra settings.gradle . Si usa una ruta relativa pura (es decir, no está anclada a nada), depende de que el directory de trabajo sea el mismo en todos los entornos donde se ejecuta el file de compilation (línea de command vs. Android Studio vs. server CI), lo cual no es algo bueno de suponer.

Debes pensar en los proyectos de eclipse como modules de Android Studio / IntelliJ Idea. Luego, puede generar bibliotecas de Android (o Java) y luego includelas en su proyecto.

Para marcar un module de Android Studio como una biblioteca, puede ir a Archivo -> Estructura del proyecto -> Facetas y hacer clic en Módulo de biblioteca

enter image description here

Ciertamente puede crear y usar una biblioteca sin hacerlo de código abierto o disponible para otros.

Primero, no es necesario que sea un aar a less que contenga Recursos. Si solo se trata de classs simples, puede convertirlo en un file .jar.

De cualquier forma, la manera más fácil de compartir estas bibliotecas (ya sea aar o jar) es configurar su propio repository. Nexus y Artifactory son los dos administradores de repositorys más comunes.

Mantiene la biblioteca en su propio proyecto y luego la publica en su propio repository interno.

Luego, los proyectos que necesitan usar la biblioteca se configuran (en gradle) para usar el repository interno y get la biblioteca del mismo.

Estaba en la misma situación que tú, y fundé un enfoque usando git. Pasos para hacer, tener biblioteca:

  1. Crear proyecto en Android Studio.
  2. Crear el module de la biblioteca de Android en ese proyecto.
  3. En ese module de la biblioteca, crea el repository de git.
  4. Agregar modulename.iml en el file .gitignore
  5. Use GitHub o Bitbucket para repository de nube privada. y empuja tu biblioteca hacia ella.
  6. Cree un nuevo model de biblioteca de Android en cualquier proyecto que desee.
  7. Cierre Android Studio (no estoy seguro de que sea obligatorio).
  8. Usando el explorador vaya a la carpeta de su module creado.
  9. Elimine todos los datos, excepto modulename.iml .
  10. Clona tu biblioteca de "GitHub" en ella.

Eso es todo.

Ahora puede usar la biblioteca en proyectos múltiples ya sea que esté en casa o en el trabajo. Justo después de terminar su trabajo, no olvide empujar los cambios de la biblioteca. Y después de abrir uno nuevo, tire de ellos. Creo que puedes automatizar esto de alguna manera.

El beneficio es que no necesita build ningún jar, o aar.