misma aplicacion 2 versiones...

231 views
Skip to first unread message

joaquindiez

unread,
Jul 12, 2012, 3:23:31 AM7/12/12
to android...@googlegroups.com
Hola, tal vez la pregunta sea algo estupida.. .pero con al fragmentacion actual y las nuevas caracteristicas de las versiones mas recientes de Android me surge la "necesidad" de mantener una version compatible para 2.3 en adelante y otra para para la version 4..

Sin embargo me da un poco de rabia tener que publicarla como 2 aplicaciones diferentes...en el Market.. os ha ocurrido algo similar? Como lo habeis afrontado??

Antonio Consuegra

unread,
Jul 12, 2012, 3:27:28 AM7/12/12
to android...@googlegroups.com
Buenos dias,

Desde hace algun tiempo, Google Play tiene soporte para diferentes .apk en una misma app. En este enlace te explican como hacerlo: http://developer.android.com/guide/google/play/publishing/multiple-apks.html

Un saludo,

2012/7/12 joaquindiez <joaqu...@gmail.com>

jlmo...@gmail.com

unread,
Jul 12, 2012, 3:48:09 AM7/12/12
to android...@googlegroups.com
En cualquier caso aunque se pueda, es poco recomendable; doble mantenimiento, con todo lo que implica, resolución de bugs por duplicado etc etc.

No se si conoces la "support-library"[1], resumiendo es una libreria que puedes importar en tus proyectos android (compatible desde android 1.6) para que tengas apis que aun no se han publicado en esa versión; por ejemplo, poner fragments para soportar tablets en una aplicación que programes para android 2.2.

No se si esto te ayudará, si no, explícanos porque necesitas mantener dos versiones de la app y quizás podamos echarte algún cable más ;)

Saludos!


2012/7/12 Antonio Consuegra <acons...@gmail.com>

Beatriz Nombela

unread,
Jul 12, 2012, 4:55:55 AM7/12/12
to android...@googlegroups.com
Hola!!
En esta charla del pasado google IO muestran técnicas para que tu aplicación sea compatible con diferentes versiones de android: https://developers.google.com/events/io/sessions/gooio2012/106/
Aunque esté orientada a UI lo mismo te sirve

2012/7/12 jlmo...@gmail.com <jlmo...@gmail.com>
--
Beatriz Nombela Escobar
bea...@gmail.com

Jorge Juan Barroso Carmona

unread,
Jul 12, 2012, 4:57:09 AM7/12/12
to android...@googlegroups.com
ClassForName va a ser tu amigo XD

Fernando F. Gallego

unread,
Jul 12, 2012, 5:20:19 AM7/12/12
to android...@googlegroups.com
En vez de usar ClassForName no puedes simplemente compilar contra la última API y cuando necesites usar un método, comprobar que existe para la versión en la que está corriendo, y si no, ofrecer una alternativa?

O usar interfaces para para emplear las clases de android si existen o tu propia implementación si no.

Saludetes

Jorge Juan Barroso Carmona

unread,
Jul 12, 2012, 5:27:00 AM7/12/12
to android...@googlegroups.com
la mejor opción es hacer interfaces ^_^ e instanciar un interface u otro dependiendo de la versión de código q tienes :P

Nadie entiende mis bromas :__(

jlmo...@gmail.com

unread,
Jul 12, 2012, 5:33:51 AM7/12/12
to android...@googlegroups.com
XDDDDDD

Que si hombre, que los que sufrimos en silencio también nos reímos en silencio ;)

Yo lo que hago es algo así, no es tan elegante como usar interfaces pero funciona...

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {
    fileName = com.spanishcoders.pepephone.utils.Base64.encodeBytes(bytes, com.spanishcoders.pepephone.utils.Base64.URL_SAFE) + ".bin";
} else {
    fileName = Base64.encodeToString(bytes, Base64.NO_WRAP | Base64.URL_SAFE) + ".bin";
}

En este ejemplo lo que hago es que si la version que estoy corriendo es menor que froyo (android 2.2) utilizo una implementación propia de Base64.encodeToString ya que Base64.encodeToString fue incluido en la api de android a partir de android 2.2.

Saludos! :)


2012/7/12 Jorge Juan Barroso Carmona <jbar...@tuenti.com>

Javier Hdez

unread,
Jul 12, 2012, 6:42:31 AM7/12/12
to android...@googlegroups.com
Si decides usar ActionBarSherlock (que es la que se utiliza en iosched  http://code.google.com/p/iosched/), mejor que no añadas la librería de compatibilidad porque te va a dar error, ya que la librería de Sherlock ya la tiene.

 Luego puedes seguir añadiendo los layouts a /res/layouts, pero si hay algo que no funciona por ejemplo en ICS 4.0 (api level 14), pues le puedes poner en /res/layouts-v11 los layouts para esa versión y en todas las versiones superiores a Honey se mostrarán esos layouts, o si tienes que hacer algo en especial para la Api Level 13, pues lo pones en /res/layout-v13 , Android se encargará de mostrar ese layout en cada versión de dispositivo (ídem con los drawables, values...), luego para comprobar la versión que está corriendo lo puedes hacer con lo que te dijo Pep, yo utilizo los siguientes en una clase Utilitaria que me devuelven true o false y ya luego dependiendo de lo que devuelva hago lo que necesito:

    public static boolean isHoneycombOrHigher() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
    }

    public static boolean isFroyoOrHigher() {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;
    }

Luego tu te puedes crear los tuyos personalizados para las versiones que quieras.

Saludos


Javier Hdez

unread,
Jul 12, 2012, 6:53:14 AM7/12/12
to android...@googlegroups.com
La filosofía es similar a la de la web, dónde se añaden comentarios condicionales para conocer la versión del navegador http://en.wikipedia.org/wiki/Conditional_comment.
Reply all
Reply to author
Forward
0 new messages