Eclipse: proyecto múltiple de una sola fuente

Al principio tengo que decir que no soy muy bueno con el inglés, así que lo siento si puedo explicar muy bien lo que quiero decir 🙂

Tengo un proyecto que necesito replicar n veces; Cada nuevo proyecto debe tener el mismo código fuente, pero diferentes recursos (por ejemplo, imágenes, archivos html, sonidos, pdf, etc) y diferentes nombres de clase / paquetes.

Mi proyecto no es un java estándar, sino Android + phonegap. Tengo un complemento de eclipse que crea un proyecto de teléfono vacío … tal vez hay una manera de modificar este complemento para crear mi proyecto estándar?

¿Es posible? Lo mejor es tener también un sistema para comprometer los cambios de origen del proyecto principal a los niños, pero no es obligatorio.

Lo siento de nuevo por mi inglés.

EDITAR:

Lo siento si vuelvo a editar esta pregunta, pero realmente no puedo encontrar una solución para mi problema.

Quiero integrarlo con un ejemplo, tal vez pueda explicar lo que necesito.

Imagina que has desarrollado y la aplicación androide con eclipse y phonegap, para un equipo de fútbol, ​​ejemplo Barcelona.

La aplicación está principalmente en html + jquerymobile, pero has modificado la actividad, el manifiesto de Android, añadido algunos complementos de phonegap, algún recurso de medios de comunicación, etc.

Ahora tienes que replicar esta aplicación para más equipos, muchos equipos. Para todo el mundo tienes que crear un nuevo proyecto de teléfono, modificar cada archivo, agregar los complementos, añadir los activos …. esas tareas no pueden estar libres de errores.

Pero el gran problema es: si solo tienes una pequeña actualización en tu código, ¿cómo puedes replicarlo en proyectos de 10/20/50/100/1000?

He añadido android, phonegap y cordova etiquetas demasiado a la publicación para ser más específico.

Lo siento de nuevo por mi inglés.

EDIT N ° 2

Acabo de jugar con maven android plugin durante más de una semana ahora, sin éxito. Lo que necesito es un código centralizado donde puedo cambiar la app y el nombre de paquete, los iconos y solo pequeños archivos de configuración.

Las librerías de Android no son una solución, ya que no pueden exportar archivos de activos.

Comencé una recompensa para esta pregunta que busca una respuesta detallada … ayuda por favor 🙁

Desde la perspectiva de mantenimiento, no consideraría la posibilidad de replicar 1000 proyectos base en la misma base de código. Utilizaría un único proyecto para gestionar los recursos específicos del cliente y cambiar el recurso requerido en la fase de construcción del proyecto. En otra palabra, 1 proyecto para construir 1000 apks, no 1000 proyectos para construir 1000 apks.

Basado en los detalles que has dado en la pregunta, la dirección correcta (por lo que puedo ver) para resolver este tipo de escenario de uso (construir múltiples aplicaciones a partir de una sola fuente de base) es adoptar herramientas externas de construcción como Ant o Maven dominar construir Proceso (ambos proporcionan la capacidad de control fino en cada paso es decir, compilar, dex, paquete y etc durante el ciclo de vida completo de la construcción) y tal vez escribir script de shell para la construcción por lotes si es necesario.

No soy una diversión de PhoneGap pero tengo una mirada rápida a través de su guía de introducción , base en mi entendimiento, es simplemente otra pila de capa de programación en la parte superior de SDK de Android, para proporcionar la capacidad de escribir aplicaciones móviles principalmente utilizando el lenguaje de programación web HTML, CSS, Javascript), la aplicación aún mantiene el esqueleto original del proyecto, por lo que no esperaría mucho problema para escribir Ant / Maven script para construir la aplicación PhoneGap.

Una vez que haya construido su aplicación PhoneGap con éxito por Maven. Usted puede comenzar a investigar cómo resolver su escenario, he visto escenario similar antes en StackOverflow, echa un vistazo a este hilo y este hilo para algún estudio de caso. Puede iniciar un proyecto de Prueba de Concepto para el estudio de factibilidad.

He publicado un ejemplo de código muestra cómo Maven lograr esto, ver más abajo.

Estructura del directorio de proyectos de ejemplo:

myApp/ src/ res-barcelona/ assets-barcelona/ res-realmadrid/ assets-realmadrid/ ... ... project.properties AndroidManifest.xml pom.xml 

Ejemplo de archivo pom.xml:

 <profiles> <profile> <id>barcelona</id> <properties> <app.package.name>com.company.app.barcelona</app.package.name> <app.res.dir>${project.basedir}/res-barcelona</app.res.dir> <app.assets.dir>${project.basedir}/assets-barcelona</app.assets.dir> </properties> </profile> <profile> <id>realmadrid</id> <properties> <app.package.name>com.company.app.realmadrid</app.package.name> <app.res.dir>${project.basedir}/res-realmadrid</app.res.dir> <app.assets.dir>${project.basedir}/assets-realmadrid</app.assets.dir> </properties> </profile> ... ... </profiles> .... <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>3.1.1</version> <extensions>true</extensions> <configuration> <sdk> <platform>13</platform> </sdk> <undeployBeforeDeploy>true</undeployBeforeDeploy> <renameManifestPackage>${app.package.name}</renameManifestPackage> <resourceDirectory>${app.res.dir}</resourceDirectory> <assetsDirectory>${app.assets.dir}</assetsDirectory> </configuration> </plugin> ... ... </plugins> 

Para construir app-barcelona.apk, ejecute mvn clean install -Pbarcelona .
Para construir app-realmadrid.apk, ejecute mvn clean install -Prealmadrid .
Para construir otros 1000 apks, escriba shell script.

Android Maven Plugin proporciona muchas configuraciones que permiten un control preciso del proceso de compilación en cada fase / objetivo. Consulte la documentación del proyecto para obtener detalles completos.

Espero que tenga su derecho cuando asumiendo que está buscando más de una manera general de cómo hacerlo, a continuación, una lista real de los archivos que tiene que cambiar. Debido a que esto es algo que probablemente no vendrá a averiguarlo por sí mismo. (Aunque los proyectos de android están bien estructurados, podría ser suficiente para cambiar la carpeta res/ , asserts/ y el archivo android.manifest . Simplemente usé algo más en mis proyectos de Phonegap.

Así que mi arma de elección sería ramas git.
(Algunas palabras sobre git si aún no has oído hablar de ello.)

Dado el último commit representa su aplicación final. Desde aquí se puede forjar el proyecto para un lanzamiento (por ejemplo, Valencia CF). Asegúrese de que sólo cambia los recursos, pero nada en el programa principal! ¡Es importante que su rama de desarrollo principal siga siendo la versión más desarrollada!

Así que después de lanzar la segunda y tercera aplicación, es posible que desee hacer algunas correcciones de errores. Cambiará de nuevo a su rama de desarrollo y seguirá mejorando aún más su código. Golpear el próximo lanzamiento de nuevo rama de para todos los otros equipos que desea dar actualizaciones.
Así que usted tiene un par de ramas con la versión actualizada, pero los mismos recursos por un lado y las aplicaciones ya de estilo en su versión antigua.

Si usted tiene un cliente encantador del git usted podría escoger fácilmente los archivos que usted quiere a los cambios. Esto toma varía de fácil a wtf-MOAH-pcCra $ h tirar la computadora "si tienes muchos archivos individuales para fusionar pero no simplemente grandes carpetas + pocos archivos como res/ y android.manifest .

Otra posibilidad sería utilizar una función de git llamada cherry-pick . Nunca lo he usado, pero la descripción suena bastante como lo que quieres:

Dado uno o más compromisos existentes, aplique el cambio que cada uno introduce, registrando un nuevo commit para cada uno. Esto requiere que su árbol de trabajo esté limpio (sin modificaciones de HEAD commit).

(Aquí está el hilo de rosca tan rico donde lo he cogido que para arriba.)

Usted tiene su árbol de trabajo limpio ya que acaba de ramificar de su nueva versión para volver a aplicar el diseño de Valencia CF. Por lo tanto, la HEAD está limpia y puede seleccionar los commits de la antigua versión donde ya ha aplicado el diseño.
Muy probablemente algo ha cambiado de la antigua a la nueva versión que requiere actualizar los recursos. (Algunas vistas fueron pero otras se introdujo por ejemplo). Sin embargo, sólo seguir adelante y hacerlo, pero asegúrese de comprometer su resultado final, porque este compromiso será el cerezo para la mejor y mejor versión que ya ha comenzado a trabajar en su rama de desarrollo.

Aunque no está directamente relacionado con su pregunta, también le recomendaría leer un modelo de ramificación Git exitoso que le da otra idea de cómo puede utilizar las ramas a su favor.

De todos modos, no creo que sea la única solución posible, pero parece ser el método más conveniente. Puesto que toda la magia que usted hace está en la carpeta del proyecto usted puede apenas copiar y pegarlas y corregir la materia manualmente oa través de programas listos. Pero no estoy seguro de dónde están almacenados los archivos de proyecto de Eclipse y también copiarlos dejará que Eclipse se vuelva un poco extraño. (Mismo nombre de proyecto pero ruta de proyecto incorrecta, etc.). Crear nuevo proyecto Eclipse todas las veces también suena como un montón de trabajo para mí. Mientras que git coopera independientemente de su IDE (no es más que una carpeta extra en el proyecto.) Sólo puede cerrar Eclipse cambiar las ramas a través de git y volver a abrir el programa y tienes los cambios que aplicó. (Aceptar, puede que tenga que hacer clic derecho en el proyecto y pulsar actualizar … a la derecha.)

Como ya se enteró, un proyecto de Biblioteca Android compartida es lo que necesita. Desafortunadamente (como ya se mencionó) los assets sólo se heredan a los proyectos dependientes al construir una versión con el complemento de Android Maven .

En nuestro proyecto creamos una tarea de Ant, syncAssets.xml para desarrollador, que se construye a través de ADT fuera de eclipse, que reside en la carpeta base del proyecto de la Biblioteca de Android:

 <?xml version="1.0" encoding="UTF-8"?> <!-- This is an Ant build script to synchronize assets from Android library "pkonvert-base" because they are not included automatically by the ADT tools. See discussion at http://stackoverflow.com/questions/5889833/android-library-assets-folder-doesnt-get-copied and topic "Library projects cannot include raw assets" at http://developer.android.com/guide/developing/projects/index.html#considerations. The Maven build through the maven-android-plugin automatically includes dependent assets from referenced Android libraries, so this Ant script only has to be executed when the build is executed from within eclipse. --> <project name="syncAssets" default="syncAssets" basedir="."> <property name="sync.source.dir" value="${ant.file}/../assets" /> <property name="sync.target.dir" value="${basedir}/assets" /> <target name="syncAssets" description="Synchronize assets from Android library pkonvert-base"> <echo>Synchronizing assets from ${sync.source.dir} to ${sync.target.dir}</echo> <sync todir="${sync.target.dir}"> <fileset dir="${sync.source.dir}" includes="**" /> </sync> </target> <target name="clean" description="Clean up assets"> <delete dir="${sync.target.dir}" /> </target> </project> 

Esta tarea Ant sincroniza el contenido de los assets proyectos de biblioteca -folder en una carpeta de assets proyectos y se activa cada vez que se desencadena una nueva generación en Eclipse. Para agregar la ejecución de este script a su proyecto de Android goto Propiedades -> Constructores y crear un nuevo Ant Builder que tiene que ser el primero en la cadena de todos los constructores que se invocan (utilice el botón Arriba para mover el constructor Ant hacia arriba).

En Tab Main seleccione Buildfile ${workspace_loc:/<YOUR_LIBRARY_PROJECT>/syncAssets.xml} y el directorio base ${workspace_loc:/<YOUR_PROJECT>} .

En la ficha Actualizar, seleccione Actualizar recursos al finalizar y Recursos específicos y seleccione la carpeta del proyecto que desea actualizar. Además seleccione Recursivamente incluir subcarpetas .

En Objetivos de tabulación asegúrese de que el destino predeterminado se ejecute después de limpiar , en la compilación manual y en la compilación automática . El blanco limpio debe ser ejecutado durante la limpieza .

Usted podría colocar su código en un proyecto y crear un archivo jar. Que añadir este proyecto o tarro como una dependencia de sus proyectos de 'recursos cusomized'.

La fuente del complemento AppLaud Eclipse para PhoneGap está disponible aquí . El contenido inicial de los proyectos creados proviene de este directorio de recursos . Podrías modificar el contenido a lo que quieras y reconstruir el complemento. Dado que el código tiene la licencia EPL, tendrías que abrir el código fuente que has modificado.

  • Cómo detener la depuración en la aplicación de Android en Eclipse
  • Android.annotation no se puede resolver
  • ADT Eclipse / Android siempre construye / ejecuta en modo de depuración
  • No puedo confirmar un archivo de biblioteca .so utilizando subclipse
  • ¿Cómo llamar a un método cada vez que se está viendo una actividad?
  • Eclipse está intentando construir los archivos en mis directorios .svn ... ¿cómo puedo decirle que se detenga?
  • Proyecto no tiene archivo project.properties
  • Android Eclipse Support Library: Versión obligatoria en blanco
  • R.java no se está generando para el nuevo proyecto de Android
  • Eclipse
  • No se puede ejecutar dex debido a un espacio de montón de java en eclipse con una pequeña aplicación android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.