Mobil İşletim Sistemleri

Emre Emanet
17 min readMay 28, 2020

iOS İşletim Sistemi

İşletim sistemi cihazın donanımıyla kullanıcı etkileşimi arasında ki yönetimi sağlayan yazılımdır. iOS işletim sistemi Apple Inc. tarafından ilk olarak 2007 yılında iPhone, iPod Touch ve Apple TV için yayınlandı. Apple bilgisayarlarda kullanılan OS X işletim sisteminin mobil versiyonudur. App Store ve Apple sertifikalı uygulamalar haricinde cihaza uygulama kurulamamasından dolayı kapalı bir kutu olarakta bilinir. Diğer mobil işletim sistemlerine göre güvenlik seviyesi çok daha fazladır. iOS işletim sisteminde geliştirilen uygulamalar tersine mühendislik (Reverse Engineering) ile deşifre edilemez.

iOS işletim sisteminin ara yüzünün zamanla gelişimi

iOS işletim sistemi Face ID ile yüz tanımayı çok başarılı bir şekilde kullanmayı başarmıştır. Tuş kilidi açma, alarmı susturma ve kimlik doğrulama özelliklerini etkin bir şekilde yüz tanıma ile entegre edildiğini görüyoruz. Yurt dışında Apple Pay ile yüzünüzü tanıtarak ödeme işlemlerini gerçekleştirebiliyorsunuz fakat; ülkemizde henüz izinleri olmadığı için bu özellik hizmette değil.

iOS Face ID Sistemi

iOS sürümleri senkron ve sık olarak çıkmaktadır. Android’in aksine çıkan güncel iOS yazılımın sürümü iPhone’ların tamamına aynı anda çıkmaktadır. iOS uygulamaların yayınlandığı ve indirildiği platform olan App Store’da yaklaşık 2,1 milyon uygulama mevcuttur. Android uygulamaların yayınlandığı platform olan Play Store’da ise uygulama sayısı 2018 haziranda 3,6 milyona ulaşmıştı ancak Play Store’un son zamanlarda uygulamaya başladığı kurallar ile beraber bu kurallara uymayan uygulamalar yayından kaldırıldı ve şu anda mevcut uygulama sayısı 2,6 milyon civarında.

iOS işletim sistemi uygulama geliştirmek için Objective-C, C, C++, Swift dillerini desteklemektedir.

iOS işletim sistemi mimarisini incelediğimiz zaman 4 katmandan oluşmaktadır.

iOS Sistem Mimarisi

Cocoa Touch Katmanı (Cocoa Touch Layer)

Cocoa Touch katmanı, iOS uygulamaları oluşturmak için temel çerçeveler içerir. Bu çerçeveler uygulamanızın görünümünü tanımlar. Ayrıca, temel uygulama altyapısı ve çoklu görev, dokunmaya dayalı giriş, push bildirimleri ve birçok üst düzey sistem hizmeti gibi temel teknolojiler için destek sağlar. Uygulamalarımızı tasarlarken, ihtiyaçlarımızı karşılayıp karşılamadıklarını görmek için önce bu katmandaki teknolojileri araştırmalıyız.

Çerçeveler şunları içerir:

MessageUI.framework [3]– Message UI Framework’ü, kullanıcıların uygulamanız içinden e-posta iletileri oluşturmasına ve göndermesine izin vermek için ihtiyacınız olan her şeyi sağlar. Aslında, çerçeve, kullanıcının e-posta adresleme bilgilerini ve mesaj içeriğini girdiği kullanıcı arabirimi öğelerini bile sağlar. Alternatif olarak, bu bilgiler uygulamanızda önceden tanımlanabilir ve daha sonra kullanıcının göndermeden önce düzenlemesi ve onaylaması için görüntülenebilir.

EventKitUI.framework [4]– Takvimle ilgili olayları görüntülemek ve düzenlemek için standart sistem arabirimlerini sunmak için görünüm denetleyicileri sağlar.

GameKit.framework [5]– Bu framework, birden fazla cihaz ve kullanıcı arasında eşler arası bağlantı ve sesli iletişim sağlar ve aynı uygulamayı çalıştıranların etkileşim kurmasına izin verir. Bu özellik ilk kez tanıtıldığında Apple tarafından öncelikle çok oyunculu oyunlarda (dolayısıyla isim seçimi) kullanılacağı öngörülüyordu, ancak bu özellik için olası uygulamalar açıkça oyun geliştirmenin çok ötesine uzanıyor.

MapKit Framework [6]– Bir iPhone ile kayda değer bir zaman geçirdiyseniz, belirli bir alanın haritasını almak veya sizi istediğiniz hedefe götürmek için yol tarifleri oluşturmak için Haritalar uygulamasını bir kereden fazla kullanma şansınız vardır. Harita Kiti çerçevesi, kendi uygulamalarınızda harita tabanlı yetenekler oluşturmanızı sağlayan bir programlama arabirimi sağlar. Bu, diğer şeylerin yanı sıra, herhangi bir konum için kaydırılabilir haritaları görüntülemenize, cihazın mevcut coğrafi konumuna karşılık gelen haritayı görüntülemenize ve haritayı çeşitli şekillerde açıklama eklemenize olanak tanır.

PushKit Framework [7]– VoIP uygulamaları için kayıt desteği sağlar.

UIKit Framework [8]- iOS’ta grafik, olay güdümlü uygulamalar uygulamak için hayati altyapı sağlar. UI Kit çerçevesinin bazı önemli işlevleri:

· Kullanıcı ara yüzü oluşturma ve yönetimi (metin alanları, düğmeler, etiketler, renkler, yazı tipleri vb.)

· Uygulama yaşam döngüsü yönetimi

· Uygulama olayı işleme (örn. Dokunmatik ekran kullanıcı etkileşimi)

· Kesme, kopyalama ve yapıştırma işlevi

· Web ve metin içeriği sunumu ve yönetimi

· Veri işleme

· Uygulama içi entegrasyon

· Anlık Bildirim Servisi ile birlikte anlık bildirim

· Ulaşılabilirlik

· İvmeölçer, pil, yakınlık sensörü, kamera ve fotoğraf kütüphanesi etkileşimi.

Medya Katmanı (Media Katmanı)

Medya katmanı, iOS ses, video, animasyon ve grafik özellikleri sağlar. iPhone OS yığınının diğer katmanlarında olduğu gibi, Media katmanı iPhone uygulamaları geliştirilirken kullanılabilecek bir dizi çerçeve içerir.

CoreGraphics.framework [9]CoreGraphics Framework’ü (Kuvars 2D API olarak da bilinir), hafif iki boyutlu bir API motoru sağlar. Bu çerçevenin özellikleri arasında PDF belgesi oluşturma ve sunma, vektör tabanlı çizim, saydam katmanlar, yol tabanlı çizim, kenar yumuşatma, renk işleme ve yönetimi, görüntü oluşturma ve degradeler bulunur. MacOS X üzerinde çalışan Quartz 2D API’yi bilenler, bu API’nın uygulanmasının iPhone’da aynı olduğunu öğrenmekten memnuniyet duyacaktır.

QuartzCore.framework [10]– Bu framework’ün amacı, iPhone’da animasyon özellikleri sağlamaktır. UIKit çerçevesi tarafından kullanılan görsel efektlerin ve animasyonun çoğuna temel oluşturur ve iPhone uygulamalarında özel animasyon oluşturmak için Objective-C tabanlı bir programlama arabirimi sağlar.

OpenGLES.framework [11]– Uzun yıllar boyunca yüksek performanslı 2D ve 3D grafik çizimleri için endüstri standardı OpenGL olmuştur. Gömülü Sistemler için OpenGL (ES), iPhone gibi daha küçük cihazlar için özel olarak tasarlanmış tam OpenGL spesifikasyonunun hafif bir versiyonudur.

iPhone işletim sisteminin 3.0 sürümü, belirli iPhone modellerinde (iPhone 3GS gibi) hem OpenGL ES 1.1 hem de 2.0'ı destekler. İPhone işletim sisteminin önceki sürümleri ve daha eski modeller yalnızca OpenGL ES sürüm 1.1'i destekler.

AVFoundation.framework [12] — Apple platformlarında görsel-işitsel ortamları yakalamak, işlemek, sentezlemek, kontrol etmek, almak ve vermek için çok çeşitli görevleri kapsayan dört ana teknoloji alanını bir araya getirir Objective-C tabanlı bir framework’tür.

CoreAudio.framework[13] OpenAL, yüksek kaliteli 3D ses efektleri (konumsal ses olarak da bilinir) sağlamak için kullanılan bir çapraz platform teknolojisidir. Konumsal ses çeşitli uygulamalarda kullanılabilir, ancak tipik olarak oyunlarda ses efektleri sağlamak için kullanılır.

Core Servisleri Katmanı (Core Services Layer)

iPhone Core Services katmanı, yukarıdaki katmanların üzerine inşa edildiği temelin çoğunu sağlar ve aşağıdaki çerçevelerden oluşur.

AddressBook.framework [14]– Adres Defteri çerçevesi, uygulamaların kişi girişlerini almasına ve değiştirmesine izin veren iPhone Adres Defteri kişi veritabanına programlı erişim sağlar.

CoreData.framework [15]– Bu çerçeve, Model-View-Controller (MVC) tabanlı uygulamalarda veri modelleme ve depolama oluşturmayı kolaylaştırmak için sağlanmıştır. Temel Veri çerçevesinin kullanılması, bir uygulamada yapılandırılmış verilerle çalışırken ortak görevleri gerçekleştirmek için yazılması gereken kod miktarını önemli ölçüde azaltır.

Nesnelerinizi bir mağazaya eşlemenin ayrıntılarını özetler ve bir veritabanını doğrudan yönetmeden Swift ve Objective-C’den veri kaydetmeyi kolaylaştırır.

Kalıcı bir mağazaya veri kaydeden ve veriyi depolayan bir uygulamayı gösteren akış diyagramı.

Core Data’nın geri alma yöneticisi değişiklikleri izler ve uygulamanıza geri alma ve yineleme desteği eklemeyi kolaylaştırarak, bunları tek tek, gruplar halinde veya tümünü geri alabilir.

Arka planda JSON’u nesnelere ayrıştırma gibi UI engelleme olasılığı bulunan veri görevlerini gerçekleştirin. Ardından sunucu gidiş dönüşlerini azaltmak için sonuçları önbelleğe alabilir veya depolayabilirsiniz.

CoreFoundation.framework [16]– Core Foundation, veri türleri, dize işleme, ham blok veri yönetimi, URL işleme, iş parçacıkları ve çalıştırma döngüleri, tarih ve saatler, temel XML işleme ve bağlantı noktası ve soket iletişimi gibi temel işlevleri sağlayan C tabanlı bir Çerçevedir. Bu çerçeveye dahil olanların ötesinde ek XML özellikleri, libXML2 kütüphanesi aracılığıyla sağlanır. Bu C tabanlı bir arayüz olmasına rağmen, Core Foundation çerçevesinin özelliklerinin çoğu, Foundation Framework aracılığıyla Objective-C sarmalayıcılarıyla da kullanılabilir.

HomeKit [17]- HomeKit, tutarlı, kullanıcı odaklı bir arayüz sunmak için uygulamanızın birden fazla satıcıdan gelen ev otomasyon aksesuarlarını koordine etmesini ve kontrol etmesini sağlar.

HomeKit kullanarak uygulamanız şunları yapabilir:

· HomeKit uyumlu otomasyon aksesuarlarını keşfedin ve kalıcı, cihazlar arası ev yapılandırma veritabanına ekleyin.

· Ev yapılandırma veritabanındaki verileri görüntüleme, düzenleme ve bunlara göre hareket etme.

· Oturma odasındaki ışıkları açma gibi eylemleri gerçekleştirmelerini sağlamak için yapılandırılmış aksesuar ve servislerle iletişim kurun.

EventKit[18] — EventKit framework’ü, kullanıcıların uygulamanızda takvim öğeleri oluşturabilmeniz, alabilmeniz ve düzenleyebilmeniz için takvim ve hatırlatma verilerine erişim sağlar. İOS yılında EventKitUI kullanıcıların oluşturmak ve düzenlemek takvim öğeleri izin uygulamanızda uygulayabilirsiniz kullanıcı arabirimleri sağlar.

Alarm ayarlamak ve yinelenen etkinlikler oluşturmak için EventKit’i kullanabilirsiniz. Takvim veritabanında bir değişiklik uygulamanızın dışından gerçekleşirse, EventKit değişikliği algılar ve güncel kalmanızı sağlayan bir bildirim gönderir.

SystemConfiguration[19] — Bu framework, uygulamaların bir cihazın ağ yapılandırma ayarlarına erişmesine izin ver. Kablosuz veya hücre bağlantısının etkin olup olmadığı gibi cihazın erişilebilirliğini belirler.

Core OS Katmanı (Core OS Layer)

Core OS Layer, iPhone OS yığınının alt katmanıdır ve doğrudan aygıt donanımının üstüne oturur. Katman, düşük düzeyli ağ oluşturma, harici aksesuarlara erişim ve bellek yönetimi, dosya sistemi kullanımı ve iş parçacıkları gibi genel temel işletim sistemi hizmetleri gibi çeşitli hizmetler sunar.[20]

Accelerate [21]Framework — Karmaşık ve çok sayıda matematik, vektör, dijital sinyal işleme ve görüntü işleme görevleri ve hesaplamaları yapmak için donanım için optimize edilmiş C tabanlı bir API sağlar. Bir oyun uygulaması yazarken sıklıkla kullanılır.

ExternalAccessory.framework [22]– Apple Lightning konektörü ve Bluetooth ile bağlı harici aksesuarları sorgulama ve bunlarla iletişim kurma olanağı sağlar.

Security Services [23]– Sertifikalar, genel ve özel anahtarlar, güven ilkeleri, anahtarlıklar, şifreleme, özetler ve Karma tabanlı İleti Kimlik Doğrulama Kodu (HMAC) dahil olmak üzere harici ağlara bağlanabilen bir aygıtta bulmayı beklediğiniz tüm güvenlik arabirimlerini sağlar.

Core Bluetooth [24]– Temel Bluetooth çerçevesi, uygulamalarınızın Bluetooth donanımlı düşük enerjili (LE) ve Temel Hız / Gelişmiş Veri Hızı (BR / EDR) kablosuz teknolojisi ile iletişim kurması için gereken sınıfları sağlar. Core Bluetooth çerçevesinin hiçbir sınıfını alt sınıflara ayırmayın. Bu sınıfların geçersiz kılınması desteklenmez ve tanımsız davranışa neden olur. Temel Bluetooth arka plan yürütme modları, macOS’ta çalışan iPad uygulamalarında desteklenmez.

LocalAuthentication[25] — Birçok kullanıcı, cihazlarına güvenli ve zahmetsiz erişim sağlamak için Face ID veya Touch ID gibi biyometrik kimlik doğrulamaya güvenir. Yedek bir seçenek olarak ve biyometri olmayan cihazlar için bir şifre veya şifre benzer bir amaca hizmet eder. Uygulamanızda bu mekanizmalardan yararlanmak ve uygulamanızın zaten uyguladığı kimlik doğrulama prosedürlerini genişletmek için LocalAuthentication çerçevesini kullanın.

Güvenliği en üst düzeye çıkarmak için, uygulamanız hiçbir zaman temel kimlik doğrulama verilerine erişemez. Örneğin, hiçbir parmak izi görüntüsüne erişemezsiniz. Sistemin geri kalanından izole edilen donanım tabanlı bir güvenlik işlemcisi olan Secure Enclave, bu verileri işletim sisteminden bile erişilemeyecek şekilde yönetir. Bunun yerine, belirli bir ilke belirtir ve kullanıcıya neden kimlik doğrulaması yapmalarını istediğinizi bildiren bir ileti sağlarsınız. Çerçeve daha sonra işlemi gerçekleştirmek için Güvenli Enclave ile koordine edilir. Daha sonra, yalnızca kimlik doğrulamanın başarılı veya başarısız olduğunu gösteren bir Boolean sonucu alırsınız.

Android İşletim Sistemi

Android; Google ve Open Handset Alliance tarafından, mobil cihazlar için geliştirilmekte olan, Linux tabanlı özgür ve ücretsiz bir işletim sistemidir. Sistem açık kaynak kodlu olsa da, kodlarının ufak ama çok önemli bir kısmı Google tarafından kapalı tutulmaktadır. Google tarafından ücretsiz olmasının sebebi, sistemin daha hızlı ve çabuk gelişmesi, birçok popüler marka tarafından kullanılması ve bu sayede reklamlarını daha fazla kişiye ulaşmasını sağlamaktır. Google, Android sistemi üzerinde çalışan Google Play marketteki oyun ve uygulamalar üzerinde aldığı reklamları yayınlayarak para kazanmaktadır. Android’in desteklenen uygulama uzantısı “.apk”dır.

APK Dosyasının İçeriği

Android, aygıtların fonksiyonelliğini genişleten uygulamalar yazan geniş bir geliştirici grubuna sahiptir. Android için hali hazı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 10 Arayüzü

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.

AndroidMVC

MVC, çok katmanlı bir yapıdır.

Görseller, veri ve veriyi işleyen katmanlar ayrıdır.

· Model: MVC’nin veri katmadır. Veritabanı alanları, String’ler vb. yapılar tanımlanır. Örneğin; kütüphane otomasyonunda, kitap seri no, adı, yazarı vb.

· View: MVC’nin görsel katmanıdır. Arayüz, arayüz öğreleri tanımlanır. Web için web arayüzü, masaüstü veya mobil için uygun arayüzler.

· Controller: MVC’nin işlem katmanıdır. Tüm işlemlerin, işler bu katmanda gerçekleştirilir. Model ve View arasında köprü oluşturur. Veritabanı işlemleri, arayüzle etkileşim, hesaplamalar, veri aktarı vb. gibi.

Android Dosya Sistemi

Andoid dosya sisteminde 6 partion bulunur:

/boot: Kernel ve ramdisk

/system: Android OS, GUI ve apps

/recovery: Backup

/data: Kullanıcı data partition’ı

/cache: Çok kullanılan veriler

/misc: Bazı sistem ayarları

Uygulamalar da /data/data altında kurulur.

SD Kart

/sdcard

/sd-ext

Android İşletim Sistemi Mimarisi

Android işletim sistemi, aşağıda mimari şemada gösterildiği gibi kabaca beş bölüme ve dört ana katmana bölünmüş bir yazılım bileşenleri yığınıdır. Android işletim sisteminin bileşenleri

· Linux çekirdeği (Linux Kernel)

· Kütüphaneler (Libraries)

· Android Runtime

· Java API Framework

· System Apps

System Apps

Android, e-posta, SMS mesajları, takvimler, internette gezinme, kişiler ve daha fazlası için bir dizi temel uygulama ile birlikte gelir. Platformla birlikte gelen uygulamalarda, kullanıcının yüklemeyi seçtiği uygulamalar arasında özel bir durum yoktur. Bu nedenle, üçüncü taraf bir uygulama kullanıcının varsayılan web tarayıcısı, SMS messenger veya hatta varsayılan klavye olabilir (sistemin Ayarlar uygulaması gibi bazı istisnalar geçerlidir).

Sistem uygulamaları hem kullanıcılar için uygulamalar olarak hem de geliştiricilerin kendi uygulamalarından erişebilecekleri temel yetenekleri sağlamak için çalışır. Örneğin, uygulamanız bir SMS mesajı teslim etmek istiyorsa, bu işlevi kendiniz oluşturmanıza gerek yoktur; bunun yerine, belirlediğiniz alıcıya bir mesaj göndermek için hangi SMS uygulamasının kurulu olduğunu çağırabilirsiniz.

Java API Framework

Android işletim sisteminin tüm özellik setini Java dilinde yazılmış API’lar aracılığıyla kullanabilirsiniz. Bu API’lar, aşağıdakileri içeren temel, modüler sistem bileşenlerinin ve hizmetlerinin yeniden kullanımını basitleştirerek Android uygulamaları oluşturmak için ihtiyaç duyduğunuz yapı taşlarını oluşturur:

View System: [26] Listeler, ızgaralar, metin kutuları, düğmeler ve hatta bir web tarayıcısı dahil olmak üzere bir uygulamanın kullanıcı ara yüzünü oluşturmak için kullanabileceğiniz zengin ve genişletilebilir bir framework’tür.

Bir UI düzenini tanımlayan bir görünüm hiyerarşisinin gösterimi

Content Provider: Android uygulamaları birbirlerinin verilerine doğrudan ulaşamazlar. Bu hem güvenlik hem de uygulamaların birbirinden soyutlanabilmesini sağlar. Bir veriyi birden fazla uygulamada kullanabilmek için “Content Provider” kullanılır.

Content Provider ve diğer bileşenlerle ilişkisi

Notification: [27]Bildirim, Android’in kullanıcıya hatırlatıcıları, diğer kullanıcıların iletişimlerini veya zamanında uygulamanızdan gelen diğer bilgileri sağlamak için uygulamanızın kullanıcı arayüzü dışında gösterdiği mesajdır. Kullanıcılar, bildirime dokunarak uygulamanızı açabilir veya bir işlemi doğrudan bildirimden gerçekleştirebilirler.

Durum çubuğu ve bildirim çekmecesi

Yayınladığınız bir bildirim öncelikle durum çubuğunda bir simge olarak görünür.

Kullanıcılar, daha fazla ayrıntı görüntüleyebilecekleri ve bildirimle işlemler gerçekleştirebilecekleri bildirim çekmecesini açmak için durum çubuğunu aşağı kaydırabilirler.

Bildirim çekmecesindeki bildirimler

Kullanıcılar, sağlanan ek içerik ve işlem düğmelerini gösteren genişletilmiş görünümü açmak için çekmecedeki bir bildirimi aşağı doğru sürükleyebilirler. Bildirimler, uygulama veya kullanıcı tarafından kapatılıncaya kadar bildirim çekmecesinde görünmeye devam eder.

Uyarı bildirimi

Android 5.0 sürümünden itibaren bildirimler kısa bir süre için uyarı bildirimi adı verilen kayan bir pencerede gösterilmeye başlanmıştır. Bu davranış normalde kullanıcının hemen bilmesi gereken ve yalnızca cihazın kilidi açıkken görünen önemli bildirimler için kullanılmaktadır.

Ön plan uygulamasının önünde görünen bir uyarı bildirimi

Kilit ekranı

Android 5.0 sürümünden itibaren bildirimler kilit ekranında görünebilir.

Uygulamanızın güvenli bir kilit ekranında yayınladığı bildirimlerde gösterilen ayrıntı düzeyini, hatta bildirimin kilit ekranında gösterilip gösterilmeyeceğini bile programatik olarak ayarlayabilirsiniz.

Kullanıcılar, tüm kilit ekranı bildirimlerini devre dışı bırakma seçeneği de dahil olmak üzere kilit ekranı bildirimlerinde gösterilecek ayrıntı düzeyini seçmek için sistem ayarlarını kullanabilirler. Android 8.0 sürümünden başlayarak, kullanıcılar her bir bildirim kanalı için kilit ekranı bildirimlerini devre dışı bırakmayı veya etkinleştirmeyi seçebilirler.

Hassas içeriğe sahip kilit ekranında gizlenen bildirimler

Uygulama simgesi rozeti

Android 8.0 (API seviyesi 26) ve sonraki sürümlerini çalıştıran cihazlardaki desteklenen başlatıcılarda, uygulama simgeleri, yeni bildirimleri ilgili uygulama başlatıcı simgesinde renkli bir “rozet” (“bildirim noktası” olarak da bilinir) ile belirtir.

Kullanıcılar, söz konusu uygulamanın bildirimlerini görmek için bir uygulama simgesine uzun basabilirler. Kullanıcılar, daha sonra bildirim çekmecesine benzer şekilde, bu menüdeki bildirimleri kapatabilir veya bildirimlerden işlem yapabilirler.

Wear OS cihazları

Kullanıcının eşlenmiş bir Wear OS cihazı varsa, genişletilebilir ayrıntı ve işlem düğmeleri de dahil olmak üzere tüm bildirimleriniz söz konusu cihazda otomatik olarak görünür.

Giyilebilir cihazlarda bildirimin bazı görünümlerini özelleştirerek deneyimi geliştirebilir ve önerilen yanıtlar ve ses girişiyle yanıtlar da dahil olmak üzere farklı işlemler sağlayabilirsiniz.

Bildirimler eşlenmiş bir Wear OS cihazında otomatik olarak görünür

Resource: [28] Kaynaklar(resource), kodun kullandığı ek dosyalar ve bitmapler, düzen tanımları, kullanıcı arabirimi dizeleri, animasyon talimatları ve daha fazlası gibi statik içeriklerdir.

Resimler ve dizeler gibi uygulama kaynaklarını koddan her zaman dışsallaştırmalısınız, böylece bunları bağımsız olarak koruyabiliriz. Ayrıca, özel olarak adlandırılmış kaynak dizinlerinde gruplandırarak, belirli aygıt yapılandırmaları için alternatif kaynaklar sağlamanız gerekir. Çalışma zamanında Android, geçerli yapılandırmaya göre uygun kaynağı kullanır.

Activities:[29] Etkinlikler(activities), Android platformundaki uygulamaların temel yapı taşlarından biridir. Bir kullanıcının bir uygulama ile etkileşimi için giriş noktası görevi görürler ve ayrıca bir kullanıcının bir uygulama içinde (Geri düğmesinde olduğu gibi) veya uygulamalar arasında (Son Aramalar düğmesinde olduğu gibi) nasıl gezindiğinin merkezinde bulunurlar.

Faaliyetleri ustalıkla yönetmek aşağıdakileri yapmanızı sağlar, örneğin:

· Yönlendirme değişiklikleri, kullanıcı deneyimini bozmadan sorunsuz bir şekilde gerçekleşir.

· Etkinlik geçişleri sırasında kullanıcı verileri kaybolmaz.

· Sistem, uygun olduğunda işlemleri öldürür.

Libraries

Android sistemlerde kullanılan kütüphaneler, çoğunun Linux’ten gelmesi ile beraber C ve C++ dillerinde yazılmıştır. Android sistemlerinin Linux tabanlı sistemlere göre en büyük farkı, Linux’un libc adlı kütüphanesini kullanmamasıdır. Bunun yerine Android sistemler bionic adlı bir kütüphane kullanırlar. Bionic, libc kütüphanesinin değiştirilmiş halidir.

Core Libraries: Bu katman Java için çekirdek API’lerini ,ağ erişimi, dosya erişimi, veri yapıları, ve grafik bileşenlerini içerir.

Android Runtime: Android, derlenmiş Java kodunu çalıştırmak için dinamik çevirmeli Android Runtime (ART) kullanır ve cihazların fonksiyonelliğini artıran uygulamaların geliştirilmesi için çalışan geniş bir programcı-geliştirici çevresine sahiptir. Google aynı zamanda işletim sistemindeki hataları bulan kullanıcıları para ödülü ile ödüllendirmektedir.

Android uygulamalarını çalıştırmak için Android Kitkat 4.4 sürümüne kadar Dalvik sanal makinesini kullanmaştır. Google zamanla Dalvik’ten vazgeçip uzun süredir üzerinde çalıştığı yeni sanal makinesi Android Runtime’a (ART) geçiş yapmıştır.[30]

Android platformunda, Java diliyle yazdığımız Android uygulama kodları önce Java bytecode’larını içeren .class uzantılı dosyalara sonra da Dalvik sanal makinesinin kullanabileceği ve çalıştırabileceği Dalvik bytecode’unu içeren .dex uzantılı tek bir dosyaya dönüştürülür. Dalvik kısıtlı bellek ve işlemci gücü sağlayan mobil cihazlarda çalışmak için tasarlanmış bir yapı olduğu için günümüzdeki çoğu modern bilgisayar programlama dili (Java, C#) gibi yığınlarla (stack) değil yazmaçlarla (register) çalışır. Bir başka deyişle, Android stack-based değil, register-based yapıdadır ve bu şekilde daha hızlı çalışır.

Dalvik Virtual Machine ve ART Runtime karşılaştırılması

ART’ın çalışma şekli Dalvik’ten çok farklı. Dalvik, Android 2.2 sürümünden beri “Tam Zamanında” derleme (Just-In-Time — JIT compilation) kullanarak kodu derliyor. Uygulamamızı yazıp cihaza yüklediğimizde kod belli bir oranda derleniyor ve esas derleme ve optimizasyon uygulama çalışmaya başladığında yapılıyor. Bu işlem uygulama her çalıştığında yapılıyor. Tabii bu da uygulama her çalıştığında fazladan yük getirmekte ve daha az verimli çalışılmasına sebep olmaktadır.

OpenGL ES[31]

Android, Open Graphics Library (OpenGL®), özellikle OpenGL ES API ile yüksek performanslı 2D ve 3D grafikler için destek içerir. OpenGL, 3D grafik işleme donanımı için standart bir yazılım arabirimi belirten platformlar arası bir grafik API’sıdır. OpenGL ES, gömülü cihazlar için tasarlanan OpenGL spesifikasyonunun bir lezzetidir. Android, OpenGL ES API’sinin çeşitli sürümlerini destekler:

· OpenGL ES 1.0 ve 1.1 — Bu API spesifikasyonu Android 1.0 ve üstü tarafından desteklenir.

· OpenGL ES 2.0 — Bu API spesifikasyonu Android 2.2 (API seviye 8) ve üstü tarafından desteklenir.

· OpenGL ES 3.0 — Bu API spesifikasyonu Android 4.3 (API seviye 18) ve üstü tarafından desteklenir.

· OpenGL ES 3.1 — Bu API belirtimi Android 5.0 (API düzey 21) ve üstü tarafından desteklenir.

WebKit: Tarayıcı motoru render etme işlemi için kullanılan bir kütüphanedir.

Media Framework: Medya oynatılması ve kaydedilmesi için çeşitli sıkıştırma ve çözme türlerinin kullanımına izin verir.

Hardware Abstraction Layer (HAL)

Hardware Abstraction Layer (HAL) üst düzey için cihaz donanım özelliklerini açığa standart arabirimler sunar. HAL, her biri kamera veya bluetooth modülü gibi belirli bir donanım bileşeni için bir arabirim uygulayan birden çok kütüphane modülünden oluşur. Bir çerçeve API’sı aygıt donanımına erişmek için bir çağrı yaptığında, Android sistemi söz konusu donanım bileşeni için kütüphane modülünü yükler.

Linux Kernel

Android İşletim Sistemi, bellek yönetimi (memory managment), süreç yönetimi (process managent), güvenlik sürücü hizmetleri gibi temel işletim sistemi görevlerini Linux Kernel ile gerçekleştirmektedir. Donanım kaynaklarına erişim de Linux Kernel ile gerçekleştirilmektedir.

Android, bahsi geçen özellikleri Linux Kernel’dan almış olsa bile bunları mobil cihazlara uyarlamak için bazı iyileştirmelere ve geliştirmelere de gitmiştir. Bu özellikler sırasıyla:

· Süreç ve iş parçaları (Process & Thread)

· Süreçlerin yaşam döngüsü (Process Lifecycle)

· İş parçaları (Threads)

· Bellek yönetimi (Memory Managment)

· Güvenlik (Security)

Android’in yalnızca Linux çekirdeğini kullandığını belirtmek önemlidir. Bununla birlikte, Linux çekirdeğinin başlangıçta geleneksel bilgisayarlarda masaüstü ve sunucular şeklinde kullanılmak üzere geliştirildiğini belirtmek gerekir. Aslında, Linux şu anda en kritik kurumsal sunucu ortamlarında konuşlandırılmıştır. Bu, bugünün mobil cihazlarının gücünü ve bu yazılımın Android yazılım yığınının kalbinde bulduğumuz Linux çekirdeğinin verimliliğini ve performansını kanıtlıyor.

Android Boot Süreci

Android Linux Çekirdeğine dayandığından, önyükleme işlemi de Linux önyükleme işlemi hakkında iyi bir fikir verecektir. Çoğu android tabanlı sistem ARM işlemcilerde çalışır.

Her şeyden önce, Android önyükleme sırasında kullanılan çeşitli terimler ve anlamları şunlardır:

Android telefonlardaki güç düğmesine basıldığında önyükleme süreci

Boot ROM- CPU ASICS’de yerleşik olan bir koddur.

Bootloader — Android işletim sistemi çalışmaya başlamadan önce çalışan küçük bir programdır.

Inıt Process — Linux Kernel tarafından kurulum tamamlandığında başlatılan ilk işlemdir.

Adım 1 — Sistemi Başlatma: Boot ROM kodu, önceden tanımlanmış konumdan yürütmeyi başlatır. Bootloader’ı RAM’e yükler ve çalıştırmayı başlatır.

· Boot ROM kodu, ASIC üzerindeki bazı fiziksel toplarla eşleşen bir sistem kaydı kullanarak önyükleme ortamını algılar. Bu, önyükleyicinin ilk aşamasının nerede bulunacağını belirlemek içindir.

· Önyükleme ortamı dizisi kurulduktan sonra, önyükleme ROM’u ilk aşama önyükleme yükleyicisini dahili RAM’e yüklemeye çalışır. Önyükleme yükleyicisi yerleştirildikten sonra, önyükleme ROM kodu bir atlama gerçekleştirir ve önyükleme yükleyicisinde yürütme devam eder.

Adım 2 — Bootloader:

Bootloader, Android’den önce çalışan küçük bir programdır. Bu Android işletim sisteminin bir parçası değildir. Önyükleyici, üreticinin kilitlerini ve kısıtlamalarını koyduğu yerdir.

Önyükleyici iki aşamada yürütülür. İlk aşamada harici RAM algılar ve ikinci aşamada yardımcı olan bir program yükler.

İkinci aşamada, bootloader çekirdeği çalıştırmak için gereken ağı, hafızayı vb. Ayarlar. Önyükleyici, belirli amaçlar için çekirdeğe yapılandırma parametreleri veya girişler sağlayabilir.

Adım 3 — Çekirdek:

Android çekirdeği linux çekirdeğine benzer şekilde başlar. Çekirdek başlatıldığında, önbellek, korumalı bellek, zamanlama ve sürücüleri yüklemeye başlar. Çekirdek sistem kurulumunu tamamladığında, sistem dosyalarında “init” arar.

Adım 4 — İşlemi başlatma:

Init ilk süreçtir, bunun kök bir süreç olduğunu veya tüm süreçlerin dedesi olduğunu söyleyebiliriz. Başlatma sürecinin iki sorumluluğu vardır.

1- / sys, / dev veya / proc gibi dizinleri bağlar.

2- init.rc komut dosyasını çalıştırır.

Adım 5 — Zygote ve Dalvik:

Java’da, ayrı bir Sanal Makine örneğinin uygulama başına ayrı bellekte açılacağını biliyoruz, ancak Android söz konusu olduğunda VM bir uygulama için mümkün olduğunca hızlı çalışmalıdır. Ancak, Dalvik’in (VM) birkaç örneğini başlatan birkaç uygulamanız varsa ne olur?, Muazzam miktarda bellek tüketir.

Bu sorunun üstesinden gelmek için Android işletim sisteminde “Zygote” adlı bir sistem var. Zygote, Dalvik VM’de kod paylaşımına olanak vererek daha az bellek alanı ve minimum başlatma süresi sağlar. Zygote, sistem önyüklemesinde başlayan sanal bir makine işlemidir. Zygote çekirdek kütüphane sınıflarını önceden yükler ve başlatır.

Adım 6 — Sistem Sunucusu:

Sistem sunucusu, sistemde çalıştırılan ilk java bileşenidir. Telefon yöneticisi ve bluetooth gibi tüm Android hizmetlerini başlatacaktır.

Her hizmetin başlatılması şu anda doğrudan sistem sunucusunun çalışma yöntemine yazılmıştır.

KAYNAKÇA

1- https://itsolutionindia.wordpress.com/2016/02/02/heres-why-the-iphone-always-wins/

2- https://community.nxp.com/docs/DOC-102546

3- https://intellipaat.com/blog/tutorial/ios-tutorial/ios-architecture/

4- https://developer.apple.com/documentation/messageui

5- https://developer.apple.com/documentation/eventkitui

6- https://developer.apple.com/documentation/gamekit

7- https://developer.apple.com/documentation/mapkit

8- https://developer.android.com/guide/topics/ui/declaring-layout

9- https://developer.android.com/guide/topics/ui/notifiers/notifications

[1] https://itsolutionindia.wordpress.com/2016/02/02/heres-why-the-iphone-always-wins/

[2] https://intellipaat.com/blog/tutorial/ios-tutorial/ios-architecture/

[3] https://developer.apple.com/documentation/messageui

[4] https://developer.apple.com/documentation/eventkitui

[5] https://developer.apple.com/documentation/gamekit

[6] https://developer.apple.com/documentation/mapkit

[7] https://developer.apple.com/documentation/pushkit

[8] https://developer.apple.com/documentation/uikit

[9] https://developer.apple.com/documentation/coregraphics

[10] https://developer.apple.com/documentation/quartz

[11] https://developer.apple.com/documentation/opengles

[12] https://developer.apple.com/documentation/avfoundation

[13] https://developer.apple.com/documentation/coreaudio

[14] https://developer.apple.com/documentation/addressbook

[15] https://developer.apple.com/documentation/coredata

[16] https://developer.apple.com/documentation/corefoundation

[17] https://developer.apple.com/documentation/homekit

[18] https://developer.apple.com/documentation/eventkit

[19] https://developer.apple.com/documentation/systemconfiguration

[20] https:// techotopia.com/index.php/The_iPhone_OS_Core_OS_Layer

[21] https://developer.apple.com/documentation/accelerate

[22] https://developer.apple.com/documentation/externalaccessory

[23] https://developer.apple.com/documentation/security

[24] https://developer.apple.com/documentation/corebluetooth

[25] https://developer.apple.com/documentation/localauthentication

[26] https://developer.android.com/guide/topics/ui/declaring-layout

[27] https://developer.android.com/guide/topics/ui/notifiers/notifications

[28] https://developer.android.com/guide/topics/resources/providing-resources

[29] https://developer.android.com/guide/components/activities

[30] https://software.intel.com/en-us/blogs/2014/06/18/art-vs-dalvik-introducing-the-new-android-x86-runtime

[31] https://developer.android.com/guide/topics/graphics/opengl

--

--