Geçen sene Facebook'un bir blog post unu okumustum ve cok etkilenmistim. FB, HTML5 uygulamalarini native uygulamaya cevirmeye karar vermisti. Bu karardan sonra iPhone uygulamasi kisa bir surede cikmasina ragmen Android uygulamasi yaklasik 1 ay gecikti. Yazdiklari bu blog post aslinda bu gecikmenin aciklamasiydi.

Facebook'u en bastan yazdiklarinda Dalvik VM'in sinirlamalari yuzunden Android 2.3 ve alti telefonlarda uygulamanin calismadigini goruyorlar. Uygulamalar baslarken Dalvik iclerindeki metodlarin bir ozetini tutuyor. Ve bu tutulan buffer Android 2.3 ve alti cihazlarda 5MB ile sinirli.

Burada Facebook adam akilli uygulama yazmayi denemek yerine bu 5MB lik siniri hack lemeye calisiyor ve basariyor. Facebook bunu yaparken Android in open source olmasindan yararlaniyor. Java Reflection kullanarak Dalvik koduna ve icindeki birkac private variable a ulasiyor ve basitce degerleri yukseltiyor.

Yazinin basinda Facebook uygulamasinin ne kadar buyuk oldugunu icinde push notification (!) ve messenger destegi oldugundan bahsediyor. Sanki en kapsamli uygulama Facebook. O zamanlar vay be demistim ama simdi ne kadar aptalca oldugunu goruyorum.

Gel gelelim asil ilginc konuya.

Android commit'lerinden biri:
https://android.googlesource.com/platform/libcore/+/81abb6fb7332dfe62ff596ffb250d8aec61895df%5E!/#F0

Commit'te goruyoruz ki Facebook la ilgili bir seyler var. Ne olabilir sizce? Tahmin edebildiniz mi?

Kodu buyuk ihtimal refactor ederken dexElements variable'inin ismini pathElements olarak degistirmek istiyor +Elliott Hughes. Fakat daha sonra Facebook uygulamasinin coktugunu goruyor ve variable ismini geri ceviriyor ve comment olarak aciklama yaziyor.

/**
 * List of dex/resource (class path) elements.
 * Should be called pathElements, but the Facebook app uses reflection
 * to modify 'dexElements' (http://b/7726934).
 */
private final Element[] dexElements;

Ben olsam "banane ya Facebook naparsa yapsin" derdim ama Google oyle degil iste.

Hatta merge'lerden birinde soyle bir yorum var:

Facebook uygulamasini acabildim. Hesabim olmadigi icin giris yapamadim ama herhalde calisiyor

Bu yazidan cikarilarak sonuclar :)

  • Google kodlarini her zaman Facebook gibi marketteki buyuk uygulamalarla test ediyor ve onlara deger veriyor.
  • Reflection kullanmak sizin icin tehlikeli olabilir ama Facebook icin degil. Ne istiyorsa yapabilir. :)
  • Android'in open source olmasina ovguler yagarak blog post yazan Facebook yuzunden Google calisaninin cektigi cile. :)
  • Dalvik de oldu zaten yasasin ART!