¿Cómo debo organizar el control de código fuente para los proyectos de Android, incluidas las bibliotecas?

Necesito un poco de ayuda para averiguar la mejor manera (o mejor práctica) para organizar mi proyecto de Android. Por motivos de simplicidad, digamos que mi espacio de trabajo Eclipse para Android es C:\Android\Projects\ . Dentro de esa carpeta me gusta separar las aplicaciones de las bibliotecas y tengo otras dos carpetas, C:\Android\Projects\Applications y C:\Android\Projects\Components .

Para un proyecto he clonado una biblioteca de GitHub en la carpeta de Components , digamos C:\Android\Projects\Componentes\SampleLib (dentro de esa carpeta hay dos carpetas TheLib y TheLibExample ). Y mi aplicación se crea en C:\Android\Projects\Applications\MyTestApp . Luego incluí la biblioteca en la aplicación siguiendo estas instrucciones .

Ahora digamos que quiero usar GitHub para compartir mi aplicación con la comunidad de código abierto. C:\Android\Projects\Applications\MyTestApp un repositorio y empujaré todo desde C:\Android\Projects\Applications\MyTestApp en algún repositorio.

Si alguien quiere bifurcar mi aplicación o incluso me ayuda, necesitará la biblioteca para compilarla y ejecutarla, la cual no está incluida en mi propio proyecto. El archivo default.properties tendrá algo como android.library.reference.1=../Components/SampleLib/TheLib y que alguien necesitará clonar manualmente esa biblioteca también y él tendría que colocarlo en la misma ruta relativa, de lo contrario Sería perjudicar el control de código fuente de mi aplicación.

La única forma en que puedo pensar en solucionar este problema es organizar mi espacio de trabajo de la siguiente manera:

 C:\Android\Projects\Applications\MyTestApp\TheApp C:\Android\Projects\Applications\MyTestApp\TheLib C:\Android\Projects\Componentes\SampleLib 

Y mi repositorio debe estar lleno con el contenido de C:\Android\Projects\Applications\MyTestApp\ .

Pero, ¿qué ocurre cuando se actualiza la biblioteca? No puedo simplemente tirar de los nuevos cambios, necesito copiarlos en la carpeta TheLib . En la organización de carpetas anterior esto no sería necesario ya que estaba haciendo referencia al repositorio clonado original y no a una copia.

¿Que debería hacer entonces? ¿Debo ir con la opción uno y dejar que cualquier persona que bifurca mi proyecto se ocupe de la dependencia de la biblioteca como lo consideran conveniente, o debo ir con el segundo y dar a cada uno más trabajo guardando dos carpetas en sincronización cuando el original tira cambios de él es ¿repositorio?

Tal vez los submódulos git resolverán su problema.

Personalmente creo que el proyecto de la biblioteca de Android es un diseño FAIL. Es ridículo que la única manera que quiero referir / usar otro pedazo de código es conseguir otro proyecto entero y configurar todo a nivel de configuración IDE. ¿Qué es una biblioteca? Debe ser un componente reutilizable compilado y empaquetado en un formato de archivo. De acuerdo con su importante ubicación de almacenamiento de biblioteca de proyecto , no creo que haya una solución fácil que podamos romper el vínculo y administrar la biblioteca como una biblioteca real. Si su biblioteca no es tan androidized, trate de escribir / construir es como una biblioteca jar simple y el uso de maven administrar la biblioteca jar compilación / liberación y dependencias del proyecto.

Hmmm, es razonable que Google lo llame Android Library Project , no Android Library .

Personnalmente pienso que los submódulos git no proporcionan por completo un sistema muy fácil de usar y poderoso para las dependencias de la biblioteca.

Los subárboles Git son una mejor alternativa. He encontrado una guía muy útil que explica cómo hacerlo.

Básicamente, puede crear una subcarpeta que contenga sus dependencias y clonar los repositorios dentro de esa subcarpeta:

 $ mkdir vendor $ git remote add -f ABS https://github.com/JakeWharton/ActionBarSherlock $ git merge -s ours --no-commit ABS/master $ git read-tree --prefix=vendor/ABS/ -u ABS/master $ git commit -m "Merged ABS into vendor/ABS/" # Now another lib $ git remote add -f Crouton https://github.com/keyboardsurfer/Crouton $ git merge -s ours --no-commit Crouton/master $ git read-tree --prefix=vendor/Crouton/ -u Crouton/master $ git commit -m "Merged Crouton into vendor/Crouton/" 

Entonces, tendrá en este ejemplo dos repos / libs dentro del vendor/ ; Sólo tiene que agregarlos a su sistema IDE / build.

La ramificación de Git y las modificaciones son mucho más fáciles y más sencillas que con submódulos.

Incluso he creado un pequeño script que automatiza este proceso para una lista de libs.

  • ¿Debo crear una sucursal para la versión gratuita de mi aplicación para Android?
  • ¿Cómo desactivar el control de versiones en android studio?
  • ¿Cómo libera dos versiones de una aplicación en el Market?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.