Upload
baris-akkurt
View
1.311
Download
5
Embed Size (px)
DESCRIPTION
A presentation about mobile programming
Citation preview
www.smartiks.com.tr
Mobil Programlamaya Giriş ve Android Eğitimi
7 Mart 2014 CumaEğitmen :D. Barış Akkurt
Barış Akkurt2
İÇİNDEKİLER-1
12.3.2014
Bölüm – 1 : Mobil Platformlar Hakkında
• Genel Bilgiler • Tarihçe
Bölüm – 2 : Windows Phone
• WP Platformu• WP Geliştirme Ortamı
• Merhaba Dünya Uygulaması
Bölüm – 3 : iOS Platformu
• iOS Genel Bilgiler• iOS Geliştirme Ortamı• Objective C’ye Giriş
• Merhaba Dünya Uygulaması
• PC’lere Mac OS Kurulumu
Barış Akkurt3
İÇİNDEKİLER-2
12.3.2014
Bölüm – 4 : Android
• Genel Bilgiler Android İç Yapısı Aktivite Yaşam Döngüsü Geliştirme Araçları Terimler Derleme
• Demo: Merhaba Dünya Uygulaması
• Shared Preferences• Layout Yönetimi• Checkbox, Radio button
• Spinner ve Kamera• ListView Örneği• Fragment• Content Provider • Sensörler• Best Practices• Google Maps• Test• Uygulama Yayınlama• Demo: Veritabanı
Kullanan Uygulama
Barış Akkurt4
• Mobil Uygulama Geliştirme Nedir?Telefon, tablet, PDA vs. tipi düşük güç tüketen cihazlar
• Mobil Uygulama TürleriNative app, web app ve hybrid app
• Dikkat Edilmesi Gerekenler• Ufak Ekranlar• Değişen Ekran Boyları• Lokalizasyon• Küçük bellek• Az mikroişlemci gücü• Telefonun pili
GENEL BİLGİLERBölüm 1 – Mobil Platformlar Hakkında
12.3.2014
Barış Akkurt5
• 1973, İlk cep tel., Motorola, 1.1 kg, 23 cm
• 1983, İlk ticari cep tel., Motorola, 4000$
• 1990’ların sonu: Cep tel. Yaygınlaşıyor.
• 1997 Nokia 6110– Oyunlar: Memory, snake, logic– Hesap makinesi, saat, takvim– Profile ayarları
• 2000: Windows Mobile
TARİHÇEBölüm 1 – Mobil Platformlar Hakkında
12.3.2014
Barış Akkurt6
• 2002 Samsung SGH-T100: İlk LCD display• 2006: Nokia N95, Akıllı telefon, 332 MHz
Cpu, 160 MB RAM• 2007: iPhone• 2008: Android işletim sistemli ilk cep tel.• 2010: Windows Phone• Tarihten bazı yazılım platformları: LiMo4,
Maemo, Meego, Palm OS, webOS, Windows Mobile
TARİHÇE - 2Bölüm 1 – Mobil Platformlar Hakkında
12.3.2014
Barış Akkurt7
MOBİL PLATFORMLAR GENEL
Blackberry 10 Symbian Firefox OS
C, C++, Qt, HTML 5, JavaScript vs.
Java ME, Qt, Python for Symbian
HTML 5 Apps
Bölüm 1 – Mobil Platformlar Hakkında
12.3.2014
Barış Akkurt8
İlk sürüm: 8 Kasım 2010, Kuzey AmerikaGüncel sürüm: WP 8.1Programlama dili: C#IDE: Visual Studio
WP’YE GİRİŞBölüm 2 – Windows Phone
12.3.2014
Barış Akkurt9
Kurulum öncesi:• File>New Project>Windows Phone>Install WP
SDK
Kurulum sonrası:• File>New Project>Windows Phone>WP
Application
WP sürümünü seç.MainPage.xaml sayfanın layoutu.WinForm ve ASP.Net benzer toolbox’tan sürükle.
WP – MERHABA DÜNYABölüm 2 – Windows Phone
12.3.2014
Barış Akkurt10
• Programlama Dili: Objective C• IDE: Xcode• iPhone, iPad, Apple Tv için uygulamalar• iOS, XNU çekirdeğinin bir türünü kullanır• iOS SDK şu bölümlerden oluşur:
I. Cocoa Touch: UI frameworkII. Media: OpenGL ES, video, audio işleriIII. Core Services: Networking, thread’lerIV. Mac OS X kernel: soketler, güç yönetimi
IOS’A GİRİŞBölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt11
• iBoot, boot disk image’ı indir.• BIOS değişiklikleri:
-First boot device Cd-PCH SATA Control Mode=AHCI-Power Management Setup=64 bit
• iBoot (or Empire EFI) boot disk ve çalıştır.
• iBoot supported ekranı gelince, Mac OS X dvd’sini koy, F5’le
• Dil seçimi ekranı gelir.
PC’YE MAC OS X KURULUMU
Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt12
• Disk bölümü ekranı gelir. Bu işlem yapılırken GUID partition table seç.
• Kurulumu yap. Sonra tekrar iBoot ile başlat.
• MacOS açılır, bununla Multibeast isimli aracı kur.
• iBoot’u çıkar. Bilgisayarı baştan başlat.
PC’YE MAC OS X KURULUMU
Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt13
• Genel amaçlı• C üzerine Smalltalk özellikleri
eklenmiş, dolayısıyla nesne yönelimli• Next, NeXTSTEP işl. sis. için
geliştirmiş• Kaynak kod .m, başlık dosyaları .h
uzantılı
OBJECTIVE C’YE GİRİŞBölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt14
• int a, b;• a=10;• const int LENGTH=5;
• Yorumlar /* ile */ arasına yazılır.• Kaçış karakterleri \n, \t ...
OBJECTIVE C – DEĞİŞKEN, SABİT, YORUM
Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt15
• Tamsayı türleri
OBJECTIVE C – TEMEL VERİ TÜRLERİ
Tür Depolama boyu Aralık
char 1 byte -128 to 127 or 0 to 255
unsigned char 1 byte 0 to 255
signed char 1 byte -128 to 127
int 2 or 4 bytes -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647
unsigned int 2 or 4 bytes 0 to 65,535 or 0 to 4,294,967,295
short 2 bytes -32,768 to 32,767
unsigned short 2 bytes 0 to 65,535
long 4 bytes -2,147,483,648 to 2,147,483,647
unsigned long 4 bytes 0 to 4,294,967,295
Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt16
• Tamsayı türleri
• void türü
OBJECTIVE C – TEMEL VERİ TÜRLERİ-2
Tür Depolma Boyu Aralık Duyarlılık
float 4 byte 1.2E-38 to 3.4E+38 6 decimal
Double 8 byte 2.3E-308 to 1.7E+308 15 decimal
long double 10 byte 3.4E-4932 to 1.1E+4932 19 decimal
Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt17
• while(koşul){ ifadeler; }• for(başlangıç; koşul; arttırım)
{ ifadeler; }• do { ifadeler; } while(koşul);• if(koşul){ifadeler; } else { ifadeler; }• switch(koşul){ case A: ifadeler; ....}
Bu yapıların tümü C# ve Java ile aynı.
OBJECTIVE C – KARAR VE DÖNGÜ YAPILARI
Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt18
• type arrayName [ arraySize ];• Ör: double balance[10];• double balance[5] = {1000.0, 2.0,
3.4, 17.0, 50.0};• Fonksiyonlar:
void aFunction() { //do something}
• İki yapı da C’ye benzerdir.
OBJECTIVE C – DİZİLER VE FONKSİYONLAR
Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt19
• İşaretçi: Başka bir değişkenin adresini tutan değişken
• type *var_name;• Ör: int var = 20; /* değişken tanımlama */int *ip; /* işaretçi tanımlama */ip = &var; /* işaretçide adres tut *//* ekrana bir adres basar*/NSLog(@"Address stored in ip variable: %x\n", ip );/* ekrana 20 basar */NSLog(@"Value of *ip variable: %d\n", *ip );
OBJECTIVE C - İŞARETÇİLER
Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt20
• Sınıflar @interface ve @implementation olarak 2 bölümde tanımlanır.
// Car.h#import <Foundation/Foundation.h>@interface Car : NSObject {}
@property (copy) NSString *model;- (void)drive;
@end
OBJECTIVE C - SINIFLARBölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt21
// Car.m#import "Car.h"@implementation Car { // Private instance variables double _odometer;}@synthesize model = _model; - (void)drive { NSLog(@"Driving a %@. Vrooooom!", self.model);}@end
• Nesne yaratmaCar *toyota = [[Car alloc] init];[toyota setModel:@"Toyota Corolla"];[toyota drive];
OBJECTIVE C – SINIFLAR-2Bölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt22
- (int)addX:(int)x toY:(int)y { int sum = x + y; return sum; }- İnstance metotu demektir. Ve int değer döner [ -(int) ]Parameters are specified with a colon after the name, a data type, and their own name.- :(int)xGarip olan kısım:toY:(int)yint newScore = [score addX:24 toY:500];
OBJECTIVE C - METOTLARBölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt23
• @interface derived-class: base-class@interface Person : NSObject{ NSString *personName; NSInteger personAge;}
OBJECTIVE C - KALITIMBölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt24
• Protocol: Java’daki interface• Bellek yönetimi: Automatic Reference
Counting• Category: Olan bir sınıfa ek özellikler
eklemek içindir ve bunu kalıtım olmadan yapmaya imkan verir.
• Block: Objective C’nin anonymous fonksiyonları
OBJECTIVE C - DİĞERLERİBölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt25
• Xcode – New>Project>Select Single View App
• Product Name is Hello.• Device Family is set to iPhone.• Use Storyboards is not selected.• Use Automatic Reference Counting is selected.-Click Next and pick a location to store the project. Build and Run by Product>Run-Open the ViewController.xib file. This brings up the Interface Builder editor-Drag a Label into the view and resize it -Build and run
IOS – MERHABA DÜNYABölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt26
IOS – MERHABA DÜNYA-2
IOS – ÇALIŞMA ORTAMIBölüm 3 – iOS Platformu
12.3.2014
Barış Akkurt27
ANDROİD GENEL BİLGİLER
• Android: Linux çekirdeği tabanlı işletim sis.• Apache Lisansı• En çok uygulama Android platformunda (1
milyon)• İlk sürüm: 23 Eylül 2008• Güncel sürüm: 9 Aralık 2013, 4.4.2 Kit Kat• Programlama dili: Java• IDE: Eclipse• Telefon, tablet haricinde; akıllı saat, Google glass,
ev otomasyonu, voip telefonu, kulaklık akıllı tv• 2013 sonu itibariyle akıllı telefonlar içinde %81.3
Pazar payı
Bölüm 4 – Android
12.3.2014
Barış Akkurt28
ANDROİD GENEL BİLGİLER-2
Bölüm 4 – Android
12.3.2014
Barış Akkurt29
Linux çekirdeğinde yapılan değişiklikler ashmem (Android Shared Memory), a file-based shared
memory system. Binder, an inter-process communication (IPC) and remote
procedure call (RPC) system. logger, a high-speed in-kernel logging mechanism
optimized for writes. Paranoid Networking, a mechanism to restrict network I/O
to certain processes. pmem (Physical Memory), a driver for mapping large
chunks of physical memory into user-space. Viking Killer, Android’s “kill least recently used process”
logic under low memory conditions. wakelocks, Android’s unique power management solution
ANDROİD ÇEKİRDEĞİBölüm 4 – Android
12.3.2014
Barış Akkurt30
• Aktivite• Intent• Dalvik• Content Provider (içerik sağlayıcı)• Broadcast receiver• Service• Resource
TERİMLERBölüm 4 – Android
12.3.2014
Barış Akkurt31
ANDROİD’İN YAPISIBölüm 4 – Android
12.3.2014
Barış Akkurt32
AKTİVİTE YAŞAM DÖNGÜSÜ
Bölüm 4 – Android
12.3.2014
Barış Akkurt33
• IDE: Eclipse, Android Studio, Netbeans
• DDMS: Dalvik Debug Monitor System• Sqlite• Emülatör
GELİŞTİRME ARAÇLARIBölüm 4 – Android
12.3.2014
Barış Akkurt34
ADIM ADIM UYGULAMA GELİŞTİRME
Bölüm 4 – Android
12.3.2014
Barış Akkurt35
DERLEME İŞLEMİBölüm 4 – Android
12.3.2014
Barış Akkurt36
• Arayüz ileWindow>AVD Manager>New• Konsol ile$ android create avd -n <name> -t <targetID> [-<option> <value>] ... C:\Users\{yourUserName}\.android\avd\{yourAVDName}.avd
Hızlandırmak için:Intel HAXM
EMÜLATÖRBölüm 4 – Android
12.3.2014
Barış Akkurt37
• Ufak farklar Ör: Java.version 0 döndürür
• ClassName.class• ClassName.this• Nested class
ANDROID İÇİN JAVABölüm 4 – Android
12.3.2014
Barış Akkurt38
MERHABA DÜNYA UYGULAMASI
Merhaba dünya uygulaması, loglama, buton ile yeni aktivite açma.
Bölüm 4 – Android
12.3.2014
Barış Akkurt39
İZİNLER
Telefonun bazı özellikleri için izin gerekebilir.<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.app.myapp" > <uses-permission android:name="android.permission.RECEIVE_SMS" /> ...</manifest>
Ör: sms alma, sms yollama, internet, yer bilgisi, kamera, titreşim, bluetooth vs.Tümü: http://developer.android.com/reference/android/Manifest.permission.html
Bölüm 4 – Android
12.3.2014
Barış Akkurt40
• Uygulama ayarlarını saklamak için.
SHARED PREFERENCES
shared_pref.java shared_pref.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt41
• Action bar Android 3.0 (API Level 11) ile geldi.
• <uses-sdk android:minSdkVersion="11" ... />
• res/menu/main_activity_actions.xml dosyasına menüyü ekle
ACTION BAR ÖRNEĞİ
action_bar.txt
Bölüm 4 – Android
12.3.2014
Barış Akkurt42
• Linear Layout• Relative Layout• Table Layout• GridLayout• Absolute Layout• Frame Layout
LAYOUT YÖNETİMİBölüm 4 – Android
12.3.2014
Barış Akkurt43
LINEAR LAYOUT
• android:orientation= vertical & horizontal
linear_layout.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt44
• Relative Layout: View’ların birbirine göre yerleştirildiği yerleşim düzeni.
RELATIVE LAYOUT
relative_layout.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt45
TABLE LAYOUT
table_layout.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt46
GRID LAYOUT
grid_layout.xml grid_layout.java
Bölüm 4 – Android
12.3.2014
Barış Akkurt47
• Checkbox
• Radio button
• Spinner
CHECKBOX, RADIO, SPINNER
checkbox.java checkbox.xml
radio_button.java radio_button.xml
spinner.java spinner.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt48
• DatePicker
• TimePicker
DATE PICKER VE TIME PICKER
datepicker.javadatepicker.xml
timepicker.javatimepicker.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt49
LISTVIEW
list_item.xml listview.java strings.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt50
1-Olan Kamera uygulamasını kullanmak2-Direk Android Kamera API’yi kullanmak1. yöntem ile örnek:
KAMERA
camera.java camera.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt51
• A Fragment represents a behavior or a portion of user interface in an Activity. Fragment, alt aktivite gibi düşünülebilir.
FRAGMENTBölüm 4 – Android
12.3.2014
Barış Akkurt52
• Fragment’ların kendi layoutu ve yaşam• döngüsü vardır.• Aktivite çalışırken fragment eklenebilir• çıkarılabilir.• Bir aktivitede birden çok fragment • olabilir.• Bir fragment birden fazla aktivitede• kullanılabilir.• Fragment’lar API Level 11’de geldi.
FRAGMENT-2Bölüm 4 – Android
12.3.2014
Barış Akkurt53
FRAGMENT-3: ÖRNEK
activity_main.xml LM_Fragment.java lm_fragment.xml
MainActivity.java PM_Fragment.java pm_fragment.xml
strings.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt54
Android’de 3 genel sensör kategorisi var: Hareket sensörü Çevre sensörü Pozisyon sensörüprivate SensorManager mSensorManager;mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);tenderdetailapproval//tüm sensörlere ulaşList<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
SENSÖRBölüm 4 – Android
12.3.2014
Barış Akkurt55
• Content provider başka uygulamalara içerik sağlayan bileşen.
• Örnek: Bir content provider’ı kullanan uygulama
CONTENT PROVIDER
content_provider.java list_item.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt56
Teoride şu adımlardan oluşur:1. ContentProviderBase sınıfını extend
eden bir sınıf yaz.2. Verilere erişmek için kendi URI
adresini tanımla3. Verileri kendi veritabanında tut.4. Content provider sorgularını
gerçekle5. AndroidManifest’te aktivite’ye
provider tagı ekle.
CONTENT PROVIDER YAZMAK
Bölüm 4 – Android
12.3.2014
Barış Akkurt57
• Windows>Android SDK Manager’dan Google Play Services’i indir.
• Eclipse’e android-sdk-windows\extras\google\google_play_services\libproject\google-play-services_lib import et.
• Keytool ile bir Google Maps API key al.• Google API Console’da Android key’i yarat• Yeni Android projesi yarat. • Bu projeye Google Play Services’i ekle.
GOOGLE MAPSBölüm 4 – Android
12.3.2014
Barış Akkurt58
• Map Key’ini Manifest dosyasına ekle.• Gerekli izinleri ver• Nihayet kodlama
GOOGLE MAPS-2
maps.java maps.xml
Bölüm 4 – Android
12.3.2014
Barış Akkurt59
• İki altın kural:1. Don't do work that you don't need to do.2. Don't allocate memory if you can avoid it.
Performans: float kullanmaktan kaçın, sabitleri final yap vs. vs.Arayüz: iphone’u kopyalama, vertical ve portrait modları destekle vs. vs.Developer doc’ta ayrıntılar var.
BEST PRACTICESBölüm 4 – Android
12.3.2014
Barış Akkurt60
• JUnit’in Android için extension’ı var.• File > New > Other > Android Test
Project• android->sdk->platform-tools• $ adb shell monkey -v 100• Daha fazla bilgi için; Activity, Service,
Content provider, UI testing ile ilgili sayfalar var Android docs’ta.
TESTBölüm 4 – Android
12.3.2014
Barış Akkurt61
• Uygulama sağ tık, Export >Export Android App
• Sihirbazı bitir (private key oluşturma vs.)
• Google Play admin arayüzüne gir, Add New App
• .apk dosyanı upload et, gerekli şeyleri doldur.
http://stackoverflow.com/questions/5119633/to-do-list-before-publishing-android-app-to-market
UYGULAMA YAYINLAMABölüm 4 – Android
12.3.2014
Barış Akkurt62
• Sqlite kullanan bir uygulamanın demosu
VT KULLANAN UYGULAMABölüm 4 – Android
12.3.2014
Barış Akkurt63
• Yeni Başlayanlar İçin Kaynaklar- Programming Mobile Applications for Android Handheld Systems, Adam Porter, coursera.org- Hello Android, Ed Burnette, The Pragmatic Bookshelf- Beginning Android 4 Application Development, Wei-Meng Lee, Wrox Publishing- Google’ın Android sayfası: http://developer.android.com/training/index.html- Blog: http://www.androidhive.info/
• Orta ve İleri Düzey Kaynaklar- Google Android Best Practices, http://developer.android.com- Android Programming: Pushing The Limits, Erik Hellman, Wiley Publishing
REFERANSLAR VE KAYNAKLAR
Bölüm 4 – Android
12.3.2014
Teşekkürler
D. Barış Akkurt