RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme Emrah Ayanoğlu, Onur Özcan, Alperen Eraslan Inet-TR 12 9 Kasım 2012
İÇERİK 1
STM A.Ş. Savunma Teknolojileri Mühendislik ve Ticaret A.Ş 1991 yılında Savunma Sanayi İcra Komitesi kararı ile Ankara da kurulmuştur. Amacı TSK ve SSM ye sistem mühendisliği, teknik destek ve danışmanlık hizmetlerini sağlamaktır. Firma hissedarlarına bakıldığında TAI, HAVELSAN ve SAVRONİK in hisseleri görülmektedir. Bu nedenle TSK Güçlendirme Vakfı nın dolaylı olarak hissedar olduğu belirtilebilir. 2
Android de Uygulama Geliştirme - Sorunlar İş sınıfının dışında yazdığımız birçok satır kod bulunmaktadır. Bütün Android uygulamalarında ortaktır. Her projeye başlarken bu kodları yazmak vakit kaybına yol açmaktadır. Bir uygulama geliştirirken ne kadar fazla kod yazarsak, hatayla karşılaşma oranı o kadar artmaktadır. 3
RoboGuice nedir? Google ın Guice framework ünün Android geliştiricileri için geliştirilmiş RoboGuice framework ü Android uygulaması geliştirirken büyük kolaylıklar sağlamaktadır. Temel çalışma mantığı dependency injection üzerinedir. (Spring Framework) Uygulama geliştirirken kullanmak istediğimiz nesneleri daha kısa ve kontrollü kod parçarıyla RoboGuice in kendisi yaratmaktadır. 4
RoboGuice in Avantajları Projedeki nesnelerin yaratılmasında kullanılan karışık kod parçalarıyla uğraşmak zorunda bırakmaması, nesneler yaratılırken kullanılan kodun yarı yarıya azalması, Değişkenleri doğru zamanlarda yaratması, geliştiricinin kod yazma dışındaki sorumluluğunu azaltması, Geliştiriciye Null check gibi konularda yardımcı olması, basit hataları azaltması, 5
RoboGuice in Avantajları Bazı durumlarda uygulamayı çalıştırmadan ortaya çıkması imkansız olan hataları başlangıçta vermesi, yani TypeSafe olması, Performans bakımından normal Android geliştirmeyle bir farkı olmaması, Kod okunabilirliğini ve takip etmeyi kolaylaştırması, Tekrar kullanılabilirliği artırması Yazılımcının kendisiyle ilgili yerlere odaklanmasını kolaylaştırmaktadır. Zamandan tasarruf sağlamaya yardımcı olmaktadır. 6
RoboGuice - Örnek RoboGuice in sağladığı nesne kullanımı yapısı: textview isimli TextView nesnesini RoboGuice in enjekte etmesini sağlama: InjectView(R.id.text1) TextView textview; TextView nesnesini Roboguice olmadan oluşturmaya çalışsaydık yazacağımız kod şu şekilde olacaktı: TextView textview; textview = (TextView) findviewbyid(r.id.textview); casting de yapacağımız olası bir hatayı önlemekte ve yazdığımız kod miktarını azaltarak kodu daha anlaşılabilir hale getirmektedir. 7
AndroidAnnotations (AA) nedir? Android de kod geliştirmeyi hızlandıran açık kaynaklı bir frameworktür. Amacı, Android uygulamalarını geliştirirken kod yazmayı ve kodun sonradan değiştirilebilmesini kolaylaştırmaktır. Java Annotation ların kullanımıyla projede sık sık kullanılmış kod parçalarının sayısını azaltmaya yardımcı olmaktır. Annotation, Java programa dilinde kullanılan bir kavramdır, Java kaynak koduna eklenebilen sözdizimsel metadata nın özel bir şeklidir. 8
AndroidAnnotations - Özellikler Bağımlılık Enjeksiyonu: Görünümler, kaynaklar, sistem servisleri, vb. enjeksiyonu için benzer annotation lar sağlar. Basitleştirilmiş iş parçacığı modeli: Kullanıcı arayüzü ya da arka plan iş parçacığında çalıştırabilmek üzere kendi metodlarınızı annotate etmenize olanak sağlar. Olay Bağlama: Anonim dinleyici sınıflar olmadan, görünümler üzerinde olan olayları idare etmek için metodlarınızı annotate etmenize olanak sağlar. 9
AndroidAnnotations - Özellikler REST istemci: Bir istemci arabirimi oluşturabilirsiniz, AA uygulamayı oluşturur. Bütün bu ve diğer ekstra özelliklerini 50 kb dan daha az gereksinim duyar. AA ortak kodu derleme zamanında üretir ve yazılımın çalışmasında bir etkisi yoktur. Her aktivitenin birer alt sınıfını üreterek ve annotation ları standart ortak kod ile değiştirerek yapar bunu. 10
AndroidAnnotations Örnek Önceki: View updatebookmarksbutton1 = findviewbyid(r.id.updatebookmarksbutton1); updatebookmarksbutton1.setonclicklistener(new OnClickListener() { @Override public void onclick(view v) { updatebookmarksclicked(); } }); Sonraki: @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2}) void updatebookmarksclicked() { searchasync(search.gettext().tostring(), application.getuserid()); } 11
RoboGuice ile Android Annotations i Entegre Kullanmak Android Annotations projesi RoboGuice ile tamamen entegrasyonu sağlanabilecek durumdadır. Hem kod kalitesini en mükemmele dogru çevirmeye hem de en az satır kod yazarak istediklerimizi maliyet ve zaman etkin olarak yapabilmeyi elde edebiliriz. 12
Ortak Kullanımın Getireceği Avantajlar Android bileşenlerin derleme zamanı enjeksiyonu ile zaman etkin çözümü, Android Annotations sayesinde RoboGuice için kullanmamız gereken RoboActivity e artık ihtiyacımız kalmayacak, Bütün Android Annotations maddelerine destek vermektedir. (@Click, @Background, @UiThread, @UiThreadDelayed, @ItemSelected, v.b) 13
Ortak Kullanım - Örnek @EActivity(R.layout.main) @RoboGuice({AstroListener.class, AnotherListener.class}) public class AstroGirl extends Activity { @ViewById EditText edit; @Inject GreetingService greetingservice; @Click void button() { String name = edit.gettext().tostring(); greetingservice.greet(name); } } public class AstroListener { @Inject Context context; public void dosomethingonresume(@observes OnResumeEvent onresume) { Toast.makeText(context, "Activity has been resumed", Toast.LENGTH_LONG).show(); } } Toplam kod satırımız yaklaşık olarak %25 azalmıştır. 14
Sonuç Android yazılım geliştirme süreçlerinde de, diğer yazılım süreçlerinde kullandığımız mimarilerin ve yapıların kullanılması hem zaman etkin hem de kod etkin olarak geliştirme olanaklarına sahip olmaktadır. RoboGuice ve Android Annotations projeleri bize Android geliştirme süreçlerinde verimli olmamızı sağlayacaktır. 15
Kaynaklar [1] Michael Burton. (2011). RoboGuice. http://code.google.com/p/roboguice/. Son Erişim tarihi: 15 Eylül 2012.. [2] Excilys. (2011). Android Annotations. http://androidannotations.org/. Son Erişim tarihi: 15 Eylül 2012. [3] Java Annotation. http://en.wikipedia.org/wiki/java_annotation. Son Erişim tarihi: 15 Eylül 2012. [4] Excilys. (2012). RoboGuice Integration. https://github.com/excilys/androidannotations/wiki/robogui ceintegration. Son Erişim tarihi: 15 Eylül 2012. 16
ANKARA TEKNOLOJİ GELİŞTİRME BÖLGESİ, BİLKENT CYBERPARK, E BLOK 5.CADDE NO: 6/A 06800, ANKARA, TURKIYE TEL : 0 312 266 35 50 FAKS : 0 312 266 35 51 www.stm.com.tr STM 2011 All Rights Reserved Bu doküman ve içerdiği tüm bilgiler STM AŞ nin fikri mülkiyetidir. Bu dokümanın dağıtımı veya sunumu ile bu haklar ortadan kalkmış olmaz. STM AŞ nin yazılı izni olmadan bu dokümanın ve içerdiği bilgilerin üçüncü kişilere aktarımı, çoğaltımı ve dağıtımı yapılamaz. Bu doküman ve içeriği hazırlanma amacının dışında kullanılamaz. This document and all information contained herein is the sole property of STM AŞ. No intellectual property rights are granted by the delivery of this document or disclosure of its content. This document shall not be reproduced or disclosed to a third party without the express written consent of STM AŞ. This document and its content shall not be used for any other purpose other than for which it is supplied.