18
RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım 2012 Inet-TR’12 Emrah Ayanoğlu, Onur Özcan, Alperen Eraslan

RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

Embed Size (px)

Citation preview

Page 1: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

RoboGuice ve Android Annotations ile Verimli

Android Uygulama Geliştirme

9 Kasım 2012

Inet-TR’12

Emrah Ayanoğlu, Onur Özcan, Alperen Eraslan

Page 2: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

1

İÇERİK

Page 3: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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

STM A.Ş.

Page 4: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

İş 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

Android’de Uygulama Geliştirme - Sorunlar

Page 5: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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 nedir?

Page 6: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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ı

Page 7: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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’in Avantajları

Page 8: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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

RoboGuice - Örnek

Page 9: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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 (AA) nedir?

Page 10: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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

Page 11: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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 - Özellikler

Page 12: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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

Page 13: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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

Page 14: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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

Page 15: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

@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

Ortak Kullanım - Örnek

Page 16: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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

Sonuç

Page 17: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

[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/RoboGuiceIntegration. Son Erişim tarihi: 15 Eylül 2012.

16

Kaynaklar

Page 18: RoboGuice ve Android Annotations ile Verimli Android …inet-tr.org.tr/inetconf17/bildiri/25.pdf · RoboGuice ve Android Annotations ile Verimli Android Uygulama Geliştirme 9 Kasım

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.