Con la API genérica suministrada por NeoMAD se requiere un código único para desarrollar sus aplicaciones móviles nativas gracias a un marco de desarrollo multi-plataformas. Para el código fuente, la gestión del ciclo de vida del interfaz usuario, se utiliza una API única para todos los equipamientos que desea tener en cuenta.
La API Genérica de NeoMAD cubre totalmente las funcionalidades siguientes:
NeoMAD dispone de un mecanismo de layout avanzado para definir interfaces usuario optimizadas para cada plataforma y para cada formato.
Elija la solución que más le conviene para describir sus interfaces usuario. NeoMAD le permite separar simplemente el UI del código fuente describiendo sus interfaces en ficheros separados xml.
A fin de comenzar a utilizar NeoMAD lo más rápidamente posible, le suministramos una versión de NeoMAD lista para su utilización, pre-preparada con Eclipse. Asimismo, usted puede conservar su marco de trabajo existente descargando por separado NeoMAD y su plugin para Eclipse.
El plugin NeoMAD para Eclipse ofrece también una función de depurador para las plataformas java. Coloque sus puntos de parada directamente en su código NeoMAD y pilote los depuradores Android, Java Me o BlackBerry desde Eclipse. También tiene la posibilidad de depurar las otras plataformas generando los proyectos nativos y abriéndolos en sus editores respectivos.
Si está acostumbrado a utilizar otro entorno de desarrollo: NeoMAD también es una herramienta de mando en línea y por lo tanto se integra fácilmente en los demás IDE del mercado.
NeoMAD le propone un mecanismo avanzado para ampliar sus funcionalidades. Puede embarcar en sus proyectos de códigos nativos, Java, (para Android, BlackberryOS y Java ME), C# (Windows Phone, Windows 8) y Objective-C (iOS), que se tratará por la cadena de compilación NeoMAD.
El siguiente ejemplo ilustra esta funcionalidad
package com.neomades.specific;
public class BrowserTask {
public void openURL(String url) {
}
}
A fin de poder acceder de manera nativa a los diferentes componentes de cada objetivo y de permitir a la cadena de compilación de NeoMAD recuperar las fuentes escritas en código nativo, basta con declarar en su proyecto una clase particular y definir los métodos que más adelante se han de implementar.
NeoMAD proporciona un asistente que permite generar automáticamente las implementaciones vacías correspondientes.
*El ejemplo que aquí presentamos permite cargar una url en el navegador nativo de cada plataforma. Esta función ya está disponible en NeoMAD y aquí solo se presenta para la demostración.
El código siguiente corresponde a la implementación del método open URL() para las plataformas
Windows Phone y Windows 8.
using Microsoft.Phone.Tasks;
using System;
using System.Text;
using java.lang;
namespace com.neomades.specific {
public class BrowserTask {
public void openURL(String url) {
WebBrowserTask task = new WebBrowserTask();
task.Uri = new Uri(url);
task.Show();
}
}
}
El código siguiente corresponde a la implementación del método open URL() para las plataformas iOS.
#import
@implementation com_neomades_specific_BrowserTask
- (void) openURL___java_lang_String:(java_lang_String*)url {
[[UIApplication sharedApplication] openURL:[[NSURL alloc] initWithString:url]];
}
@end
Implementación Java
El código siguiente corresponde a la implementación del método open URL() para las plataformas Android.
package com.neomades.specific;
import com.neomades.app.Application;
import android.content.Intent;
import android.net.Uri;
public class BrowserTask {
public void openURL(String url) {
Intent browserIntent = new Intent(Intent.ACTION_DEFAULT, Uri.parse(url));
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Application.getCurrent().startActivity(browserIntent);
}
}
Un potente mecanismo de condicionamiento y de clonaje
Cada proyecto NeoMAD es descrito por un fichero xml particular: el URS. Es este fichero URS el que permite definir los parámetros de la aplicación, (nombre, autor, número de versión, fuentes, permisos…).
Cada proyecto NeoMAD posee igualmente un fichero de constantes llamado Constants.java que permite modificar el comportamiento de su proyecto con respecto a la compilación o bien a la ejecución.
La combinación de estos dos ficheros ofrece una gran flexibilidad que de este modo permite crear binarios diferentes a partir de un mismo proyecto, (clonaje).
En este ejemplo definimos una aplicación cuyo nombre e identificación serán definidos en la compilación de los binarios.
<?xml version="1.0"?>
<urs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.neomades.com/XSD/0.0.0/urs.xsd">
<parameters>
<mainclassname>HelloWorld</mainclassname>
<applicationname>${APP_NAME}</applicationname>
<vendor>Neomades</vendor>
<description>HelloClonedWord application example.</description>
<packagename>com.neomades.helloworld</packagename>
<applicationidentifier>com.neomades.${APP_ID}</applicationidentifier>
<version>1.0.0</version>
<srcpath>src</srcpath>
<outputpath>out</outputpath>
</parameters>
<strings path="res/strings.csv" />
</urs>
En este fichero de constantes, declaramos variables que serán interpretadas en la compilación de los binarios en función de los parámetros de compilación.
En nuestro caso, estas variables permiten modificar el color de fondo de nuestra aplicación así como su nombre y su identificador.
Entonces, basta con especificar los buenos parámetros en la compilación para crear 3 binarios diferentes a partir de un único proyecto.
package com.neomades.helloworld;
import com.neomades.mad.TargetInfo;
public class Constants implements TargetInfo {
/*************************************************************************/
/** Let's define some resources for our application */
/*************************************************************************/
/* Application background color **/
public static int MAIN_SCREEN_BACKGROUND_COLOR;
/* Application identifier **/
public static String APP_ID;
/* Application name **/
public static String APP_NAME;
/*************************************************************************/
/** Let's compute the resource's values given command line defines */
/*************************************************************************/
/* When specified with -d option, sets the application "red" or "green
* Default is "blue" **/
public static boolean RED = false;
public static boolean GREEN = false;
/* The static block allows us to compute values of static variables **/
static{
if (GREEN){
MAIN_SCREEN_BACKGROUND_COLOR = 0x3c7b5c;
RES_FOLDER = "green";
APP_ID = "hellogreenworld";
APP_NAME = "HelloGreenWorld";
}
else if (RED){
MAIN_SCREEN_BACKGROUND_COLOR = 0xb90000;
RES_FOLDER = "red";
APP_ID = "helloredworld";
APP_NAME = "HelloRedWorld";
}
else{
MAIN_SCREEN_BACKGROUND_COLOR = 0x146da7;
RES_FOLDER = "blue";
APP_ID = "helloblueworld";
APP_NAME = "HelloBlueWorld";
}
}
/*************************************************************************/
}