ANDOID UYGULAMA YAPISI

ANDOID UYGULAMA YAPISI

Android, temel olarak akıllı telefonlar ve tabletler gibi dokunmatik ekranlı mobil cihazlar için tasarlanmış, Linux çekirdeğinin ve diğer açık kaynaklı yazılımların değiştirilmiş bir sürümünü temel alan bir mobil işletim sistemidir. Android, Open Handset Alliance olarak bilinen ve ticari olarak Google sponsorluğundaki bir geliştiriciler konsorsiyumu tarafından geliştirilmiştir. Bu makale de bir Android cihazın mimarisi, bir uygulamanın nasıl derlendiğini ve en önemlisi bir Android uygulamasının kompozisyonu konularına değineceğim.

Android’in Kısaca Geçmişi

Android Inc., Andy Rubin, Rich Miner, Nick Sears ve Chris White tarafından Ekim 2003’te Palo Alto, California’da kuruldu.

Temmuz 2005’te Google, Android Inc.’i en az 50 milyon dolara satın aldı. Rubin, Miner ve White gibi önemli çalışanları, satın alma işleminin bir parçası olarak Google’a katıldı. Google’da Rubin liderliğindeki ekip, Linux çekirdeği tarafından desteklenen bir mobil cihaz platformu geliştirdi. Google platformu, esnek, yükseltilebilir bir sistem sağlama vaadiyle telefon üreticilerine ve operatörlere pazarladı.

Piyasada satılan ilk Android akıllı telefon, 23 Eylül 2008’de duyurulan T-Mobile G1 olarak da bilinen HTC Dream idi.

Donanım

Android’in Android için ana donanım platformu, sonraki sürümlerde de desteklenen x86 ve x86-64 mimarilerine sahip ARM’dir. Android 5.0 Lollipop’tan bu yana, 32 bit varyantına ek olarak tüm platformların 64 bit varyantları desteklenmektedir.

Çekirdek

2020 itibariyle Android, Linux Kernel’in 4.4, 4.9 veya 4.14 sürümlerini kullanmaktadır. Android Kernel, Linux Kernel’in Long Term Support (LTS) sınıfına dayanmaktadır.

Dosya Sistemi

Android’in piyasaya sürülmesinden bu yana YAFFS2’yi kullandı. Android 2.3’ten sonra EXT4 dosya sistemini kullandı, ancak birçok OEM F2FS ile deneyler yaptı. Aşağıdaki dizinler, herhangi bir Android kurulumunda varsayılan olarak bulunmaktadır:

  • Önyükleme: Bölüm, telefonun açıldığında önyüklemesi için gerekli olan çekirdek, ramdisk vb. İçerir.
  • Sistem: Android kullanıcı arayüzünü ve önceden yüklenmiş uygulamaları içeren işletim sistemi dosyalarını içerir
  • Kurtarma: İşletim sistemine önyükleme yapmak için alternatif bir seçenektir, bölümlerin kurtarılmasına ve yedeklenmesine olanak tanır.
  • Veri: Kullanıcı verilerini, uygulama verilerini, mesajlaşmayı, müziği vb. kaydeder. Dosya tarayıcısı aracılığıyla taranabilir. Bu alan, fabrika ayarlarına sıfırlama yapıldığında silinir. Alt klasörler:
    • Android – Uygulama önbelleği ve kayıtlı veriler için varsayılan.
    • Alarmlar – Alarmlar için özel ses dosyaları.
    • Cardboard – VR dosyalarına ilişkin verileri içerir.
    • DCIM – Kamera uygulamasıyla çekilmiş resimleri ve videoları saklar.
    • İndirilenler – İndirilen dosyaları depolar.
    • Bildirimler – Bazı uygulamaların bildirimleri için özel tonları içeren bölüm.
    • Müzik, Filmler – Üçüncü taraf uygulamalardan şarkıları ve videoları depolamak için kullanılan varsayılan klasör.
    • Resimler – Üçüncü taraf uygulamalar tarafından çekilen resimleri saklamak için kullanılan varsayılan klasör.
    • Podcast’ler – Bir podcast uygulaması kullandığınızda podcast dosyalarını saklar.
    • Videolar – Üçüncü taraf uygulamalardan indirilen videoları depolar.
  • Önbellek: Sık kullanılan verilerin ve uygulama bileşenlerinin depolanması.
  • Misc: Diğer önemli sistem ayarı bilgilerini içerir. USB yapılandırması, taşıyıcı kimliği gibi.

Android Yapısı

Çekirdek

Çekirdek, kullanıcının donanımla iletişim kurması için bir arabirim sağlayan Android işletim sisteminin en önemli parçasıdır. Programlar tarafından bir donanım bileşenine belirli bir işlevi gerçekleştirme talimatı vermek için kullanılan temel sürücüleri içerir. Bu sürücüler ses, ekran, Bluetooth vb.

Donanım Soyutlama Katmanı (HAL)

Bir donanım soyutlama katmanı (HAL), bir bilgisayarın fiziksel donanımı ile yazılımı arasında bir soyutlama katmanı görevi gören mantıksal bir kod bölümüdür. Bir programın donanımla iletişim kurmasına izin veren bir aygıt sürücüsü arabirimi sağlar.

Kütüphaneler

Çekirdeğin en üstünde oturan kütüphaneler, uygulamalar, kaynak dosyası ve hatta manifest geliştirmek için geliştirici desteği sağlar. Native kodlar tarafından bir görevi etkin bir şekilde gerçekleştirmek için gerekli olan SSL, SQLite, Libc vb. Gibi bazı native kütüphaneler vardır.

Android Runtime

Android Runtime (ART), Android OS tarafından kullanılan bir uygulama çalışma zamanı ortamıdır. Çalışma zamanı ortamı, programın bilgisayarın işlemcisine talimatlar gönderebileceği ve bilgisayarın RAM’ına erişebileceği bir durumdur. Örneğin Java’da programlanan Android uygulamaları, ilk olarak bir APK ve çalıştırma çalışma zamanı olarak paketlenen derleme sırasında bayt koduna dönüştürülecektir.

Android, programın işletimini işletim sisteminden izole etmek ve kötü niyetli kodu etkileyen sistemden korumak için herhangi bir uygulamayı yürütmek için bir Sanal Makine kullanır.

Android 4.4’ten önce, bu çalışma zamanının adı Android Runtime (ART) ile değiştirilene kadar DVM (Dalvik Virtual Machine) idi.

DVM, uygulama kodunu alarak, analiz ederek ve çalışma sırasında aktif olarak çevirerek çalışan JIT (Tam zamanında) derlemesini kullandı. ART, * .dex dosyalarını (Dalvik Bytecode) derlemek için AOT  ( ahead of time ) derleyicisini kullanmakta. Genellikle kurulum sırasında yapılır ve telefon belleğinde saklanır.

Dikkat edilmesi gereken: Android N’den sonra, JIT derlemesi, AOT ve ARt’deki bir yorumlayıcı ile birlikte yeniden tanıtıldı ve kurulum süresi ve bellek gibi sorunların üstesinden gelmek için hibrit hale getirildi.

Application Framework

Android işletim sisteminin tüm özellik seti geliştirici tarafından Java dilinde yazılmış API’ler aracılığıyla kullanılabilir. Bu API’ler, Android uygulamaları oluşturmak için gereken en önemli bileşenleri oluşturmaktadır. Bunlar:

  • View System: Listeler, metin kutuları, düğmeler vb. Dahil olmak üzere bir uygulamanın kullanıcı arayüzünü oluşturmak için kullanılır.
  • Resource Manager: Düzen dosyaları, grafikler vb. Gibi kod dışı kaynaklara erişim sağlar.
  • Notification Manager: Uygulamanın durum çubuğunda özel uyarılar göstermesine izin verir.
  • Activity Manager: Uygulamaların yaşam döngüsünü yönetir ve ortak bir geri gezinme yığını sağlar.
  • Content Providers: Uygulamaların, Kişiler uygulamasından WhatsApp erişim verileri gibi diğer uygulamalardaki verilere erişmesini sağlar.

Sistem Uygulamaları

SMS, takvimler, internette gezinme, kişiler vb. Gibi temel işlevler için kullanılan önceden yüklenmiş temel uygulamalar kümesi.

APK Derleme ve Derleme Çözme

Derleme

Android derleme süreci, java derleme sürecine kıyasla daha iyi anlaşılabilir. Bir java kodunu derlemek için aşağıdaki adımlar gerçekleştirilir:

  • Main.java’da yazılan bir kod javac (Java derleyicisi) tarafından derlenir.
  • Javac, main.java’yı java bayt kodu (main.class) olarak derler
  • Bir Java Sanal Makinesi (JVM), JIT (Just-in-time) derleyicisini kullanarak Java bayt kodu dosyasını (main.class) anlar ve makine koduna dönüştürür.
  • Makine kodu daha sonra CPU tarafından çalıştırılır.

Aşağıdaki diyagramda gösterilebilir:

Java ve Android derleme süreci arasındaki temel fark, Android’in JVM ile çalışmamasıdır çünkü bir JVM, sınırlı bir işlemci hızı ve RAM ile çeşitli hizmetleri etkinleştirmez. Bu nedenle, Android bir Dalvik Sanal Makinesi (DVM) tanıttı. Ancak, en son Android sürümlerinde ART kullanılıyor. İşlem diyagramı şu şekildedir:

Varsayılan çalışma zamanı olarak Dalvik’in değiştirilmesine rağmen Dalvik bayt kodu formatının (* .dex) hala kullanımda olduğu unutulmamalıdır.

Decompiling APK

Tersine mühendislik yapılırken, APK derleme ve yeniden derleme yapılır.Bir APK’nin formatta paketlendiğinde esasen nasıl yapılandırıldığını anlamak için decompilation işlemine bakalım.

Bir APK dosyasının yalnızca XML dosyaları, dex kodu, kaynak dosyaları ve diğer dosyaları içeren bir ZIP arşivi olduğuna dikkat edilmelidir.

Dolayısıyla, derlemeyi çözmek için aşağıdakilerden birini yapabiliriz:

$ Unzip <ad> .apk dosyasını açın

Veya apktool adlı harika bir araçtan yardım alabiliriz. Bu nedenle, aşağıdaki komutu çalıştıracağız:

Burada, Manifest dosyasını, yml dosyasını, kaynakları ve classes.dex adlı bir dosyayı esasen paketleyen bir klasörün oluşturulduğunu görüyoruz.

Bu dex dosyası dalvik bayt kodunu içerir ve bu dosyayı aşağıdaki komutu kullanarak standart sınıf dosyalarına daha da ayıracağız:

Bu komut ayrıca bir .jar kod yapısı oluşturmaktadır. Kaynak kodunu incelemek için bir java decompiler kullanacağız. Örnek olaraj jadx aracı ile ilgili daha iyi görebilmek adına grafik arayüzlü versiyonda jar dosyasını açıyoruz.

Bu kodun okunabilirliğinin tamamen, bir APK dosyası oluşturulurken bir obfuscator (ProGuard gibi) kullanılıp kullanılmadığına bağlı olduğuna dikkat edilmelidir.

Bir APK’nin bileşimi

Herhangi bir android uygulaması, birbirleriyle nasıl etkileşimde bulunduklarının açıklamasını içeren uygulama bildirim dosyasıyla bağlı olan 6 temel şeyden oluşur. Bunların dışında, service, content provider ve brodcast receiver gibi bileşenler ihtiyaçlara bağlı olarak mevcut olabilirken, activity, UI ve intent gibi bileşenler herhangi bir uygulamada olması gereken bir şeydir. Bileşenler şunlardır:

Activity: Activity, uygulandığında, Java’nın penceresi veya çerçevesi gibi bir kullanıcı arayüzüne sahip tek bir ekranı temsil eden Android’de bir sınıftır. Her uygulamanın, bir uygulama çalıştırıldığında varsayılan olarak ilk kez otomatik olarak çalışan bir MainActivity vardır. Activity sayfalarında gerçekleştirilen tüm eylemler callback kullanılarak yapılır. 7 adet callback vardır:

Services: Service, kullanıcıyla etkileşime girmeye gerek kalmadan uzun süreli işlemleri gerçekleştirmek için arka planda çalışan bir bileşendir ve uygulama yok edilmiş olsa bile çalışır. Bir hizmet esas olarak iki durumda olabilir:

  • Başlatıldı: Activity gibi bir uygulama bileşeni, startService () çağırarak onu başlattığında bir hizmet başlatılır. Bir hizmet bir kez başlatıldığında, onu başlatan bileşen yok edilmiş olsa bile arka planda süresiz olarak çalışabilir.
  • Bağlı: Bir uygulama bileşeni, bindService () çağırarak ona bağlandığında bir servis bağlanır. Bağlı bir servis, bileşenlerin service bileşeni ile etkileşime girmesine, istekler göndermesine, sonuç almasına ve hatta işlemler arası iletişim (IPC) ile süreçler genelinde bunu yapmasına olanak tanıyan bir istemci-sunucu arabirimi sunar.

Service temel sınıfı, çeşitli callback yöntemlerini tanımlar ve en önemlileri aşağıda verilmiştir:

Content Providers ( İçerik Sağlayıcılar ): İçerik Sağlayıcılar, içeriği / verileri bir Android sisteminden veya diğer Android uygulamalarından kullanılmakta olan ana Android uygulamaya temin eder. Bir hizmet oluşturmak için, Hizmet temel sınıfını veya mevcut alt sınıflarından birini genişleten bir Java sınıfı oluşturulur. İçerik sağlayıcılar aşağıdaki dört temel işlemi sağlar. Bunlar aynı zamanda CRUD işlemleri olarak da bilinir.

C - Create: İçerik sağlayıcılarda veri oluşturmak için kullanılır.
R - Read: İçerik sağlayıcıda depolanan verileri okur.
U - Update: İçerik sağlayıcılarda mevcut verilerin düzenlenmesine izin verir.
D - Delete: Deposunda bulunan mevcut verileri siler.

İçerik sağlayıcıları uygulamak için Java’da aşağıdaki callbackler kullanılır:

Broadcast Receivers: Broadcast Receivers bileşenleri, diğer uygulamalardan veya sistemin kendisinden gelen yayın mesajlarına basitçe yanıt verir. Bu mesajlar bazen olaylar veya niyetler olarak adlandırılır. Örneğin, uygulamalar, diğer uygulamalara bazı verilerin cihaza indirildiğini ve bunların kullanımına açık olduğunu bildirmek için yayınları da başlatabilir, bu nedenle broadcast receiver, bu iletişimi kesecek ve uygun eylemi başlatacak bir yayın alıcısıdır. Yayın alıcılarından bazıları:

  • intent.action.REBOOT
  • intent.action.DATE_CHANGED
  • intent.action.BOOT_COMPLETED

Intents: Android Intent, gerçekleştirilecek bir işlemin özet bir açıklamasıdır. StartActivity ile bir Activity başlatmak için, broadcastIntent onu ilgili herhangi bir BroadcastReceiver bileşenine göndermek için ve startService (Intent) veya bindService (Intent, ServiceConnection, int) ile bir arka plan hizmeti ile iletişim kurmak için kullanılabilir.

Views: Bir kullanıcının Android uygulamasıyla tüm etkileşimi kullanıcı arayüzü (UI) üzerinden gerçekleşir. View, android’de UI’nin (Kullanıcı Arayüzü) temel yapı taşıdır. View, TextView, ImageView, Button vb. Gibi tüm GUI bileşenleri için süper sınıf olan android.view.View sınıfını ifade eder.

Kaynak:

https://www.android.com/intl/tr_tr/

https://developer.android.com/guide/platform

Related Posts

Leave a Reply