{"id":217,"date":"2013-03-11T16:38:56","date_gmt":"2013-03-11T16:38:56","guid":{"rendered":"http:\/\/multimedia.uoc.edu\/blogs\/fem\/?p=217"},"modified":"2013-08-28T07:21:55","modified_gmt":"2013-08-28T07:21:55","slug":"alternativas-en-la-programacion-para-dispositivos-moviles","status":"publish","type":"post","link":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/alternativas-en-la-programacion-para-dispositivos-moviles\/","title":{"rendered":"Alternativas en la programaci\u00f3n para dispositivos m\u00f3viles"},"content":{"rendered":"<p>Uno de los \u00e1mbitos multimedia con m\u00e1s crecimiento en los \u00faltimos a\u00f1os ha sido el de los dispositivos m\u00f3viles. La llegada de los <i>smartphones<\/i> dispar\u00f3 en su momento la creaci\u00f3n de aplicaciones m\u00f3viles que aprovechan la capacidad multimedia de estos dispositivos. La aparici\u00f3n y el despegue poco despu\u00e9s de las tabletas ha convertido el desarrollo de aplicaciones para dispositivos m\u00f3viles en un pilar de la industria multimedia.<\/p>\n<p>El multimedia siempre ha sido un entorno con mucha relaci\u00f3n con la programaci\u00f3n. Cuando un elemento se mueve en nuestras pantallas, cuando se interacciona con el usuario, cuando se reproduce un sonido tras un determinado evento, unas cuantas l\u00edneas de c\u00f3digo se est\u00e1n ejecutando para generar esa situaci\u00f3n. Si bien con Flash se pueden simular algunos movimientos y algunas interacciones sin programaci\u00f3n, en los dispositivos m\u00f3viles es dif\u00edcil imaginarse una aplicaci\u00f3n multimedia que no tenga un importante componente de programaci\u00f3n detr\u00e1s.<\/p>\n<p>Pero la programaci\u00f3n en cada sistema operativo es un peque\u00f1o mundo. Existen lenguajes o <a href=\"http:\/\/es.wikipedia.org\/wiki\/Framework\"><i>frameworks<\/i><\/a> que nos permiten la creaci\u00f3n de programas multidispositivo (se programa una vez y se ejecuta en cualquier dispositivo), pero para aplicaciones complejas que requieren un gran rendimiento, la programaci\u00f3n suele hacerse en los lenguajes nativos de cada sistema operativo, con lo que debe reescribirse la aplicaci\u00f3n para cada sistema operativo.<\/p>\n<p>Hoy en d\u00eda, podemos encontrar dispositivos m\u00f3viles con, principalmente, los siguientes sistemas operativos. Entre par\u00e9ntesis incluimos los porcentajes sobre el <a href=\"http:\/\/www.gartner.com\/newsroom\/id\/2237315\">total de unidades vendidas en el tercer trimestre del 2012<\/a> (solo incluye tel\u00e9fonos, no incluye tabletas):<\/p>\n<ul>\n<li><a href=\"http:\/\/www.android.com\">Android<\/a> (72,4%)<\/li>\n<li><a href=\"http:\/\/www.apple.com\/es\/ios\">iOS<\/a> (13,9%)<\/li>\n<li><a href=\"http:\/\/es.blackberry.com\/software\/smartphones\/blackberry-7-os.html\">Blackberry OS<\/a> (5,3%)\u2013 Blackberry Playbook OS (RIM)<\/li>\n<li><a href=\"http:\/\/www.bada.com\/\">Bada<\/a> (Samsung) (3%)<\/li>\n<li><a href=\"http:\/\/symbian.nokia.com\">Symbian<\/a> (Nokia) (2,6%)<\/li>\n<li><a href=\"http:\/\/www.windowsphone.com\/es-es\">Windows Phone<\/a> (2,4%)<\/li>\n<li>Otros<\/li>\n<\/ul>\n<figure style=\"width: 792px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/en.wikipedia.org\/wiki\/Mobile_operating_system\"><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"http:\/\/upload.wikimedia.org\/wikipedia\/commons\/a\/ac\/World_Wide_Smartphone_Sales_Share.png\" width=\"792\" height=\"541\" \/><\/a><figcaption class=\"wp-caption-text\">Evoluci\u00f3n en las ventas de dispositivos m\u00f3viles, seg\u00fan los sistemas operativos. http:\/\/en.wikipedia.org\/wiki\/Mobile_operating_system<\/figcaption><\/figure>\n<p>Para cada uno de esos sistemas operativos hay uno o varios <a href=\"http:\/\/es.wikipedia.org\/wiki\/Kit_de_desarrollo_de_software\">SDK<\/a> (kit de desarrollo de software) con soporte para uno o m\u00e1s lenguajes de programaci\u00f3n. As\u00ed, <a href=\"http:\/\/developer.android.com\/sdk\/index.html\">Android tiene un SDK para Java<\/a>, <a href=\"http:\/\/cocoadevcentral.com\/d\/learn_objectivec\/\">iOS uno para Objective-C<\/a>, <a href=\"http:\/\/developer.bada.com\/devtools\/sdk#\">Bada uno para C++<\/a>, <a href=\"http:\/\/www.developer.nokia.com\/info\/sw.nokia.com\/id\/ec866fab-4b76-49f6-b5a5-af0631419e9c\/S60_All_in_One_SDKs.html\">Symbian tiene SDK para dos lenguajes diferentes (C++ y Java)<\/a> y <a href=\"https:\/\/developer.blackberry.com\/develop\/platform_choice\/ndk.html\">BlackBerry ofrece SDK para C++<\/a> (aunque da soporte a <a href=\"https:\/\/developer.blackberry.com\/develop\/platform_choice\/index.html\">m\u00faltiples lenguajes y plataformas<\/a>).<\/p>\n<p>Para una persona o empresa peque\u00f1a que quiera programar una aplicaci\u00f3n para la mayor\u00eda de dispositivos que hay en el mercado, esta disparidad de lenguajes y kits de desarrollo complica considerablemente la creaci\u00f3n multidispositivo. La soluci\u00f3n pasa a veces por centrarse en un solo sistema operativo (en especial en el caso de los desarrolladores que trabajan por su cuenta) o bien usar alguna de las alternativas que ofrecen la posibilidad de crear aplicaciones multidispositivo como, por ejemplo, Phonegap, Appcelerator, Corona SDK y Adobe AIR.<\/p>\n<h2>Phonegap<\/h2>\n<p><a href=\"http:\/\/phonegap.com\/\">Phonegap<\/a> es posiblemente la alternativa m\u00e1s conocida, es de c\u00f3digo libre (l<a href=\"http:\/\/www.apache.org\/licenses\/LICENSE-2.0\">icencia Apache 2.0<\/a>) y permite crear aplicaciones para Android, iOS, RIM, Bada, Windows Phone, Symbian y otros. Usa HTML5 + CSS + JavaScript para el desarrollo, con lo cual el resultado es como un conjunto de p\u00e1ginas web empaquetadas que funcionan sobre un navegador. Es una buena opci\u00f3n para desarrolladores con una buena base de JavaScript, aunque, para conseguir que el aspecto sea el de una aplicaci\u00f3n m\u00f3vil (en vez del de una p\u00e1gina web), ser\u00e1 conveniente usar <i>frameworks<\/i> como <a href=\"http:\/\/jquerymobile.com\/\">jQuery mobile<\/a> o <a href=\"http:\/\/www.jqtouch.com\/\">jQTouch<\/a> (<i>plugin<\/i> para jQuery) que facilitan hacer que aplicaciones web tengan aspecto de aplicaciones m\u00f3viles.<\/p>\n<p>Las aplicaciones creadas con Phonegap se ejecutan sobre el motor del navegador de los dispositivos m\u00f3viles. Dependiendo del sistema operativo tienen acceso a todas o a <a href=\"http:\/\/phonegap.com\/about\/feature\/\">casi todas las funciones del dispositivo<\/a> (c\u00e1mara, GPS, aceler\u00f3metro, por ejemplo) y tambi\u00e9n al DOM, con lo que permiten el uso de <i>frameworks<\/i> como jQuery que faciliten la programaci\u00f3n.<\/p>\n<p>Phonegap permite la creaci\u00f3n de aplicaciones multidispositivo sin necesidad de grandes conocimientos de los diferentes sistemas operativos. El desarrollo es sencillo para personas con conocimientos de HTML y JavaScript y adem\u00e1s tiene una buena documentaci\u00f3n y muchos ejemplos. Sin embargo, las aplicaciones no tendr\u00e1n un gran rendimiento y, si no se cuida el aspecto, parecer\u00e1n p\u00e1ginas web m\u00e1s que aplicaciones.<\/p>\n<p>Phonegap es gratuito (aunque pertenece a Adobe), aunque el soporte es de pago. A\u00f1adir que Adobe cedi\u00f3 el c\u00f3digo fuente de Phonegap a la fundaci\u00f3n Apache que continua su desarrollo bajo el proyecto <a href=\"http:\/\/cordova.apache.org\/\">Cordova<\/a>.<\/p>\n<h2>Appcelerator<\/h2>\n<p><a href=\"http:\/\/www.appcelerator.com\/\">Appcelerator<\/a> permite crear aplicaciones para iOS y Android usando JavaScript como lenguaje de programaci\u00f3n. A diferencia de Phonegap, Appcelerator compila el JavaScript y genera un c\u00f3digo que se ejecuta directamente en el dispositivo. Como no se ejecuta sobre el navegador, no tiene el DOM disponible y los controles son los del dispositivo. Esto hace que la aplicaci\u00f3n tenga una apariencia m\u00e1s acorde con el dispositivo a la vez que gana algo de rendimiento. A cambio, las aplicaciones dependen del sistema operativo sobre el que van a correr, as\u00ed que, si se quiere hacer una aplicaci\u00f3n que funcione en los dos sistemas, ser\u00e1 necesario adaptarla.<\/p>\n<p>Las aplicaciones creadas con Appcelerator se ejecutan sobre un entorno de ejecuci\u00f3n de JavaScript (<a href=\"https:\/\/github.com\/appcelerator\/v8_titanium\">V8<\/a>, por defecto, o <a href=\"http:\/\/www.mozilla.org\/rhino\/\">Rhino<\/a> para Android y <a href=\"https:\/\/github.com\/appcelerator\/tijscore\">JavaScriptCore<\/a> para iOS) que est\u00e1 escrito en c\u00f3digo nativo y donde el c\u00f3digo de la aplicaci\u00f3n se interpreta.<\/p>\n<p>Appcelerator es gratuito, aunque el soporte es de pago.<\/p>\n<h2>Adobe Air para dispositivos m\u00f3viles<\/h2>\n<p><a href=\"http:\/\/www.adobe.com\/devnet\/devices.html\">Adobe Air para dispositivos m\u00f3viles<\/a> es la propuesta de Adobe para la creaci\u00f3n de aplicaciones para dispositivos m\u00f3viles usando ActionScript. El entorno de desarrollo puede ser tanto Flash Builder como el propio Flash o el Flex SDK, <i>open source<\/i> y gratuito, que facilita la creaci\u00f3n de aplicaciones. La principal ventaja de Air es el lenguaje de programaci\u00f3n, mucho m\u00e1s potente que JavaScript.<\/p>\n<p>La ejecuci\u00f3n de las aplicaciones Air se hace en un entorno propio, que es el que hace de intermediario entre la aplicaci\u00f3n y el dispositivo. Esto permite que las aplicaciones se puedan ejecutar pr\u00e1cticamente sin cambios en distintos dispositivos (Android, iOS y BlackBerry) aunque, a cambio, no usa controles nativos y el rendimiento es algo m\u00e1s reducido que en una aplicaci\u00f3n nativa.<\/p>\n<p>Pero quiz\u00e1s la gran ventaja de Flex\/Air con respecto a Phonegap o Appcelerator sea el entorno de programaci\u00f3n, mucho m\u00e1s completo e intuitivo. A cambio, el precio, 250 d\u00f3lares la versi\u00f3n est\u00e1ndar, puede ser una limitaci\u00f3n.<\/p>\n<h2>En resumen<\/h2>\n<p>En general, la creaci\u00f3n de aplicaciones para dispositivos m\u00f3viles siempre ser\u00e1 m\u00e1s eficiente si se crea directamente usando las herramientas que proporciona el desarrollador del sistema operativo. Esto significa que deber\u00e1 reprogramarse la aplicaci\u00f3n para los diferentes sistemas, teniendo en cuenta sus caracter\u00edsticas y usando el SDK adecuado. Cuando esto no pueda ser as\u00ed, el uso de herramientas que permiten programar una vez para todos los dispositivos simplifica la programaci\u00f3n, aunque puede reducir la eficiencia del resultado final. Escoger una u otra opci\u00f3n depender\u00e1 del desarrollador, de sus habilidades como programador o del tiempo y dinero que pueda destinar al proyecto.<\/p>","protected":false},"excerpt":{"rendered":"<p>Uno de los \u00e1mbitos multimedia con m\u00e1s crecimiento en los \u00faltimos a\u00f1os ha sido el de los dispositivos m\u00f3viles. La llegada de los smartphones dispar\u00f3 en su momento la creaci\u00f3n de aplicaciones m\u00f3viles que aprovechan la capacidad multimedia de estos dispositivos. La aparici\u00f3n y el despegue poco despu\u00e9s de las tabletas ha convertido el desarrollo &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/alternativas-en-la-programacion-para-dispositivos-moviles\/\" class=\"more-link\">Seguir leyendo<span class=\"screen-reader-text\"> \u00abAlternativas en la programaci\u00f3n para dispositivos m\u00f3viles\u00bb<\/span><\/a><\/p>\n","protected":false},"author":42,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,11],"tags":[77,76,74,75,45],"class_list":["post-217","post","type-post","status-publish","format-standard","hentry","category-products","category-technologies","tag-adobe-air","tag-appcelerator","tag-dispositivos-moviles","tag-phonegap","tag-programacion","entry"],"_links":{"self":[{"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/posts\/217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/comments?post=217"}],"version-history":[{"count":5,"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/posts\/217\/revisions"}],"predecessor-version":[{"id":520,"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/posts\/217\/revisions\/520"}],"wp:attachment":[{"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/media?parent=217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/categories?post=217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/multimedia.uoc.edu\/blogs\/fem\/es\/wp-json\/wp\/v2\/tags?post=217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}