Pregunta

¿Es posible tener una compilación binaria de aplicación para múltiples dispositivos móviles (en ELABORAR CERVEZA plataforma), en lugar de crear una compilación separada para cada dispositivo utilizando un script de compilación con compilación condicional.

En particular, ¿es posible utilizar una única compilación de aplicación BREW para múltiples resoluciones de pantalla?

Tenga en cuenta que el objetivo es tener un único binario construir.Si fuera solo para tener una única base de código, la compilación condicional y el script de compilación inteligente serían suficientes.

¿Fue útil?

Solución

Sí, es posible, pudimos hacerlo en mi lugar de trabajo anterior.Sin embargo, lo que se requiere es complicado:

  1. Compile para obtener la versión BREW con el mínimo común denominador.La versión 1.1 es la base para todos los teléfonos actuales que existen.
  2. Su código debe poder manejar múltiples resoluciones.Según mi experiencia, los métodos para detectar el ancho y el alto de la pantalla son precisos para todos los teléfonos.
  3. Todos sus recursos deben cargarse en todos los dispositivos.Esto requeriría crear su propio cargador de imágenes personalizado para solucionar ciertos problemas del dispositivo.Para el sonido, sé que el MIDI tipo 0 simple funciona en todos, pero QCP también debería funcionar (no tengo experiencia en ello).
  4. Utilice fuentes de mapa de bits.Hay demasiados problemas del dispositivo con las fuentes como para que valga la pena utilizar las fuentes del sistema.
  5. Diseñe la estructura de su código como una máquina de estados finitos.No puedo enfatizar esto lo suficiente: haga esto y muchos, muchos problemas nunca se materializarán.
  6. Tenga soluciones para cada problema de dispositivo.¡Esta es la parte difícil!Es posible, pero esta madriguera de conejo es increíblemente profunda...

Al final, cuanto más compleja y avanzada sea la aplicación, es menos probable que puedas seguir este camino.Algunas propiedades del dispositivo simplemente no se pueden detectar de manera confiable en tiempo de ejecución (como la ID de la plataforma), por lo que se requieren varias compilaciones.

Otros consejos

Escribí una conversión de J2ME a Brew que se utiliza en Javaground.Es muy posible escribir código binario único de resolución múltiple.Tenemos una base de datos de errores de dispositivos para que pueda detectar el dispositivo a través de la identificación de la plataforma y luego generar una serie de indicadores que marcan qué errores están etiquetados.Por ejemplo, la mayoría (si no todos) de los teléfonos Motorola Brew tienen un error en el que una llamada entrante no interrumpe la aplicación hasta que usted contesta la llamada, por lo que uso TAPI para monitorear una llamada entrante y generar un evento hideNotify (ya que estamos emulando Java, aunque el código generado es puro C++).Hago algunas comprobaciones en tiempo de ejecución para la versión de Brew y desactivo ciertas API si es Brew 2 en lugar de Brew 3.

Es más fácil hacer que los juegos de tipo 3D sean independientes de la resolución, ya que se escalan en el software.

También hay 2 API independientes para sonido, IMEDIA e ISOUNDPLAYER. ISOUNDPLAYER es la API más antigua y es compatible con todos los dispositivos, pero no tiene tantas funciones (solo puedes reproducir audio multicanal usando IMEDIA).Creo un objeto IMEDIA y recurrirá para crear un objeto ISOUNDPLAYER si no puede obtener el objeto IMEDIA.

El problema con una compilación totalmente universal es que hay una gran diferencia en la capacidad, por lo que puede valer la pena tener algunas compilaciones, los dispositivos más antiguos solo tienen menos de 1 MB de almacenamiento dinámico (y un tamaño de pantalla pequeño), y luego obtienes mucho. con 6 MB+ (176x204 a mayor).

Con Brew tienes un conjunto bastante consistente de valores clave (a diferencia de Java), aunque algunos de los nuevos dispositivos son pantallas táctiles (y tienes que manejar la entrada del puntero) y pantallas giratorias.

También hay algunos teléfonos Nokia antiguos que usan el modo big endian, lo que significa que los archivos no son los mismos que los archivos mod normales (A MENOS que quieras escribir un encabezado de prefijo en lenguaje ensamblador REALMENTE interesante que decodifique el archivo).

Otra idea podría ser dividir los teléfonos en 2 a 4 categorías según, por ejemplo, las dimensiones de la pantalla y crear compilaciones para ellos.También es una ruta mucho más rápida, ya que podrá admitir todos los teléfonos que desee con una complejidad mucho menor.

Otra cosa que hay que ver son las versiones de BREW en los teléfonos en los que desea iniciar.Si, por ejemplo, BREW 1.1 está en un teléfono y pertenece a un pequeño porcentaje de su mercado objetivo, no tiene sentido trabajar para respaldarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top