HİTİT ÜNİVERSİTESİ SUNGURLU MESLEK YÜKSEKOKULU BİLGİSAYAR TEKNOLOJİLERİ BÖLÜMÜ BİLGİSAYAR PROGRAMCILIĞI PROGRAMI Android Programlama Dili Java Haydar Kardeşler 144715022 Kontrol: Öğr. Gör. Hamit AKSOY Bilgisayar Programcılığı Bölümü 2015 – 2016 Eğitim Öğretim Yılı 2. Dönemi Görsel Programlama III ve İnternet Programcılığı II Dersi Sayfa 1 / 14 1. Java Nedir? Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen (yorumlanan) bir dildir. Sun Microsystem'in şu anda Oracle Corporation ile bağlı ortaklığı bulunmaktadır ve 1995 yılında Sun Microsystems'in çekirdek bileşeni olarak piyasaya sürülmüştür. Bu dil C ve C++'dan birçok sözdizim türetmesine rağmen bu türevler daha basit nesne modeli ve daha az düşük seviye olanaklar içerir. Java uygulamaları bilgisayar mimarisine bağlı olmadan herhangi bir Java Virtual Machine (JVM)'de çalışabilen tipik bytecode'dur (sınıf dosyası). Java ilk çıktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir düzlem dili olarak düşünülmüştü. Ancak düzlem bağımsızlığı özelliği ve tekbiçim kütüphane desteği C ve C++'tan çok daha üstün ve güvenli bir yazılım geliştirme ve işletme ortamı sunduğundan, hemen her yerde kullanılmaya başlanmıştır. Şu anda özellikle kurumsal alanda ve mobil cihazlarda son derece popüler olan Java özellikle J2SE 1.4 ve 5 sürümü ile masaüstü uygulamalarda da yaygınlaşmaya başlamıştır. Etkilendiği Diller: Ada 83, C++, Delphi Object Pascal, Eiffel, Generic Java, Mesa, Modula3, Oberon, Objective-C, UCSD Pascal,Smalltalk Etkilediği Diller: Ada 2005, BeanShell, C#,Clojure, D, ECMAScript,Groovy, J#, JavaScript, PHP,Python, Scala, Se ed7, Vala 2. Java Sürümleri Java'nin ilk sürümü olan Java 1.0 (1995) Java Platform 1 olarak adlandırıldı ve tasarlama amacına uygun olarak küçük boyutlu ve kısıtlı özelliklere sahipti. Daha sonra düzlemin gücü gözlendi ve tasarımında büyük değişiklikler ve eklemeler yapıldı. Bu büyük değişikliklerden dolayı geliştirilen yeni düzleme Java Platform 2 adı verildi ama sürüm numarası 2 yapılmadı, 1.2 olarak devam etti. 2004 sonbaharında çıkan Java 5, geçmiş 1.2, 1.3 ve 1.4 sürümlerinin ardından en çok gelişme ve değişikliği barındıran sürüm oldu. Java SE 7 ise (kod adı Dolphin) Sun'un üzerinde çalıştığı, Java teknolojisinin günümüz sürümüdür. 13 Kasım 2006'da Java düzlemi GPL ruhsatıyla açık kodlu hale gelmiştir. Sayfa 2 / 14 3. Android Nedir? Android, Google, Open Handset Alliance ve özgür yazılım topluluğu tarafından geliştirilmiş olan, Linux tabanlı, mobil cihaz ve cep telefonları için geliştirilmekte olan, açık kaynak kodlu bir mobil işletim sistemidir. Desteklenen uygulama uzantısı ".apk"dir. Android, aygıtların fonksiyonelliğini genişleten uygulamalar yazan geniş bir geliştirici grubuna sahiptir. Android için halihazırda 1 milyondan fazla uygulama bulunmaktadır. Google Play Store ise, Android işletim sistemi uygulamalarının çeşitli sitelerden indirilebilmesinin yanı sıra, Google tarafından işletilen kurumsal uygulama mağazasıdır. Geliştiriciler, ilk olarak aygıtı, Google'ın Java kütüphanesi aracılığıyla kontrol ederek Java dilinde yazmışlardır. Open Handset Alliance, 5 Kasım 2007'de Android'i kurduğunu duyurmuştur ve ardından 34 adet donanım, yazılım ve telekom şirketi, mobil cihazlar için telif hakkı olmayan bir işletim sisteminin teknolojinin gelişimi için yararlı olduğu konusunda hemfikir olmuşlardır. Android, Linux çekirdeği üzerine inşa edilmiş bir mobil işletim sistemidir. Bu sistem ara katman yazılımı, kütüphaneler ve API C diliyle yazılmıştır. Uygulama yazılımları ise, Apache harmony üzerine kurulu Java-uyumlu kütüphaneleri içine alan uygulama iskeleti üzerinden çalışmaktadır. Android, derlenmiş Java kodunu çalıştırmak için dinamik çevirmeli (JIT) Dalvik sanal makinasını kullanır ve cihazların fonksiyonelliğini artıran uygulamaların geliştirilmesi için çalışan geniş bir programcı-geliştirici çevresine sahiptir. 4. Android Bölümleri Android işletim sistemi beş kısımdan oluşur. 1. Çekirdek: Linux kernelidir. Güvenlik, hafıza yönetimi, süreç yönetimi, ağ yığınları ve sürücü modellerini içermektedir. 2. Android Runtime: Sanal makinedir. Dalvik Sanal Makinesini de içermektedir. 3. Kütüphaneler: Veritabanı kütüphaneleri, web tarayıcı kütüphaneleri, grafik ve arayüz kütüphanelerini içermektedir. 4. Uygulama Çatısı: Uygulama geliştiricilere geniş bir platform sunan kısımdır. 5. Uygulama Katmanı: Doğrudan Java (programlama dili) yle geliştirilmiş uygulamaları içermektedir. Sayfa 3 / 14 5. Android Özellikleri Android'in son sürümleri, çoklu-görev (multitasking), çoklu-dokunuş (multitouch) ve Adobe Flash desteğiyle beraber gelmektedir. Google Play Store ile uygulamalar yüklenebilmektedir. Handset Çizimler: Sistem, VGA, 2D grafik arşivler, OpenGL ES 3.0 tabanlı 3D Grafik arşivlerine ve geleneksel telefon çıkışlarına son derece kolay uyum sağlar. Depolama: Bilgi depolama amaçlı SQLite kullanılmaktadır. Bağlanabilirlik: Android, GSM, Bluetooth, EDGE, 3G,LTE(4G) NFC ve Wi-Fi bağlantısını destekler. Mesajlaşma: Hem SMS hem de MMS desteği vardır. Web Tarayıcısı: Android'in web tarayıcısı açık kaynak kodlu WebKit application framework üzerine kuruludur. Medya Destekleri: Android, MPEG-4, MP4, H.264, MP3, ve AAC, AMR, JPEG, PNG, GIF gibi ses/video/resim formatlarını desteklemektedir. Ek Donanımları: Android, titreme önlemeli fotoğraf/video kameralarda, dokunmatik ekranda, GPS, pusulalar ve ivmeölçerlerde son derece yeteneklidir. 6. Android Sürümleri 1.1 Astro 1.2 Bender 1.5 Cupcake 1.6 Donut 2.0-2.1 Eclair 2.2 Froyo 2.3 Gingerbread 3.0-3.1-3.2 Honeycomb 4.0 Ice Cream Sandwich 4.1-4.2-4.3 Jelly Bean 4.4 Kitkat 5.0 Lollipop(Önizleme) Son kararlı sürüm: 4.4.4 KitKat / 19 Haziran 2014 Sayfa 4 / 14 7. Android Geliştirme Ortamı Android uygulamaları geliştirmek istiyorsanız, öncelikle onu geliştireceğiniz ve derleyip çalıştıracağınız araçları temin etmeniz gerekir. Geliştirme ortamı olarak genelde Eclipse kullanılır ancak Netbeans gibi farklı alternatifler de mevcuttur. Bir Java uygulaması, sadece yazdığınız *.java dosyalarıyla çalışmaz. Hiçbir görevi yerine getirmese bile (açılıp kendini kapatan bir uygulama yapsanız bile) bazı altyapı ihtiyaçları vardır. Derlenmesi ve üzerinde çalışacağı işletim sistemine uygun biçimde paketlenmesi gerekir. Bu altyapı ihtiyaçlarını karşıladıktan sonra yazdığınız Java kodunu herhangi bir işletim sisteminde çalıştırabilirsiniz. Java uygulamasını farklı işletim sistemlerinde aynı şekilde çalıştırabilen aracın adı Java Sanal Makinesi'dir (Java Virtual Machine). Java Sanal Makinesi, bytecode bulunduran *.class dosyalarını çalıştırır. Yazdığınız *.java kodunu *.class dosyasına çeviren aracın adı da javac'dir. Java Geliştirme Paketi (JDK), normalde sadece Java uygulamaları çalıştırmak için gereken Java Çalışma Zamanı Ortamını (Java Runtime Environment - JRE) da içinde barındırır. JRE içinde Java Sanal Makinesi (JVM) ve açık kaynak kodlu Java API'leri yer alır. Java kodunu bytecode'a çevirmek javac'nin işi, onu JVM'e yüklemek java'nın işi ve farklı işletim sistemlerinde çalıştırmak JVM'in işidir. Java uygulamaları geliştirmek ve çalıştırmak için gerekli tüm araçları bulunduran paketin adı JDK yani Java Geliştirme Paketidir. 8. Android Projesi Bölümleri ve Çalışma Mantığı Eclipse ortamından yeni bir Android projesi açtığımızda karşılaşacağımız, bizim için önem arz eden bölümler aşağıdaki gibidir; Sayfa 5 / 14 Resim 8.1 Örnek Android Projesi Görünümü 1- Src Klasörü Resim 8.1.1 Src Klasörü Görünümü Bu klasör içerisinde "com.sirketadi.uygulamaadi" şeklinde paketler ve bu paketler içerisinde de geliştiricinin oluşturduğu *.Java dosyaları yani classlar bulunur. Basitçe anlatmak gerekirse bizim kod yazacağımız kısım burasıdır. 2- Gen Klasörü Bu klasör de tıpkı src klasörü gibi paket dosyaları barındırır ancak bu paket dosyaları ve içerisindeki *.Java dosyaları sistem tarafından otomatik oluşur ve dokunulmaması gereken Sayfa 6 / 14 kısımdır. İçindeki R.java dosyası, uygulamanın ön yüzünde oluşturduğumuz görünümler, fotoğraflar, yazılar, butonlar vs. gibi görsel nesnelere arka plan yani kod yazdığımız kısımdan erişmemizi sağlar. 3- Libs Klasörü İçerisinde projeye dışardan dahil edeceğimiz işimizi kolaylaştıracak, hazır kod bloglarına sahip kütüphaneler *.Jar formatında eklenir. En bilindik kütüphane proje açıldığında otomatik eklenen Android Support Library'dir ve Android ekibi tarafından sürekli güncellenir. 4- Res Klasörü Resim 8.4. 1Res Klasörü Görünümü Resource yani kaynak klasörü. Görünüm, fotoğraf ve yazı klasörleri vs. gibi ön yüz nesnelerinin tutulduğu bölümdür. Yapısı xml'dir ve tüm dosyalar *.xml formatındadır. Xml editör ve görsel arayüz olarak iki bölümden oluşur. Bu klasöre eklenen herşey otomatik olarak R.java dosyası içerisine yazılmaktadır. İçerisindeki klasörler aşağıdaki gibidir; 4.1- Anim Klasörü İçerisinde textlere, fotoğraflara, geçişlere vs. eklemek için efektleri barındıran klasördür. Efektler hazır oluşmaz geliştirici kendi yazmak zorundadır. 4.2- Drawable Klasörleri Bu klasörler drawable, drawable-hdpi, drawable-mdpi, drawable-ldpi, drawable-xhdpi, drawable-xxhdpi şeklinde 5 kısımdan oluşur. Drawable klasöründe xml kodları ile Sayfa 7 / 14 oluşturulmuş grafikler, şekiller tutulurken diğer 4 klasörde direkt olarak *.png formatında resimlerin farklı boyutları tutulur. 4.3- Layout Klasörleri Görünüm dosyalarını içerir. Uygulama cihazda açıldığında görünen herşey bu klasörler içerisindedir. Örneğin; Button, textview, listview, imageview vs. Ön yüzde çalışacak her activiynin(class) bir xml görünüm dosyası olmak zorundadır. Proje oluşturulduğunda layout dosyası da otomatik olarak oluşur ancak Android işletim sistemini kullanan farklı ekran boyutlarına sahip birçok cihaz olduğudan onlara göre optimizasyon yapmak gerekir. Bunun için de layout-small, layout-large, layout-xlarge gibi görünüm klasörlerini geliştirici kendi oluşturmalıdır. 4.4- Menu Klasörü Action Bar'da(üst çubuk) kullanılacak olan menülerin oluşturulduğu dosyadır. 4.5- Values Klasörleri İçerisinde string, color, dimen gibi programda kullanılacak bilgileri tutar. Layout klasörü gibi Values klasörünü de farklı ekran boyutları için oluşturabiliriz. 4.6- Android Manifest Dosyası Resim 8.4.6.1 Manifest Dosyası Görünümü Activity tanımlamaları, ayarlar ve izinler gibi uygulamaya dair tüm bilgiler bu dosya içerisinde tutulur. Proje oluştuğunda otomatik oluşur ve geliştirici isteğine göre içerisindeki bilgileri düzenler. Örneğin; Uygulamanın internet, kamera gibi erişim izinleri, ana activiynin Sayfa 8 / 14 belirlenmesi yani uygulama çalıştığında çalışacak java class'ının hangisi olacağı, uygulamanın desteklediği ekran boyutları, uygulamanın çalışacağı minimum sdk gibi bilgileri geliştirici düzenler. Kısacası bir bilgisayar için bios ne ise android uygulama için de manifest odur. 9. Uygulama Yaşam Döngüsü Resim 9.1 Activity Yaşam Döngü Şeması Bir Android activity’si devam ettiği (yaşadığı) sürece farklı durumlarda bulunabilir.Resmi incelersek ; Starting : Uygulamanın çalışmak için tetiklendiği, hafızada hiç bulunmadığı durumdur. Running (Active) : Activity’inin başladığı ve kullanıcı ile etkileşimde olduğu durumdur. Paused : Activity’nin görünür olduğu ama kullanıcı etkileşiminin olmadığı durumdur. Örnek olarak dialog pencereleri verilebilir. Stopped : Activity’nin artık görünür olmadığı durumdur. Bu durumda activity memory’de tutulmaya devam edilir kullanıcı geri döndüğünde aktif konuma geçer. Destroyed : Activity’nin memory’den de kaldırılarak tamamen bitirildiği durumdur. Kullanıcı tekrar uygulamayı açtığında döngü yeniden canlanır. 10. Uygulama Ana Metodları Sayfa 9 / 14 1- onCreate(); Uygulama oluşturulmaya başlandığında çalışır. Bu metodda activitenin bütün ömrü boyunca yalnızca bir kez yapacağı temel uygulama işlemleri gerçekleşir. Genellikle çoğu kod bu metod içerisine yazılır. 2- onStart(); onCreate metodu çalıştırılıp görsel öğeler oluştuktan sonra çağırılır. 3- onPause(); Normal uygulama kullanımında, ön plandaki aktivite bazen diğer görsel bileşenler tarafından engellenebilir. Bu ise aktivitenin kısmen durma durumuna girmesine neden olur. Örneğin, yarı saydam özelliğe sahip bir aktivitenin açılması(diyalog penceresi gibi), önceki aktivitenin durmasına neden olur. Aktivite bu durumda kısmen görünse de, aslında aktif değildir ve üzerinde herhangi bir kod yürütülmez. Eğer aktiviteyi kısmen durdurma olayı gerçekleşecekse, sistem onPause() metodunu çağırır ve aktivite kısmen durma durumuna geçer. Örneğin cihazın kamerasını kullanan bir uygulamada, onPause() metodu ile kamera kullanımı kesilebilir. Resim 10.3.1 onPause() Metodu kullanım örneği 4- onResume(); Kullanıcı kısmen durdurulan(onPause) bir aktiviteyi tekrar çalıştırdığı zaman, sistem onResume() metodunu çağırır. Örneğin yukarıda kamera durdurulması ile ilgili verdiğim aktivitenin onResume() metodu aşağıdaki gibi olur. Resim 10.4.1 onResume() Metodu kullanım örneği Sayfa 10 / 14 5- onStop(); ve onRestart(); Aktivitenin tamamen durma durumunda onStop() ve onRestart() adında iki metod kullanılır. Bu iki metod aktivitenin durma ve yeniden başlatma durumlarında, aktivite kontrolünün yapılması için kullanılır. Tamamen durdurma kısmen durdurmanın aksine bütün kullanıcı arayüzlerini durdurur ve görünmez hale getirir. Kullanıcı mevcut aktiviteyi terk ettiğinde sistem tarafından onStop() metodu çağrılır. Bu durumda aktivite artık görülebilir değildir ve kullanıcı için gerekli olmayan neredeyse bütün kaynaklar serbest bırakılır. Aktivite tamamen durma durumundan tekrar çalışma durumuna geçtiği zaman, sistem onRestart() metodunu çağırır. Sistem aynı zamanda aktivitenin görünür olabilmesi için onStart() metodunu çağırır. 6- onDestroy(); Activity’e ait bütün kaynaklar yok edilir. Activity bu noktada yaşam döngüsünü tamamlamıştır. 11. Google Cloud Messaging ve Android Push Notification(Bildirim) Günümüzde gönderilen reklam içerikli SMS'in okunma oranı %0.1 iken gönderilen bir bildirimin okunma oranı %15'tir. Hal böyle olunca mobil uygulamalarda bildirim özelliği kullanmak gelir irade etmek ve son kullanıcıyla doğrudan iletişim kurmak için çok önemli bir noktaya sahip. Google Cloud Messaging kısaca GCM sunucu görevindeki bilgisayarlardan gönderilen verilerin Android tabanlı cihazlardan almaya yarayan bir teknolojinin adıdır. GCM, adından da anlaşılabileceği üzere bulut teknolojisini kullanarak uygulamalara veri göndermeyi sağlar. Örneğin bir android uygulaması yazdınız, maç sonuçlarını gösteriyorsunuz. Uygulamanızın skor bilgisini kullanıcılara güncel bir şekilde göstermesi gerekiyor maç oynandığı süre boyunca. Burada GCM’den haberi olmayan bir kişi, uygulamasına her 10 saniyede bir serverdan “Maç sonucu var mı?” diye sormak suretiyle yanıt bekler. Bu durum hem server yoğunluğuna sebep olur (Uygulamanızı kullanan herkesin telefonunun 10 saniyede 1 servera skorlarda bir değişme var mı diye sorduğunu düşünün) hem de telefonlar sürekli data alıp gönderdiği için mobil veri aktarımı yüksek olur. Ayrıca sürekli bir aktivite hem telefonun ram kaybına sebep olur, hem de akıllı telefonların şarj ömrünün zaten çok kötü olduğu günümüz teknolojisinde, bataryanın çabuk bitmesine sebep olur. GCM aslında tam bu noktada devreye giriyor. GCM sayesinde, server, skorda bir değişim olduğunda telefonlara “Skorlar Sayfa 11 / 14 Değişti!” mesajını gönderiyor. Bu işlemde 3 daldan oluşuyor; Android uygulamamız, Google'ın GCM sunucuları ve bizim sunucumuz. Resim 11.1 Bildirim Şeması 12. Uygulamanın İmzalanıp Google Play Store'a Yüklenmesi Bir uygulamayı yazdık çalışır vaziyette herşeyimiz tamam ancak markete yükleyebilmemiz için o uygulamanın imzlanmış olması gerekiyor bu işlem Android Manifest dosyasının görsel arayüzünde Eclipse ile gelen bir araç sayesinde gerçekleşir. İmzalama bittiğinde program bize *.apk dosyası ve key dosyası çıkartır. Key dosyasının kaybolması ya da şifresinin unutulması halinde o uygulama üzerinde markette herhangi bir güncelleme yapılamaz. Uygulamayı markete yüklemek için ise 25 dolar karşılığında Google Play Developer Console hesabı alınması gerekir. Sayfa 12 / 14 13. Native ve Hybrid Uygulama Geliştirme Native mobil uygulamalar, günümüzde popüler olan iOS ve Android gibi farklı platformlar için farklı programlama dilleri ve geliştirme paketleri gerektirirler. Java, Objective-C gibi programlama dilleri bunların başında gelmektedir. Her platform, cihaz ve programlama dili birbirinden farklı dinamiklere sahip olduklarından farklı uzmanlıklar ve farklı dinamikler gerektirir. Hybrid mobil uygulama tekniği, temel olarak ‘write once, run everywhere’ yani tek bir kod çıktısı ile birden fazla platformda çalıştırılabilmek üzerine geliştirilmiştir.HTML5, CSS3 ve JavaScript kombinasyonu farklı platformlarda, cihazlarda ve ekran çözünürlüklerinde rahatlıkla benzer uyumluluk ile çalıştırılabilmektedirler. Üstelik geliştirmesi zaman ve bütçe açısından az maliyetlidir. Öğrenme eğrisi ise oldukça düşüktür. Ancak unutulmamalıdır ki, uygulama konsepti ve gereksinimleri farklılıklar gösterebilir. Kullanılacak araç ve teknikler yukarıda listelediğimiz kriterler doğrultusunda, uygulama gereksinimlerine göre seçilmelidir.Çok fazla donanım ve etkileşim ihtiyacı için günümüzde native geliştirme tercih edilirken, temel olarak daha düşük donanım gerektiren ve veri yükü daha az olan uygulamalarda hybrid geliştirme tercih edilmektedir. 14. Kaliteli Bir Uygulama İçin Gerekli Bileşenler Stabilite Performans Görünüm ve etkileşim Anlaşılabilirlik ve kullanılabilirlik İleri Geliştirme ve Bakım Süreçleri Kullanacağınız platform, arac(lar)ın eklenti desteği 15. Java ile Yazılan Mobil Uygulamalar Aslında Google Play Store'da gördüğümüz uygulamaların neredeyse %99'luk kısmı Java ile yazıldığı için belirli bir uygulama göstermek gereksiz. Facebook'tan Twitter'a Whatsapp'tan İnstagram'a kadar tüm Android mobil uygulamalar Java dili ile yazılmıştır. 16. Android Geliştirici İş İmkanları Piyasada özellikle de ülkemizde çok az sayıda Android geliştirici bulunduğunu ve mobil pazarın bir yıl içerisinde %150 büyüdüğünü düşünürsek iş imkanlarının bir hayli fazla olduğunu söylemek yanlış olmaz. Herhangi bir şirkette mobil geliştirci olabilir ya da fikrinizi Sayfa 13 / 14 uygulamaya dönüştürüp kendiniz piyasaya sunabilir ve onun üzerinden gelir elde edebilirsiniz. Kaldı ki Android uygulama yazıyor iseniz Java biliyorsunuz demektir bu da şu demek oluyor; Dünyada buzdolabından fırına kadar çoğu elektronik cihazda ve aynı zamanda kurumsal iş yazılımlarında Javanın kullanıldığını düşünürsek. Siz mobil uygulama ve ya masaüstü yazılımı geliştirebilir ya da buzdolabı üreten bir firmada işe girebilirsiniz bu da sektör yelpazesinin ne kadar geniş olduğunu gösteriyor. 17. Referanslar Android Developer: http://developer.android.com/index.html Erişim Tarihi:21.10.2014 Turkcell Geleceği Yazanlar - Android: https://gelecegiyazanlar.turkcell.com.tr/konu/android Erişim Tarihi:22.10.2014 Vikipedi - Android: http://tr.wikipedia.org/wiki/Android_(i%C5%9Fletim_sistemi) Erişim Tarihi:21.10.2014 Vikipedi - Java: http://tr.wikipedia.org/wiki/Java_(programlama_dili) Erişim Tarihi:21.10.2014 Webrazzi: http://webrazzi.com/2014/01/28/mobil-uygulama-gelistirici-native-hybrid/ Erişim Tarihi:22.10.2014 *Raporda geçen diğer bilgiler tamamen bana aittir. Sayfa 14 / 14