android-programlama-dili-java-haydar

advertisement
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
Download