2012-04-13 7 views
6

en primer lugar tengo que decir que no soy muy bueno con Inglés, así que lo siento si me puedo explicar muy bien lo que quiero decir :)Eclipse: proyecto múltiple a partir de una sola fuente

que tienen 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 clases/paquetes.

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

¿Es posible? Lo mejor es tener también un sistema para enviar cambios de fuente desde el proyecto principal a los hijos, pero no es obligatorio.

Lo siento nuevamente por mi inglés.

EDIT:

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

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

imagine que ha desarrollado una aplicación android con eclipse y phonegap, para un equipo de fútbol, ​​ejemplo Barcelona.

La aplicación es principalmente en html + jquery mobile, pero se han modificado la actividad, el manifiesto androide, añadido algunos plugins PhoneGap, algunos recursos de medios, etc.

Ahora usted tiene que replicar esta aplicación para más equipos, muchos equipos Para todos, debes crear un nuevo proyecto de fajo telefónico, modificar cada archivo, agregar los complementos, agregar los activos ... esas tareas no pueden estar libres de errores.

Pero el gran problema es: si solo tiene una pequeña actualización en su código, ¿cómo puede replicarlo en más de 10/20/50/100/1000 proyectos?

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

Lo siento nuevamente por mi inglés.

EDITAR N ° 2

Soy el mejor jugador con el plugin androide experto desde hace más de una semana, sin éxito. Lo que necesito es un código centralizado en el que pueda cambiar la aplicación y el nombre del paquete, los íconos y solo algunos pequeños archivos de configuración.

Android libs no es una solución, porque no puede exportar archivos de activos.

empecé una recompensa por esta cuestión en busca de una respuesta detallada ... por favor ayuda :(

+0

probablemente he encontrado la solución. http://stackoverflow.com/questions/8077042/building-many-similar-android-apk-files-at-the-same-time – Laphroaig

+0

¿Estás éxito a utilizar experta en construir uno de su proyecto PhoneGap hasta el momento ? – yorkw

Respuesta

0

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

+0

sí, esta es una solución para un proyecto estándar de Java. pero mi es un proyecto de android/phonegap que compilará un archivo apk ... actualizaré mi primera publicación. ¡gracias de todos modos! – Laphroaig

3

Espero que haya acertado cuando suponga que está buscando más una manera general de cómo hacerlo, luego una lista real de los archivos que debe cambiar. Porque esto es algo que ' Probablemente no llegue a descubrirlo tú solo.(Aunque los proyectos de Android están bien estructurados que podría ser suficiente con sólo cambiar el res/, asserts/ carpeta y el archivo android.manifest. Simplemente utiliza nada más en mis proyectos PhoneGap.

ramas Así que mi arma de elección sería GIT.
(Some words about git if you've not already heard about it.)

Dado que la última confirmación representa su aplicación finalizada, desde aquí puede bifurcar el proyecto para una versión (por ejemplo, Valencia CF). Asegúrese de que solo cambia los recursos pero nada en el programa principal. principal rama de desarrollo sigue siendo la versión más desarrollada!

Entonces, después de liberar la segunda y la tercera aplicación, es posible que desee corregir algunos errores. Volverás a cambiar a tu rama de desarrollo y continuarás mejorando tu código. Al golpear el próximo lanzamiento volverás a la rama de todos los otros equipos que quieras para darles actualizaciones.
Así que tiene un par de ramas con la versión actualizada pero los mismos recursos, por un lado, y las aplicaciones ya diseñadas, todas en su versión anterior.

Si tiene un encantador cliente de git, puede elegir fácilmente los archivos que desea cambiar. Esto lleva varía de fácil a "wtf-MOAH-pcCra $ h tirando a la computadora" si tiene una gran cantidad de archivos individuales para fusionar, pero no simplemente grandes carpetas + pocos archivos como res/ y android.manifest.

Otra posibilidad sería usar una función de git llamada cherry-pick. Nunca he usado, pero la descripción suena muy parecido a lo que quiere:

Teniendo en cuenta uno o más confirmaciones existentes, aplicar el cambio de cada uno introduce, la grabación de un nuevo commit para cada uno. Esto requiere que su árbol de trabajo esté limpio (sin modificaciones del compromiso HEAD).

(Aquí está la rica SO thread donde he recogido que se levanta.)

Usted tiene su árbol de trabajo limpio ya que sólo ramificada de su nueva versión para volver a aplicar el diseño Valencia. Por lo tanto, HEAD está limpio y puede elegir cuidadosamente las confirmaciones de la versión anterior donde ya ha aplicado el diseño.
Muy probablemente algo ha cambiado desde la versión anterior a la nueva que requiere actualizar los recursos. (Algunos puntos de vista fueron pero otros se introdujeron, por ejemplo). Sin embargo, solo hazlo y asegúrate de comprometer tu resultado final porque este compromiso será la mejor opción para la versión aún mejor y más grande en la que ya has empezado a trabajar en tu sucursal en desarrollo.

Aunque no está directamente relacionado con su pregunta, yo también recomendaría leer A successful Git branching model que le da otra idea de cómo puede usar 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. Como toda la magia que haces está en la carpeta del proyecto, puedes copiarla, pegarla y editarla manualmente o mediante programas inteligentes. Pero no estoy seguro de dónde se almacenan los archivos del proyecto Eclipse y también copiarlos probablemente dejará a Eclipse enloquecer un poco. (Mismo nombre de proyecto pero ruta de proyecto incorrecta, etc.). Crear un nuevo proyecto de Eclipse todo el tiempo también me parece mucho trabajo. Mientras que git coopera independientemente de su IDE (no es más que una carpeta adicional en el proyecto.) simplemente puede cerrar Eclipse cambiar las ramas a través de Git y volver a abrir el programa y usted tiene los cambios que ha aplicado. (OK, puede que tenga que hacer clic derecho en el proyecto y presionar actualizar ... derecha)

7

Desde la perspectiva del mantenimiento, no consideraría replicar 1000 proyectos basados ​​en la misma base de código. Utilizaría un solo proyecto para administrar recursos específicos del cliente y cambiar el recurso requerido en la fase de construcción del proyecto. En otras palabras, 1 proyecto para construir 1000 apk, no 1000 proyectos para compilar 1000 apk.

En base a los detalles que ha dado en la pregunta, la dirección correcta (hasta donde puedo ver) para resolver este tipo de escenario de uso (compilar varias aplicaciones desde una única base de origen) es adoptar herramientas de compilación externa como Ant o Maven dominan el proceso de compilación (ambos proporcionan la capacidad de controlar en cada paso, es decir, compilar, dex, paquete, etc. durante todo el ciclo de vida de compilación) y tal vez escribir un script de shell para la creación de lotes si es necesario.

No soy divertido con PhoneGap pero echo un vistazo rápido a su Get Started Guide, según tengo entendido, es simplemente otra pila de capas de programación encima de Android SDK, para proporcionar la capacidad de escribir aplicaciones móviles utilizando principalmente programación web idioma (HTML, CSS, Javascript), la aplicación aún conserva el esqueleto original del proyecto, por lo que no esperaría demasiado problema para escribir el script Ant/Maven para compilar la aplicación PhoneGap.

Una vez que haya creado con éxito su aplicación PhoneGap por Maven. Puede comenzar a investigar cómo resolver su situación, he visto un tipo similar de escenario antes en StackOverflow, consulte this thread y this thread para obtener un estudio de caso. Puede iniciar un proyecto de prueba de concepto para el estudio de viabilidad.

He publicado algunos ejemplos de código que muestran cómo Maven logra esto, ver a continuación.

Muestra la estructura de directorios del proyecto:

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

Muestra 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 compilar app-realmadrid.apk, ejecute mvn clean install -Prealmadrid.
Para compilar otros 1000 apks, escriba el script de shell.

Android Maven Plugin proporciona muchas configuraciones que le permiten controlar el proceso de compilación en cada fase/objetivo. Consulte Project Documentation para más detalles.

0

La fuente del complemento AppLaud Eclipse para PhoneGap está disponible here. Los contenidos iniciales de los proyectos creados provienen de este resources directory. Puede modificar los contenidos a lo que desee y luego reconstruir el complemento. Como el código tiene la licencia EPL, debe abrir todo lo que modificó.

3

Como ya descubrió, un Android Library project compartido es lo que necesita. Lamentablemente (como ya lo mencionó) assets solo se heredan de los proyectos dependientes cuando se crea una versión con el Android Maven Plugin.

En nuestro proyecto hemos creado una tarea Ant syncAssets.xml para el desarrollador construye a través de ADT de eclipse, que reside en la carpeta base del proyecto de 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 la biblioteca proyectos assets -carpeta en un proyecto assets -carpeta y se activa cada vez que se activa una nueva compilación en Eclipse. Para añadir ejecución de este script a su Goto proyecto Android Propiedades ->Constructores y crear un nuevo Ant Constructor que tiene que ser el primero en la cadena de todos los constructores que se invoca (utilizar Hasta botón para mueve el constructor Ant hacia arriba).

En la pestaña Principal seleccione Buildfile ${workspace_loc:/<YOUR_LIBRARY_PROJECT>/syncAssets.xml} y Base directory ${workspace_loc:/<YOUR_PROJECT>}.

en la pestaña Actualizar seleccionar recursos Actualizar una vez completado y recursos específicos y elija su carpeta de proyectos para ser renovado. Además, seleccione Incluya recursivamente las subcarpetas.

En Tab Objetivos asegurar que el destino predeterminado es ejecutado después de la limpieza , en manual de construcción y el automóvil construir. La limpieza de destino debe ejecutarse durante limpiar.

Cuestiones relacionadas