BMH-210 MOBİL CİHAZ PROGRAMLAMA Android OS Tanıtımı, Kurulumu, Bileşenleri, Önemli noktalar Dr. Musa ATAŞ
İçerik ANDROID PLATFORMU ANDROID STUDIO KURULUMU ANDROID STUDIO IDE TANITIMI ANDROID KODLAMA STİLİ GELİŞTİRİCİ SEÇENEĞİNİN AKTİF EDİLMESİ ANDROID Studio ile ilk ANDROID uygulamanın geliştirilmesi
ANDROID PLATFORMU
ANDROID Platformuna Giriş Mobil cihazlar için yazılım sistemleri ve kütüphaneleri İşletim Sistemi Çekirdeği (OS Kernel) Sistem Kütüphaneleri Uygulama Çatısı (Application Framework) ANDROID SDK (Software Development Kit) Çeşitli kütüphaneler ve geliştirme araçları Tonlarca dokümantasyon http://developer.android.com/training/index.html adresine gözatmanızı ve incelemenizi öneririm.
ANDROID OS Mobil İşletim Sistemidir. Linux kerneli üzerine kurulmuştur. (UNIX Türevi) Google tarafından geliştirilmektedir. Temmuz 2013 verilerine göre, Google PlayStore da 1 milyonun üzerinde ANDROID uygulamaları bulunmaktadır ve 50 milyar download yapılmıştır. Merkezinde C dili, ara katmanlarda ve sistem kütüphanelerinde C++, ve UI de JAVA dili kullanılmıştır. Resmi geliştirme dili JAVA dır. ARM, MIPS ve x86 mimarilerinde çalışabilmektedir. Son sürümü, 8.0 OREO (2018) da çıkmıştır.
ANDROID Software Stack (Yazılım Yığını)
LINUX Çekirdeği Katmanı OS Standart Servisleri Memory & Process Management (bellek ve işlem yönetimi) File & Network I/O (dosya ve ağ giriş çıkışları) Security (güvenlik) Device Drivers (aygıt sürücüleri) + ANDROID Özel Servisleri Power management (güç yönetimi) Memory sharing & low memory killer (bellek paylaşımı ve düşük bellek) Interprocess communication (işlemler arası haberleşme)
Sistem Kütüphaneleri (System Libraries Layer) Sistem C Kütüphaneleri (libc) Bellek ayırma, matematiksel işlemler v.s. Surface Manager (Yüzey İdarecisi) Display Management Media Framework Audio, Image, Video Webkit Browser engine opengl High performance graphics engine (SGL for 2D android.graphics.drawable lib, OpenGL-ES for 3D android.opengl) http://www.slideshare.net/peterbuck/opengles-and-sgl-2d3d-graphics-acceleratingtechnologies SQLite Relational database
ANDROID Runtime Core JAVA kütüphaneleri (JVM) Temel JAVA Sınıfları (Common data structures, file I/O, concurrency and threading issues) -> java.*, javax.* Android paketleri (i.e. Lifecycle of mobile app) -> android.* Internet/Web/Network services -> org.* Unit test -> junit.* Dalvik Virtual Machine (DVM) Uygulamalar JAVA da yazılır JAVA byte code olarak derlenir DX converter bytecode ları uzantısı *.dex olan dosyalara çevirir. DVM dex dosyalarını çalıştırır (execution)
ANDROID application workflow/overview
Dalvik Virtual Machine DVM (Dalvik Sanal Makinesi) Designed for resource-constrained environments (kaynak kısıtlı aygıtlar için tasarlanmıştır) Slower CPU (ARM Cortex) (Intel ve AMD işlemcilerine göre nispeten düşük hız) Less Memory Limited battery life For more information see also this video https://www.youtube.com/watch?v=ptjedozexpm
Application Framework (Uygulama Çatısı/Çerçevesi) Package Manager : mobil cihaza yüklenmiş tüm uygulamaların tutulduğu bir çeşit veri tabanıdır. Uygulamalar kendi aralarında ortak verileri veya servisleri kullanabilirler. Window Manager: Uygulamayı meydana getiren pencerelerin yönetildiği yerdir/sistemdir. View System: bilinen user interface objelerini sağlayan birimdir. (i.e text, button, icons v.s.) Resource Manager: non-compiled entities as images, strings,layout files etc. (derlenmemiş varlıklar mesela görüntüler, katarlar, planlar vb.)
Application Framework (Uygulama Çatısı/Çerçevesi) Activity Manager: uygulamalar arasında geçişleri, navigasyonu ve bir uygulamanın ne kadar süre boyunca çalışacağını yönetir. Content Provider : Uygulamalar çalıştığı zaman ihtiyaç duydukları yapısal bilgileri bu içerik sağlayıcısı veri tabanından alırlar. Mesela, telefon adres defterindeki bilgiler, telefon açma uygulaması, twitter, e- mail veya mesaj uygulamalarında istenebilir.
Application Framework (Uygulama Çatısı/Çerçevesi) Location Manager: GPS sistemlerinde mesela, gerekli olan lokasyon ve hareket hatta yön bilgilerini sağlamaya yarar. (Google maps uygulamasında olduğu gibi) Notification Manager: Önemli olaylar olacağı zaman, uygulamanın notify etmesi mesela sinyal vermesini sağlayan sistemdir. XMMP Service: Extensible Messaging and Presence Protocol (XMPP) is a communications protocol for message-oriented middleware based on XML. (XML tabanlı mesaj yönelimli ara-katman haberleşme protokolüdür.
Applications Layer (Uygulamalar Katmanı) Bu katmanda Application Framework Katmanındaki API lar kullanılarak 1. Androiddeki standart uygulamalar (üstteki) 2. Üçüncü parti uygulamalar (başka geliştiricilerin) 3. Geliştiricinin kendi ürettiği uygulamalar çalıştırılmaktadır.
ANDROID KURULUMU
ANDROID Developer Tools (ADT) kurulumu
Android Studio Kurulumu Bilgisayar ve network hızınıza bağlı olarak yaklaşık 20-50 dk. arası kurulum gerçekleşmektedir.
ANDROID STUDIO IDE TANITIMI
ANDROID KODLAMA STİLİ
Yanlış Girinti (Indentation) Örneği
Doğru Girinti (Indentation) Örneği
Program bloklarınızı küçültün Yazdığınız fonskiyonlar/metodlar olabildiğince küçük ve atomik olmalıdır. Neden? Program satırları ortalama 100 karakter civarında olmalıdır, uzun cümleler alta alınmalıdır. Bu şekilde kod okunurluğu artmaktadır.
Kurallar Sınıf isimleri büyük harfle başlarlar. AppFrame gibi. Bileşik kelimeler her bir kelimenin ilk harfi büyük yazılmalıdır. Sabitler tamamen büyük harflerle yazılmalıdır. Değişken isimlerinde tamamen küçük harfler kullanılır. Ancak bileşik kelime yapılacaksa ilk kelimenin ilk harfi küçük sonra eklenen her kelimenin ilk harfleri büyük olmalıdır. Public erişim belirleyicisi olan her ifade için açıklama yazılsa iyi olur. Bunun javadoc belirleyicisi olan /** ifade */ kullanılır.
Kurallar Ata sınıftan türeyen sınıflarda tekrar yazılan (ezilen) her method un başına @Override eklemeniz gerekir. Neden? Artık ileride kullanılması düşünülmeyen methodlar için başına @Deprecated annotation kelimesi eklenmelidir.
Kurallar Mümkün olan en dar kapsama alanı olacak şekilde değişken kullanın.
Tüm yerel değişkenlerin ilk değerlerini tanımlandıkları zaman atayın.
GELİŞTİRİCİ SEÇENEĞİNİN AKTİF EDİLMESİ
Geliştirici Seçenekleri ni açmak için: Ayarlar menüsüne ardından açılan menüde en altta bulunan Telefon hakkında (veya Cihaz hakkında) seçeneği seçilir. Samsung ve bazı diğer markalarda Telefon hakkında menüsü Genel altındadır. Bazı cihazlarda Telefon/Cihaz Bilgisi menüsü altında bir alt menü şeklinde Yazılım menüsü vardır. Öyle ise o menünün içine girin. Açılan pencerede yine en altta olan Derleme numarası yazan yere üst üstü 7 kez dokunduktan sonra geliştirici açılmış olur. Her dokunmamızda Geliştirici olmanıza 4 adım, kaldı 3 adım kaldı şeklinde bilgi çıkacaktır.
Run tuşuna bastıktan sonra
DDMS nedir? Dalvik Debugging Monitoring Service kelimelerinin kısaltılmış şeklidir. Android Studio da alt kısımda TODO nun yanında yer alan Android Monitor sekmesine basılarak açılan ADB yani Android Debug Bridge ekranıdır. Bu ekranda debugging işlemlerinin yanısıra, loglama, threading ve sistem kaynaklarının izlenmesi amacıyla kullanılmaktadır.
LogCat Ekranı LogCat ekranına program üzerinden loglama yapmak amacıyla kullanılan sınıf android.util.log isimli sınıftır. Bu sınıf kullanılarak, e, w, i, v, d seçeneklerinde çeşitli seviyelerde loglama yapılarak programın takibi ve önemli yerlerinde bilgilendirmeler yapılabilir. i: Info bilgi verme amaçlı mavi text ile yazılmıştır. w: Warning, uyarı anlamına gelir, turuncu renktedir. e: Error, hata manasındadır, kırmızı renk v: Verbose, gereksiz bilgi ve fazladan çıktı d: Debug hata ayıklama amaçlıdır.
Log lama pattern i Loglama yaparken çeşitli pattern ler kullanılabilir. Örnek olması açısından Log.w( MainActivity.onCreate, Aktivite yapıldı ); Log.e( DBGateway.Insert, Kayıt eklenemiyor: +ex.getmessage()); Log fonkisyonlarının ilk parametresi tag bilgisi, ikinci parametresi ise mesaj veya açıklama bilgisini içermektedir.
Android Emulatörü Telnet üzerinden yönetme Android emülatör aslında localhost da 5554 portunda ağ üzerinde haberleşebilen bir cihazdır. Bundan dolayı telnet ile bu cihaza bağlanıp yönetebiliriz. Bunun için komut satırı penceresini açmalıyız. Winkey+R bastıktan sonra cmd yazıp entere basıyoruz. Veya internetten CmDer yazılımını indirip kuruyoruz. http://cmder.net/ sayfasından mini veya full seçeneğini kullanabilirsiniz.
Android Menüsü
Manifest bölümünde AndroidManifest.xml dosyası bulunur. Bu dosyada XML formatında kullanılan kütüphaneler, verilen izinler (mesela kamera gibi), aktivite ve servisler gibi temel elemanlar vardır. Java kısmında java kaynak kodlarınız bulunmaktadır. Res klasöründe ise normalde app ile birlikte derlenmeyen ancak beraberinde tutulan yan unsurlar bulunur. Mesela görseller, drawable de tasarımlar layout kısmında tutulurlar. Resource yani kaynak dosyalarına her projede ide tarafından üretilen ve final sınıf olan R sınıfı kullanılarak erişim yapılmaktadır. R sınıfının değiştirilmesi engellenmiştir sadece kullanıma açıktır. (read only)
İLK UYGULAMA
Android Studio ile İlk Uygulama Örneği Android uygulamasının adı : ColorSelector SRS (Software Requirement Specification): 1. Ekranın üst kısmına «Background Color Selector» bilgisi yazılmalı. 2. Ekranda alt alta 3 adet buton olmalı. 3. Butonların üzerlerinde red, green, blue yazılmalı. 4. Kullanıcı (User) bu butonlara tıkladığında arka plan zemin rengi buton üzerindeki isimlerle alakalı bir şekilde kırmızı, yeşil veya mavi olarak değiştirilmelidir.
Android Studio yu Çalıştırma
Virtual Device Yükleme
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context="com.example.bap1.colorselector.mainactivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello World!" android:id="@+id/textview" /> <Button android:text="red" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="17dp" android:id="@+id/btnred" android:layout_below="@+id/textview" android:layout_alignparentleft="true" android:layout_alignparentstart="true" android:layout_marginleft="14dp" android:layout_marginstart="14dp" /> <Button android:text="green" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="23dp" android:id="@+id/btngreen" android:layout_below="@+id/btnred" android:layout_alignleft="@+id/btnred" android:layout_alignstart="@+id/btnred" /> <Button android:text="blue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnblue" android:layout_margintop="28dp" android:layout_below="@+id/btngreen" android:layout_alignleft="@+id/btngreen" android:layout_alignstart="@+id/btngreen" /> <Button android:text="show message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/btnblue" android:layout_alignleft="@+id/btnblue" android:layout_alignstart="@+id/btnblue" android:layout_margintop="24dp" android:id="@+id/btnmessage" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputtype="textpersonname" android:ems="10" android:layout_aligntop="@+id/btnmessage" android:layout_torightof="@+id/btnmessage" android:layout_toendof="@+id/btnmessage" android:layout_marginleft="13dp" android:layout_marginstart="13dp" android:id="@+id/edittext" /> <Button android:text="show Message 2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="21dp" android:id="@+id/btnmessage2" android:layout_below="@+id/btnmessage" android:layout_alignleft="@+id/btnmessage" android:layout_alignstart="@+id/btnmessage" /> </RelativeLayout>
ColorSelector Android Uygulaması Aşağıdaki videodaki adımları izleyerek colorselector örneğini çalıştırınız. https://www.youtube.com/watch?v=qraqbunzpci&index=7&list=pl c7fmpfzwlvjb9n5joyqi73nlj_etxper
Minimum Api Level nasıl değiştirilir?
Sync yazan yere tıklayın Projeyi menüden Build yazan yerden Rebuild yapın. Artık projenizin minimum api seviyesi belirlediğiniz numaraya adapte edilmiştir.
Android de uygulama geliştirirken dikkat edilmesi gereken kurallar View nesnelerine layout tasarım ekranında id verirken (xml) ve aynı zamanda kaynak dosyasında (java) değişken olarak tanımlarken birçok geliştirici tarafından kabul görmüş kısaltmaları kullanmak yerinde olacaktır. Bunun için aşağıdaki önekler kullanılabilir; TextView lbl lbl_isim, lblisim EditText txt txt_password, txtpassword Button btn btn_gonder, btngonder CheckBox chk chk_sec, chksec RadioButton rdo rdo_ekle, rdoekle
Diğer önemli bir nokta da, aktivite kaynak dosyasında (java), nesnelerin findviewbyid metodu kullanılarak yapıldığı yerin seçilmesidir. Bazı kaynaklarda nesneler oncreate metodunun içerisinde lokal olarak tanımlanmışlardır. Ve gerekli olay-çağrı metodları da bu metodun içerisinde gerçekleştirildiği görülmektedir. Bu tarz bir yaklaşım her ne kadar programın çalışması açısından sorun teşkil etmese de program içerisinde başka bir metoddan ilgili değişkenlere ulaşım imkansız olacağından değişkenlerin mümkünse global özellikli sınıf değişkeni olarak tanımlanmasında fayda bulunmaktadır. Hatta, oncreate olayında setcontentview komutundan hemen sonra, yazacağınız bir init() metodu içerisinde nesne üretimini gerçekleştirmeniz kod karmaşıklığını azaltarak okunurluğu arttıracaktır.
farklı onclicklistener kodlama yaklaşımları