bh210-mobİl cİhaz programlamamusaatas.siirt.edu.tr/android/dersnotlari/bolum_1.pdf · değişken...

78
BMH-210 MOBİL CİHAZ PROGRAMLAMA Android OS Tanıtımı, Kurulumu, Bileşenleri, Önemli noktalar Dr. Musa ATAŞ

Upload: others

Post on 06-Sep-2019

13 views

Category:

Documents


0 download

TRANSCRIPT

BMH-210MOBİL CİHAZ

PROGRAMLAMAAndroid 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-accelerating-

technologies

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 applicationworkflow/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 filesetc. (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 lokasyonve hareket hatta yön bilgilerini sağlamaya yarar. (Google mapsuygulaması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ılarak1. 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 KurulumuBilgisayar 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 AndroidMonitor 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, drawablede 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=PLc7fMPfZwlVjb9N5jOyqI73nlJ_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ı