2012-05-08 16 views
17

He creado una versión gratuita de una aplicación de juego que ahora está en el mercado con un nombre como com.mycompany.myfreegame. Ahora quiero hacer una versión paga. Sin duda habrá ajustes y correcciones de errores en ambas versiones necesarias en los próximos años, así que quiero encapsular la codificación de la información gratuita contra la pagada de una manera tan compacta posible, de modo que esencialmente pueda corregir errores en ambas versiones simultáneamente.Cómo mantener una versión paga y gratuita de una aplicación

Si la totalidad de las diferencias entre las dos versiones se manejaron en tiempo de ejecución, entonces podría establecer un solo indicador en el código fuente y ese sería el final del problema. Desafortunadamente hay dos cosas más a considerar,

  1. El nombre del paquete debe ser diferente entre las dos versiones.
  2. Algunos xml deben ser diferentes. Por ejemplo, la versión gratuita necesita diseños lineales para alojar anuncios, la versión paga no.

¿Cuál es la forma más sencilla de lograr este objetivo?

+0

¿No sería más fácil manejar el estado de registro de la aplicación? Esto le permitiría tener un solo proyecto, y todo lo que tendría que hacer es simplemente "ocultar" los anuncios, si es la versión paga. –

+0

o utilizando 'en la compra de aplicaciones' del mercado? – Eonasdan

Respuesta

7

Creo que el primer enfoque que probaría es utilizar 3 proyectos en Eclipse: uno para cada versión del juego y un proyecto de biblioteca con todo el código compartido. El proyecto de la biblioteca sería donde irá todo el código del juego principal, y los proyectos específicos de la versión administrarán la carga de diferentes diseños, colocarán anuncios en la versión gratuita y agregarán niveles/características/sombreros a la versión paga.

Es posible que pueda cumplir su objetivo de una única base de código con un indicador de compilador utilizando una tarea ant, pero eso me supera.

+2

Esta es la solución a la que siempre he ido en el pasado. Aunque hoy en día, consideraría seriamente la compra de aplicaciones para actualizaciones. –

4

creo que lo que estás buscando es un proyecto de Biblioteca http://developer.android.com/guide/developing/projects/index.html#LibraryProjects

Desde esa página web:

If you are creating an application that exists in both free and paid versions. You move the part of the application that is common to both versions into a library project. The two dependent projects, with their different package names, will reference the library project and provide only the difference between the two application versions.

Otra pregunta, muy similar a éste, parece tener una discusión decente y respuesta: Multiple Apps with a shared code base

Editar: Aquí hay un enlace sobre cómo implementar un proyecto de biblioteca. http://developer.android.com/guide/developing/projects/projects-eclipse.html

En cuanto a las diferentes versiones que son ligeramente diferentes, un proyecto de biblioteca puede acomodar. El proyecto de la biblioteca se crea primero, luego el padre (el proyecto que usa la biblioteca) se construye por última vez y se fusionan. Ambos proyectos pueden definir los mismos identificadores de recursos y el proyecto construido al final (proyecto principal), obtiene prioridad (sobrescribe). Entonces, esencialmente, puede anular cadenas/diseños (posiblemente más, ¿no está seguro?) En la aplicación principal/de llamada.

Por ejemplo: supongamos que tiene dos proyectos, gratis y de pago. Puede crear una cadena con una implementación predeterminada (versión gratuita) y anularla en su versión paga (aplicación principal).

Código en el archivo de bibliotecas compartidas strings.xml:

<string name="AppName">My Application (Free)</string> 

Código de cuerdas de aplicaciones de padres.archivo xml:

<string name="AppName">My Application Premium</string> 
3

Me gustaría ir con Maven. Se puede definir un proyecto principal con tres sub-proyectos, dice:

  • Común
  • Pagados
  • gratuito

Maven permite tener diferentes archivos de configuración, si bien tienen la misma base de código. Por ejemplo, actualmente tengo un proyecto donde se usan dos bases de datos, por lo que todos los archivos de configuración de la aplicación permanecen en un proyecto común, donde las clases y los archivos de configuración de la base de datos permanecen en cada carpeta del proyecto. Cuando hago una compilación en el padre, se construyen todos los proyectos hijos, se pasan las pruebas de unidades, etc.

Además, esta es solo una de las mil ventajas de maven!

EDIT: Me acabo de enterar, tiene una android-plugin de experto, con características interesantes también

+1

+1 - Utilizo Maven para administrar los pasos de compilación y la administración de dependencias de mis aplicaciones de Android ... al principio fue un poco más difícil de configurar, pero funciona muy bien ahora que lo tengo todo configurado. –

1

puede ser la mejor manera ahora es utilizar Android Estudio + Gradle. Este caso permite compilar versiones pagas y gratuitas con un comando en la consola. Más detalles están en esta publicación: https://stackoverflow.com/a/17286142/1705370

+0

Como alguien que ha hecho esto, la integración de Gradle en Android Studio (¡especialmente la versión de Mac OS!) Es escamosa, poco fiable y LEJOS, LEJOS, LEJOS de la calidad Beta. No lo uses todavía Llegará allí, pero aún no está allí. – Delyan

+0

Sí, todavía hay muchos errores, pero es posible usarlo en producción. – galex

+0

Por ejemplo, Android Studio se ha utilizado con éxito en la producción con nuestro producto [Glextor AppManager] (http://glextor.com/products/appmanager/). El producto se comercializa como pagado, gratis y en algunas versiones de socios en un solo paso con Gradle. Pero tuvimos que usar plantillas de mensuario y algunos archivos java para ello. – galex

Cuestiones relacionadas