Eduard Ereza Martínez
Localitzador de programari

La meva experiència amb HoloEverywhere

22 de juliol del 2013

Porto un temps utilitzant HoloEverywhere a la meva aplicació “Proper bus Barcelona”, i he pensat que estaria bé compartir la meva experiència amb aquesta biblioteca.

HoloEverywhere, en cas que no ho sàpigues ja, és una biblioteca que intenta posar-te fàcil tenir el mateix aspecte i disseny en totes les versions d’Android des de la 2.1 fins a la més actual. Això ho fa recreant el tema Holo d’Android 4.x. He de dir que, per suposat, no és senzill desenvolupar una biblioteca així. Algunes coses no es poden solucionar simplement aplicant temes als widgets antics, sinó que s’han d’implementar de zero, o bé crear subclasses d’algunes classes d’Android. Això és el que fa HoloEverywhere. Ah, i per cert, has de tenir en compte que necessita la majoria de recursos Holo, de manera que aquesta biblioteca afegeix 3,3 MB a les aplicacions ja existents.

Pensant que em faria més senzill tenir un estil Holo uniforme a totes les plataformes, vaig decidir implementar-ho a les meves aplicacions. Vaig provar-ho amb “Proper bus Barcelona”, i el resultat semblava que estava bé. Canviar una aplicació perquè utilitzi HoloEverywhere és senzill però pesat, ja que has reemplaçar totes les referències a widgets d’Android amb els seus equivalents de HoloEverywhere. Et pot comportar un bon temps si l’aplicació té una base de codi gran.

1r problema: El primer problema va ser amb algunes de les classes equivalents. A l’aplicació tenia algunes referències a la classe BaseAdapter, obtingudes de ListView.getAdapter(). Van passar a donar-me ClassCastException, ja que la classe que retorna HoloEverywhere no és una subclasse de BaseAdapter, i cal canviar els BaseAdapter a ListAdapterWrapper.

2n problema: El segon problema va ser amb un Spinner que impedia que la vista es refresqués. Va resultar ser un bug de HoloEverywhere, i vaig trobar-hi una solució a StackOverflow.

3r problema: El tercer problema va ser que tenia una Activity que utilitzava un tema “dialog”, i donava error en versions d’Android anteriors a la 4.0. La vaig reescriure utilitzant un DialogFragment, i tot va anar bé…

4t problema: Fins que em vaig adonar que el diàleg no mostrava el títol en versions d’Android anteriors a la 4.0. Vaig revisar el codi de HoloEverywhere i vaig aconseguir implementar una manera d’evitar-ho.

En aquest moment, havent solucionat tots aquests bugs, tot funcionava correctament, i vaig decidir publicar la nova versió de l’aplicació, utilitzant HoloEverywhere 1.5.0. L’aplicació no tenia problemes, fins que vaig llançar-ne una nova versió amb HoloEverywhere 1.5.1 en lloc de 1.5.0. Així que…

5è problema: Vaig començar a rebre queixes d’usuaris que tenien telèfons Sony Xperia (Sony Xperia U amb Android 2.3.7, per exemple), dient-me que les llistes de l’aplicació havien desaparegut.

Vaig rellançar l’aplicació tornant a la 1.5.0, i tot va tornar a funcionar bé…

6è problema: Fins que altres usuaris, amb diversos models de telèfon diferents, van començar a queixar-se que l’aplicació es penjava aleatòriament amb una pantalla blanca. No veig cap altra raó que en pugui ser la causa, a part de HoloEverywhere, així que vaig decidir provar d’actualitzar a l’última versió estable, la 1.6.8, i demanar-li a una usuària que la provés. Tot i que no va poder reproduir el problema de la pantalla blanca, les ListViews que tenien scroll desapareixien, com passava amb la 1.5.1.

Finalment: Després de tots aquests problemes, he eliminat HoloEverywhere del meu projecte. Sí, els botons i els textos de l’aplicació no es veuran igual en totes les versions d’Android, però m’he desfet de diversos bugs molestos, i encara millor… ara la meva aplicació ocupa 3,3 MB menys!

En conclusió, tots sabem que totes les biblioteques tenen bugs, és normal, no hi ha cap desenvolupador que no faci errors. Però quan has d’utilitzar una biblioteca per a un projecte (que no és res fora del normal en un projecte Android), i et topes amb un parell de bugs coneguts, i a sobre n’has d’informar quatre més tu mateix, alguns d’ells de funcionalitats comunes com ara diàlegs o menús contextuals, jo no la recomanaria per a l’ús en producció.

Potser algun dia HoloEverywhere tindrà menys errors i serà més senzilla d’integrar. Això espero, ja que simplificaria molt les coses a molts desenvolupadors a l’hora de dissenyar les seves aplicacions. Però ara per ara, no puc recomanar-te que l’usis.