Por muito tempo, a experiência do Facebook em smartphones era terrível. Isto mudou depois que eles lançaram apps realmente nativos para iOS e Android. Agora, o Facebook revela a dificuldade em preparar seu novo app para o Android 2.x – e os truques que eles usaram.

Dois anos depois de seu lançamento, o Gingerbread ainda é a versão mais popular do Android. Isso significa que desenvolvedores precisam tê-lo em mente ao lançar um novo app. O Facebook também visava suportar o Android 2.2 Froyo, ainda mais antigo.

Mas ambas as versões têm a mesma limitação: um buffer pequeno, de apenas 5 MB, para armazenar “métodos” – elementos que definem o comportamento dentro de um app. (Versões mais recentes têm buffer entre 8 MB e 16 MB.) Como o novo app do Facebook tem muitos desses métodos, ele estourava o buffer e travava no Android 2.x.

Para driblar esse obstáculo, eles poderiam quebrar o app em várias partes, cada uma com seu buffer – mas isso, segundo o Facebook, não era possível. Eles tentaram modificar um pouco o código-fonte, mas “nada que tentamos teve um impacto significativo”.

Então eles tiveram uma ideia que só foi possível porque o Android tem código aberto: em vez de mudar o app, eles mudaram… uma parte do Android. Basicamente, eles usaram uma extensão para aumentar o buffer de 5 MB para 8 MB.

…nós percebemos que se pudéssemos aumentar o buffer de 5 MB para 8 MB, tudo daria certo! Foi quando tivemos a ideia de usar uma extensão JNI para substituir o buffer existente por um maior. No início, esta ideia parecia completamente insana… modificar componentes da máquina virtual Dalvik enquanto ela roda nosso código é muito perigoso. Mas à medida que nos debruçamos sobre o código… começamos a perceber que isto seria seguro, desde que fizéssemos isso ao iniciar nosso app.

Então eles encontraram um terceiro obstáculo: o Facebook não funcionava no Galaxy S II, o aparelho mais popular a ser lançado com Gingerbread. É que a Samsung havia feito modificações no Android, e o app do Facebook não estava pronto para elas.

Então, sabendo que outras fabricantes poderiam fazer o mesmo, eles encontraram uma forma de tornar o Facebook mais robusto a essas modificações. Só então o app funcionou sem problemas e pôde ser lançado em dezembro.

Depois que o Facebook divulgou esta epopeia para tornar seu app compatível com o Android 2.x, vieram diversas críticas sobre o processo. Afinal, em vez de admitir que o app tinha métodos demais, eles seguiram em frente até acharem um jeitinho de driblar isso no sistema – e ainda agradecem isso à natureza aberta do Android!

É bom ver que o Facebook estimula seus funcionários a pensarem para mobile (smartphones e tablets) – segundo o Ars Technica, qualquer um pode fazer um treinamento intensivo em escrever código nativo para iOS e Android – mas parece que há algo terrivelmente complexo dentro dos apps em si.

Como diz o Facebook, seu app é complexo por ter muitos recursos – feed de notícias, notificações push e uma versão embutida do Messenger – funcionando em tempo real. Mas talvez seja hora de revisar o app em si, e não depender de hacks como este para fazer o app funcionar. [Facebook Engineering via Ars Technica]