underground appstore app android ant build amazon-appstore

android - appstore - amazon underground apk 2018



¿Administrar código/compilar para las tiendas de aplicaciones de Android(Google/Amazon/etc)? (4)

Desafortunadamente, es una especie de convención en Android para cambiar el flujo en el tiempo de ejecución en función de lo que sería en C / C ++: compilación condicional de la tierra.

Nuestra aplicación debe mantener un comportamiento diferente para diferentes niveles de API, por lo que hemos creado algunas constantes de nivel de aplicación que se inicializan de forma estática en función de la información de nivel de API disponible para nosotros y se utilizan en todo el código. Esta es la forma en que Google hace las cosas en sus ejemplos (por ejemplo, consulte la biblioteca de compatibilidad de ActionBarCompat y, en particular, el método de fábrica utilizado here ).

Puede crear una interfaz CustomBuild e implementarla en AmazonBuild y GooglePlayBuild, luego usar un método estático getBuild () para cambiar la funcionalidad según sea necesario:

if(getBuild().shouldEnableFeatureX()){ doStuff(); } else { doDifferentStuff(); }

Entonces, todo lo que tiene que preocuparse por cambiar entre las compilaciones es una línea o dos de código en la fábrica junto con el mantenimiento de qué cosas desea habilitar en qué versiones. O puede incluir una versión diferente de una clase estática CustomBuild para cada compilación.

Voy a secundar la sugerencia de otros por encima de re: cambiar a algo como Maven para construir; debería hacer su vida mucho más fácil una vez que la haya configurado.

También voy a decir que debe hacer del núcleo de la aplicación una biblioteca como se sugirió anteriormente, y tener dos módulos diferentes (uno para Amazon, uno para Play Store) que dependen de la biblioteca pero que cada uno solo contiene un archivo de fábrica personalizado. (o simplemente una clase estática para cada tipo de compilación que contenga los mismos métodos "¿debería hacer esto?" ... una vez que tenga la infraestructura, es solo una cuestión de preferencia).

Tengo una aplicación para Android que se descarga principalmente desde Android Market (ahora, Google Play). Hicimos algunos ajustes a la fuente y también los enviamos a Amazon App Store para ver qué tipo de tracción recibe. Ahora estoy buscando una forma sostenible de desarrollar a partir de una base de código común y, sin embargo, construir para que pueda enviarme a ambos.

La tienda de Amazon tiene algunas restricciones sobre las API disponibles y, por lo tanto, me gustaría eliminar / modificar de forma condicional las características de esa versión. Como Java no es compatible con la compilación condicional tradicional, y la inclusión condicional de archivos en Eclipse no parece trivial (¿es posible?), Quería preguntar qué hacen los demás para resolver esto.

Es cierto que no soy un experto en Eclipse / Java, así que siéntete libre de enseñarme.

Lo que busco en una solución:

  • Construcción / depuración utilizando Eclipse.
  • Archivos de código estático, con entorno / configuración para controlar qué compilar.
  • No hay código duplicado o lógica condicional en el código para elegir el flujo de código en tiempo de ejecución

¿Es esto algo que haya resuelto para aplicaciones de Android específicamente, o para otros proyectos basados ​​en Java / Eclipse? ¿Sugerencias para dónde empezar?


En realidad no lo he intentado todavía, pero es algo en lo que he pensado.

¿Qué hay de usar la capacidad de Eclipse para enlazar a archivos desde un directorio fuera de su área de trabajo?

Comience con un proyecto de Eclipse: por el bien de la discusión, digamos que es la versión de Google Play.

Ahora cree un segundo proyecto, comenzando con pedirle a Eclipse que vincule (no copie) los archivos de origen de su primer proyecto.

Para desarrollar el segundo proyecto, agregue clases que sean subclases del proyecto original para realizar sus modificaciones. Para los recursos, puede usar una combinación de inclusión, anulaciones de atributos y selectores.

Donde no es posible subclasificar o extender, obviamente, solo tendrá que copiar el archivo fuente original y piratearlo. Si realmente estás OCD al respecto, probablemente puedas mantener un conjunto de parches en lugar de un conjunto redundante de archivos.

¿Qué piensas, funcionará?


Es bastante fácil hacerlo en las versiones más nuevas de ADT (versión 17), aunque encuentro que hace que la compilación sea un poco más larga:

  1. Crear un nuevo proyecto de Android ( proj-A )
  2. Vaya a Proyecto-> Propiedades, seleccione Android y marque "Es biblioteca"
  3. Mueva todo su código común a proj-A , importe todas las bibliotecas necesarias
  4. Crear un nuevo proyecto de Android para Google Play ( proj-B )
  5. Vaya a Proyecto-> Propiedades, seleccione Android y agregue Proj-A a la biblioteca
  6. Repita # 4 y 5 para la versión de Amazon

Si tiene algunas variables que deberían configurarse de manera diferente para cada subproyecto (es decir, GOOGLE_PLAY_VERSION booleano para habilitar funciones específicas de Google Play), debe crear otro proyecto para contener estos valores, ya que no puede tener proyectos que se hagan referencia uno a otro en un moda circular Puedes resolver esto agregando los siguientes pasos:

  1. Coloque todas las variables específicas de su subproyecto en una o más Clases que solo sirven como contenedores para estas variables
  2. Crear un proyecto Java "ficticio" ( ficticio )
  3. Config. Proj-A para agregar un nuevo enlace de origen al directorio bin de dummy
  4. Agregue las clases de configuración en cada subproyecto con cambios específicos del proyecto
  5. Beneficios

Tenga en cuenta que las variables en el dummy no deben establecerse como finales, de lo contrario, anulará la configuración del subproyecto.

Esto puede parecer un poco de trabajo inicial, pero me ha funcionado bastante bien en lo que respecta al control de versiones.

Edición: Ahora, con el movimiento de Google a Android Studio y Gradle, puede ser mejor pasar a eso si está iniciando un nuevo proyecto si desea admitir múltiples APK, vea Cómo construir su proyecto con Android de Gradle # Trabaje con variantes de compilación . Definitivamente no hace daño evaluar esa opción antes de decidir.


Puede crear manualmente dos proyectos en Eclipse que apunten a las mismas carpetas de origen pero con diferentes filtros de inclusión / exclusión y diferentes directorios de destino.

Luego, dos objetivos Ant que usan propiedades para cambiar los archivos excluidos del conjunto de archivos javac son suficientes para generar los archivos jar correspondientes.

El objetivo es obtener una aplicación limpia para cada objetivo, sin ningún código del otro.

Con las características enumeradas como comportamientos conectables en un archivo de propiedades o configuración XML, su tiempo de ejecución se adaptará con la adición de entradas de menú.