Kesim bölümleri android nedir. Android sistemlerinin iç cihazı

  Hiç fastboot veya ADB'nin çalıştığını merak ettiniz mi? Ya da Android'i çalıştıran bir akıllı telefonun neden tuğlaya dönüşmesi neredeyse imkansız? Ya da belki de Xposed çerçevesinin büyüsünün nerede olduğunu bilmek istediniz ve neden /system/etc/init.d boot betiklerine ihtiyacınız var? Kurtarma konsolu ne olacak? Bu, Android'in bir parçası mı yoksa kendi başına bir şey mi? Neden normal kurtarma, üçüncü taraf ürün yazılımı kurmak için uygun değil? Bu makalede bulabileceğiniz tüm bu ve diğer birçok soruya cevaplar.

Android nasıl çalışır?

  Nasıl çalıştığını anlayarak yazılım sistemlerinin gizli özellikleri hakkında bilgi edinebilirsiniz. Bazı durumlarda bunu yapmak zordur, çünkü sistem kodu kapatılabilir, ancak Android'de tüm sistemi yukarı ve aşağı çalışabiliriz. Bu makalede, Android'in çalışmasının tüm nüansları hakkında konuşmayacağım ve sadece işletim sisteminin nasıl başladığına ve güç düğmesine basma ile masaüstünün görünümü arasındaki zaman aralığında hangi olayların gerçekleşeceğine odaklanacağım.

Yol boyunca, bu olay zincirinde neleri değiştirebileceğimizi ve özel yazılım geliştiricilerinin bu özellikleri OS ayarlaması, uygulamaların depolanması için alan genişletme, takas, çeşitli özelleştirmeler ve daha pek çok şey için nasıl kullanacaklarını açıklayacağım. Tüm bu bilgiler kendi donanım yazılımınızı oluşturmak ve çeşitli korsanları ve modifikasyonları uygulamak için kullanılabilir.

Birinci adım. ABOOT ve bölüm tablosu

  Her şey birincil yükleyici ile başlar. Güç açıldıktan sonra sistem, aygıtın kalıcı belleğinde kayıtlı olan önyükleme kodunu çalıştırır. Daha sonra, kontrolü, fastboot protokolü için yerleşik destek ile birlikte bootloader'a aktarır, ancak mobil yonga veya akıllı telefon / tablet üreticisi kendi tadı için başka bir bootloader seçme hakkına sahiptir. Örneğin, Rockchip şirketi, hangisinin tescilli araçları kullanması gerektiğini yeniden programlamak ve kontrol etmek için, fastboot bootloader ile uyumsuz olan kendi şirketini kullanıyor.

Fastboot protokolu ise, bootloader'ın kilidini açma, yeni çekirdeği ve kurtarma işlemlerini yapma, firmware'i kurma ve diğer birçok işlemi gerçekleştirmenizi sağlayan bir PC boot loader yönetim sistemidir. Fastboot'un varlığının anlamı, diğer tüm araçların çalışmadığı bir durumda akıllı telefonu ilk durumuna geri yükleyebilmektir. Deneyler sonucunda, Android'inizi ve kurtarmanızı içeren NAND belleğinin tüm bölümlerini akıllı telefonunuzdan silmeniz durumunda fastboot, yerinde kalacaktır.

Kontrol edildikten sonra, bölüm tablosunu kontrol eder ve kontrolü, adlandırılmış bölüme dikilmiş çekirdeğe aktarır, daha sonra çekirdeği bir RAM görüntüsünü aynı bölümden belleğe çıkarır ve Android'i veya kurtarma konsolunu indirmeye başlar. Android cihazlarda NAND bellek altı şartlı zorunlu bölümlere ayrılmıştır:

  • önyükleme - genellikle yaklaşık 16 MB boyutunda bir çekirdek ve bir RAM diski içerir;
  • kurtarma - kurtarma konsolu, bir çekirdek, bir dizi konsol uygulaması ve bir yapılandırma dosyası, 16 MB boyutundan oluşur;
  • sistem - Android içerir, modern cihazlarda en az 1 GB bir boyutu vardır;
  • önbellek - önbelleğe alınmış verileri depolamak için tasarlanmıştır, ayrıca OTA güncellemesi sırasında bellenimi kaydetmek için kullanılır ve bu nedenle sistem bölümünün boyutuna benzer bir boyuta sahiptir;
  • userdata - ayarları, uygulamaları ve kullanıcı verilerini içerir, kalan tüm NAND bellek alanı verilir;
  • misc - sistemin hangi modda önyükleme yapması gerektiğini belirleyen bir bayrak içerir: Android veya kurtarma.
Bunlara ek olarak, başka bölümler de olabilir, ancak genel işaretleme akıllı telefonun tasarım aşamasında belirlenir ve, yukarıda belirtilen durumda, yükleyici kodunun içine dikilir. Bu, şu anlama gelir: 1) bölüm tablosu, her zaman fastboot oem format komutu kullanılarak geri yüklenebileceğinden ötürü öldürülemez; 2) bölüm tablosunu değiştirmek için, bootloader'ın kilidini açıp yeni parametrelerle yeniden çakmanız gerekecektir. Ancak, bu kuraldan istisnalar vardır. Örneğin, aynı Rockchip önyükleyici, NAND belleğinin ilk bloğundaki bölümler hakkındaki bilgileri depolar, böylece değiştirmek için yanıp sönen bir önyükleyiciye ihtiyacınız yoktur.

Bölüm tablosunu tanımlayan yükleyici kodunun bir kısmı


Özellikle ilginç bölüm misc. Başlangıçta, ana sistemden bağımsız olarak çeşitli ayarları saklamak için yaratılmış olan bir varsayım vardır, ancak şu anda sadece bir amaç için kullanılır: bootloader'a sistemi - boot veya kurtarma sisteminden yüklemek için hangi bölüme söyle. Bu özellik, özellikle, yazılımın otomatik olarak kurulmasıyla kurtarma sırasında sistemi otomatik olarak yeniden başlatmak için ROM Yöneticisi uygulamasını kullanır. Temel olarak, Ubuntu Touch çift önyükleme mekanizması, Ubuntu önyükleyicisini kurtarma sırasında temizler ve bir sonraki sefer hangi sistemin yükleneceğini kontrol etmenizi sağlar. Stehr misc bölümü - Android yüklü, verilerle dolu - kurtarma yükleniyor ... yani, Ubuntu Touch.

İkinci adım. Önyükleme bölümü

  Misc bölümünün kurtarma sırasında önyükleme bayrağı yoksa, önyüklemeyi önyükleme bölümünde bulunan koda aktarır. Linux çekirdeği gibi bir şey değil; bölümün başında bulunur ve hemen Android, init init sistemi ve diğer araçlar için gerekli dizinleri içeren cpio ve gzip arşivleyicilerle dolu bir RAM disk görüntüsü izler. Önyükleme bölümünde hiçbir dosya sistemi yok, çekirdek ve RAM diski sadece birbirini takip ediyor. RAM diskin içeriği:

  • data - aynı adın bölümünün montajı için dizin;
  • dev - aygıt dosyaları;
  • proc - procfs buraya monte edilmiştir;
  • res - şarj cihazı için bir dizi görüntü (aşağıya bakınız);
  • sbin - bir dizi yardımcı araçlar ve daemonlar (örneğin, adbd);
  • sys - sysfs buraya monte edilmiştir;
  • sistem - sistem bölümünün montajı için dizin;
  • şarj cihazı - şarj işlemini görüntülemek için bir uygulama;
  • build.prop - sistem ayarları;
  • init - başlatma sistemi;
  • init.rc - başlatma sistemi ayarları;
  • ueventd.rc - init'in bir parçası olan uventd daemon için ayarlar.
Bu, eğer söyleyebilirsem, sistemin iskeletidir: NAND-bellek bölümlerinden dosya sistemlerini bağlamak için bir dizi dizin ve sistemin geri yüklenmesi üzerine çalışmanın geri kalanını yapacak bir başlatma sistemi. Burada merkezi eleman init uygulaması ve init.rc yapılandırmasıdır, daha sonra daha ayrıntılı olarak tartışacağım. Bu arada, sbin, proc ve sys dizinlerinin yanı sıra, piller ve ueventd.rc dosyalarına dikkat çekmek istiyorum.

Şarj cihazı, tek görevi pil simgesini görüntülemek olan küçük bir uygulamadır. Android ile ilgisi yoktur ve cihaz kapalı durumda şarj cihazına bağlandığında kullanılır. Bu durumda, Android önyükleme yapmaz ve sistem sadece çekirdeği yükler, RAM diskini bağlar ve şarj cihazını başlatır. İkincisi, mümkün olan tüm hallerde res resmindeki normal PNG dosyalarında saklanan pil simgesini görüntüler.

Ueventd.rc dosyası, sistem önyükleme aşamasında sys dizinindeki hangi aygıt dosyalarının oluşturulacağını belirleyen bir yapılandırma dosyasıdır. Linux tabanlı sistemlerde, donanımlara dev dizinin içindeki özel dosyalar aracılığıyla erişilir ve init'in bir parçası olan ueventd daemon, bunları Android'de oluşturmaktan sorumludur. Normal bir durumda, otomatik olarak çalışır, kernelden dosya oluşturmak için komutları kabul eder, ancak bazı dosyaların bağımsız olarak oluşturulması gerekir. Onlar ueventd.rc'de listelenir.

Android stokundaki sbin dizini genellikle adbd'den başka bir şey içermez; yani, bir PC'den sistem hatalarını ayıklamaktan sorumlu olan ADB arka planı. İşletim sistemi önyükleme işleminin ilk aşamasında başlar ve işletim sistemi başlatma aşamasında olası sorunları belirlemenizi sağlar. Bu dizindeki özel aygıt yazılımında, bölümlerin yeniden ext3 / 4 biçiminde yeniden biçimlendirilmesi gerekiyorsa gerekli olabilecek, örneğin mke2fs gibi bir dizi başka dosya bulabilirsiniz. Ayrıca modery sık sık yüzlerce Linux komutunu arayabileceğiniz BusyBox'u yerleştirdi.

Linux için proc dizini standarttır, yükleme işleminin sonraki aşamalarında, sistemdeki tüm süreçler hakkında bilgiye erişim sağlayan bir sanal dosya sistemi olan procfs'ye bağlanacaktır. Sistem, donanım ve ayarları ile ilgili bilgilere erişimi açan sys dizin sysfs'lerine bağlanacaktır. Sysfs kullanarak, örneğin, uykuya dalmak veya kullanılan güç tasarrufu algoritmasını değiştirmek için bir cihaz gönderebilirsiniz.

Build.prop dosyası Android düşük seviye ayarlarını depolamak için tasarlanmıştır. Daha sonra sistem bu ayarları sıfırlar ve mevcut sistem / build.prop dosyasındaki değerlerle üzerine yazar.

Set üstü kutusunun kök bölümü OUYA


İkinci adım, alternatif. Kurtarma bölümü

Diğer bölümdeki kurtarma önyükleme bayrağının ayarlanması veya kullanıcının ses kısma tuşunu basılı tutarken akıllı telefonu açması durumunda, kontrolü, kurtarma bölümünün başında bulunan koda aktarır. Önyükleme bölümü gibi, belleğe açılan ve dosya sisteminin kökü haline gelen bir çekirdek ve bir RAM diski içerir. Ancak, RAM diskin içeriği burada biraz farklıdır.

İşletim sistemi önyüklemesinin farklı aşamaları arasında geçiş bağlantısı olarak işlev gören önyükleme bölümünün aksine, kurtarma bölümü tamamen kendi kendine yeten bir sistemdir ve Android ile ilgili olmayan bir minyatür işletim sistemi içerir. Kurtarma, kendi çekirdek işlevine, kendi uygulama kümelerine (komutları) ve kullanıcının hizmet işlevlerini etkinleştirmesine izin veren kendi arayüzüne sahiptir.

Standart (stok) geri kazanımında genellikle sadece üç tane fonksiyon vardır: akıllı telefon üreticisi tarafından imzalanmış, ürün yazılımı imzalı anahtarın kurulumu, silme ve yeniden başlatma. ClockworkMod ve TWRP gibi değiştirilmiş üçüncü taraf kurtarma, çok daha fazlasını sunuyor. Dosya sistemlerini biçimlendirebilir, herhangi bir tuşla imzalanmış ürün yazılımını yükleyebilirler (okuma: özel), dosya bölümlerini diğer bölümlere (işletim sistemi hata ayıklama amaçları için) monte edebilir ve ürün yazılımı sürecini ve diğer birçok işlevi otomatikleştiren komut dosyası desteği içerir.

Komut dosyalarını kullanarak, örneğin, kurtarma işlemini yükledikten sonra, bellek kartında gerekli bellenimi otomatik olarak bulup, yükleyip Android'e yeniden başlattığınızdan emin olabilirsiniz. Bu özellik ROM Yöneticisi, otomatik flaşör, CyanogenMod ve diğer firmware otomatik güncelleme mekanizması araçları tarafından kullanılır.

Özel kurtarma ayrıca /system/addon.d/ dizininde bulunan yedekleme komut dosyalarını da destekler. Yanıp sönmeden önce kurtarma, komut dosyalarını denetler ve yanıp sönmeden önce bunları yürütür. Bu komut dosyaları sayesinde, yeni bir ürün yazılımı sürümü yüklendikten sonra boşluklar kaybolmaz.

Üçüncü adım. başlatma

Böylece, kontrol edildikten sonra, çekirdek RAM diskini bağlar ve tüm alt sistemlerinin ve sürücülerinin başlatılmasından sonra, Android başlatmanın başladığı init sürecini başlatır. Daha önce de söylediğim gibi, init, init.rc adlı bir konfigürasyon dosyasına sahiptir, bu sayede süreç, sistemi yükseltmek için ne yapması gerektiğini bilir. Modern akıllı telefonlarda, bu yapılandırma birkaç yüz satırlık etkileyici bir uzunluğa sahiptir ve ayrıca, ithalat yönergesinin yardımıyla ana bilgisayara bağlanan birkaç kız yapılandırmasının bir fragmanı ile donatılmıştır. Yine de, biçimi oldukça basittir ve aslında bloklara bölünmüş bir dizi komuttur.

Her bir blok, yükleme aşamasını veya Android geliştiricilerinin dilinde bir eylemi belirler. Bloklar, direktifle, ardından eylemin adıyla, örneğin, erken-init ya da post-fs ile birbirinden ayrılır. Komutların blokları sadece aynı ismin tetiklemesi tetiklenirse yürütülür. Başlatma başladığında, init, init, erken-fs, fs, post-f'ler, erken-önyükleme ve önyükleme tetikleyicilerini etkin hale getirecek ve böylece uygun komut bloklarını başlatacaktır.

CyanogenMod'den init.rc yapılandırmasının bir kısmı


  Eğer konfigürasyon dosyası başlangıçta listelenen birkaç konfigürasyonu çekiyorsa (ve bu hemen hemen her zaman böyle oluyorsa), bunların içerisindeki aynı isim komutu blokları ana konfigürasyonla birleştirilecektir, böylece tetik tetikleyici olduğunda init tüm dosyaların ilgili bloklarından gelen komutları çalıştırır. Bu, ana cihaz tüm cihazlar için ortak olan komutlar içerdiğinde ve her bir aygıt için özel olarak ayrı dosyalara yazıldığında, çeşitli aygıtlar için yapılandırma dosyaları oluşturmanın rahatlığı için yapılır.

Ek yapılandırmaların en önemlileri, aygıt adının ro.hardware sistem değişkeninin içeriğine göre otomatik olarak belirlendiği initrc.name_device.rc olarak adlandırılır. Bu, belirli bir aygıta özgü komut bloklarını içeren, platforma özel bir yapılandırma dosyasıdır. Çekirdeğin ayarlanmasından sorumlu komutlara ek olarak, aşağıdaki komut hakkında da bilgi içerir:

mount_all ./fstab.device_name

Şimdi init, aşağıdaki yapıya sahip ./fstab.device_name dosyasında listelenen tüm dosya sistemlerini monte etmelidir:

device_name (bölüm) mount_point dosya sistemi option_fs diğer seçenekler

Genellikle, dosya sistemlerini iç NAND bölümlerinden / sistem (OS), / veri (uygulama ayarları) ve / önbellek (önbelleklenmiş veri) dizinlerine bağlamak için yönergeler içerir. Ancak, bu dosyayı biraz değiştirerek, sistemi bellek kartından başlatmak için init'i zorlayabiliriz. Hafıza kartını üç 4 bölüme ayırmak yeterlidir: 1 Gb / ext4, 2 Gb / ext4, 1 Gb / ext4 ve kalan alan yağ32. Ardından, / dev dizinindeki (farklı aygıtlar için farklı) bellek kartının bölümlerinin adlarını belirlemeniz ve bunları fstab dosyasındaki orijinal aygıt adlarıyla değiştirmeniz gerekir.

Tipik fstab dosya içeriği


  Önyükleme başlangıç ​​bloğunun sonunda büyük olasılıkla class_start varsayılan komutuyla karşılaşacaksınız; bu da, yapılandırmada listelenen tüm hizmetleri varsayılan sınıfla ilişkili olarak başlatmanız gerektiğini size bildirecektir. Hizmetlerin açıklaması servis yönergesi ile başlar, ardından servisin adı ve başlatılması için çalıştırılması gereken komut. Bloklarda listelenen komutlardan farklı olarak, servisler her zaman çalışmalıdır, bu nedenle akıllı telefonun ömrü boyunca, init arka planda durup ona göz kulak olur.

Modern Android, düzinelerce hizmet içerir, ancak ikisi özel bir statüye sahiptir ve tüm sistem yaşam döngüsünü tanımlar.

Dördüncü Adım. Zygote ve app_process

  Yükleme işleminin belirli bir aşamasında, init, bu ünite gibi bir yapılandırma sonunda karşılaşır:

hizmet zygote / system / bin / app_process -Xzygote / sistem / bin --zygote - start-sistem-sunucu
   sınıf varsayılanı
   soket zygote akışı 660 kök sistemi
   onrestart yaz / sys / android_power / request_state uyan
   onrestart yazma / sys / güç / durum açık
   onrestart medyayı yeniden başlat
   onrestart restart netd

Bu, hizmetlerin başlatılması, sistem hizmetlerinin başlatılması, kullanıcı uygulamalarının başlatılması ve durdurulması ve diğer birçok görevden sorumlu olan herhangi bir Android sisteminin önemli bir bileşeni olan Zygote hizmetinin bir açıklamasıdır. Zygote, yukarıdaki yapılandırmada çok iyi görülebilen küçük bir uygulama / sistem / bin / app_process kullanılarak başlatıldı. App_proccess görevi, kodu /system/lib/libandroid_runtime.so paylaşılan kütüphanesinde bulunan Dalvik sanal makinesini başlatmak ve daha sonra Zygote'u çalıştırmaktır.

Bütün bunlar bittiğinde ve Zygote kontrolü ele geçirdiğinde, çerçevenin tüm Java sınıflarını yükleyerek Java uygulamalarının yürütme ortamını oluşturmaya başlar (şimdi 2000'den fazla var). Daha sonra, Pencere Yöneticisi, Durum Çubuğu, Paket Yöneticisi ve daha da önemlisi, başlangıç ​​ve bitiş sinyallerini almaktan sorumlu olacak Aktivite Yöneticisi de dahil olmak üzere, yüksek seviyeli (Java'da yazılmış) sistem hizmetlerinin çoğunu içeren system_server'i başlatır. uygulamalar.

Bundan sonra Zygote soketi / dev / socket / zygote'u açar ve uyuyarak veriyi bekler. Şu anda, daha önce başlatılan Etkinlik Yöneticisi, masaüstünü oluşturmaktan sorumlu uygulamayı bulmak için Intent.CATEGORY_HOME yayın içeriğini gönderir ve bir soket aracılığıyla Zygote adını verir. İkincisi, sırayla, uygulamayı sanal makinenin üstüne koyar ve çalıştırır. Voila, ekranda bir masaüstümüz, bulunan bir Aktivite Yöneticisi ve çalışan bir Zygote ile Status Bar hizmetinde system_server tarafından başlatılan bir durum çubuğumuz var. Simge üzerine dokunduktan sonra, masaüstü bu uygulamanın adı ile bir niyet gönderecek, Etkinlik Yöneticisi tarafından kabul edilecek ve uygulamayı Zygote daemonuna başlatmak için bir komut gönderecektir.

Bütün bunlar biraz anlaşılmaz görünebilir, ama en önemli şey üç basit şeyi hatırlamaktır:

Sistem hizmetleri ve çekirdek konuları


bulgular

  Birçok yönden, Android diğer işletim sistemlerinden çok farklı ve bunu anlamak imkansız. Ancak, her şeyin nasıl çalıştığını anlarsanız, sadece sonsuz olasılıklar vardır. İOS ve Windows Phone'un aksine, Google'ın işletim sistemi, kod yazmadan davranışını ciddi şekilde değiştirmenize izin veren çok esnek bir mimariye sahiptir. Çoğu durumda, gerekli yapılandırma ve komut dosyalarını ayarlamak yeterlidir.
ara katman, yüksek verimlilik gerektiren ortak sorunları çözmek için tasarlanmış bir dizi kütüphane (Kütüphaneler) 'dir. Yani, daha yüksek seviyeler için uygulanan algoritmaların sağlanmasından, dosya formatlarının desteklenmesi, kodlama ve kod çözme bilgilerinin (örneğin, çoklu ortam kodekleri), çizim grafikleri ve çok daha fazlasından sorumludur. Kütüphaneler C / C ++ 'da uygulanmakta ve spesifik olarak derlenmektedir. donanım   Önceden yüklenmiş bir formda üretici tarafından temin edilen cihazlar.

Düşük seviyeli kütüphanelerden bazıları:

  1. Yüzey Yöneticisi - Android Compiz (Linux) gibi bir kompozit pencere yöneticisi kullanır, ancak daha ilkeldir. Grafikleri doğrudan görüntü arabelleğine çekmek yerine, sistem, başkalarıyla birlikte biriktirdiği, belirli bir bileşimi oluşturan ve ardından ekranda kullanıcıya görüntülenen seslendirme arabelleğine gelen çizim komutlarını gönderir. Bu, sistemin ilginç kesintisiz efektler oluşturmasına, pencere şeffaflığını ve düzgün geçişleri gerçekleştirmesine izin verir.
  2. Medya Çerçevesi - PacketVideo OpenCORE temelinde uygulanan kütüphaneler. Yardımları ile sistem, ses ve video verilerini kaydedebilir ve çalabilir, ayrıca statik görüntüler de verebilir. MPEG4, H.264, MP3, AAC, AMR, JPG ve PNG gibi birçok popüler format desteklenmektedir. Gelecekte OpenCORE, daha basit bir çerçeve olan Stagefright ile değiştirilecek.
  3. SQLite, temel veritabanı motoru olarak Android'de kullanılan hafif ve verimli bir ilişkisel veritabanı motorudur.
  4. 3D kütüphaneler - mümkün olan yerlerde donanım hızlandırmayı kullanarak yüksek düzeyde optimize edilmiş 3D grafikler için kullanılır. Uygulamaları OpenGL ES 1.0 API'sine dayanmaktadır.
  5. FreeType, bitmap'lerle çalışmanın yanı sıra fontları rasterleştirmek ve bunlarda işlem yapmak için kullanılan bir kütüphanedir. Bu, yazı tipleri ve metin görüntüleme için yüksek kaliteli bir motordur.
  6. LibWebCore, Google Chrome ve Apple Safari masaüstü tarayıcılarında da kullanılan tanınmış tarayıcı motoru WebKit'in bir kütüphanesidir.
  7. SGL (Skia Grafik Motoru) - 2D grafiklerle çalışmak için açık bir motor. Grafik kitaplığı Google'ın bir ürünüdür ve genellikle diğer programlarında kullanılır.
  8. SSL - OpenSSL'ye dayalı aynı şifreleme protokolünü destekleyen kütüphaneler.
  9. libc, standart C dil çağrılarının bir kütüphanesidir, küçük cihazlar için bir glibc (Linux'tan GNU libc) analogudur. Biyonik denir.


Şek. 1.5.

Aynı düzeyde Android Runtime - uygulama çalışma zamanı ortamıdır. Temel bileşenleri bir dizi standart kütüphane ve sanal makine Dalvik. Android OS'deki her uygulama Dalvik sanal makinesinin kendi kopyasıyla çalışır. Böylece, tüm çalışan süreçler işletim sisteminden ve birbirlerinden izole edilir. Android Runtime'ın mimarisi, programların çalışmalarının kesinlikle sanal makine ortamı çerçevesinde gerçekleştirileceği şekildedir. Bu nedenle, işletim sisteminin çekirdeği, diğer bileşenlerinden olası zararlardan korunmaktadır. Bu nedenle, hataları veya kötü amaçlı yazılımları içeren kod, Android işletim sistemini ve cihazı temel alarak bozamaz. Kodun yürütülmesiyle birlikte bu tür bir koruyucu işlev, Android Çalışma Zamanı'nın anahtarlarından biridir.

Yukarıdaki seviye, uygulama çerçevesi düzeyi olarak da adlandırılan Uygulama Çerçevesi'dir. Geliştiricilerin alt düzey sistem bileşenleri tarafından sağlanan API'ye erişebildikleri uygulama çerçevelerinden geçer. Ek olarak, çerçeve mimarisi sayesinde, herhangi bir uygulama, erişime izin verilen diğer uygulamaların zaten uygulanmış yeteneklerini sağlar. Her uygulamanın temelini oluşturan ve çerçevenin bir parçası olan temel hizmet ve sistemler grubu şunları içerir:

  1. Listeler, metin alanları, tablolar, düğmeler veya gömülü bir web tarayıcısı gibi uygulamaların görsel bileşenlerini oluşturmak için kullanılabilecek zengin ve genişletilebilir görünümler (Görünümler).
  2. Bazı uygulamaların diğerlerine açık olduğu verileri yöneten İçerik Sağlayıcıları, işlerini kullanmak için kullanabilmelerini sağlar.
  3. Dize verileri, grafikler, dosyalar ve diğerleri gibi kod taşımayan kaynaklara erişim sağlayan bir kaynak yöneticisi (Kaynak Yöneticisi).
  4. Tüm uygulamaların kullanıcı için kendi durum bildirimlerini durum çubuğunda görüntüleyebileceği Bildirim Yöneticisi (Bildirim Yöneticisi).
  5. Uygulamaların yaşam döngüsünü yöneten, işin geçmişi ile ilgili verileri depolayan ve aynı zamanda onlar için bir navigasyon sistemi sağlayan Etkinlik Yöneticisi.
  6. Konum Yöneticisi (konum yöneticisi), uygulamaların cihazın mevcut coğrafi konumu hakkında düzenli olarak güncellenen verileri almasına izin verir.

Android yazılım yığınının en üstünde Uygulamalar seviyesi (Uygulamalar) yatıyor. Bu, Android işletim sisteminde önceden yüklenmiş bir dizi temel uygulamayı içerir. Örneğin, bir tarayıcı, e-posta istemcisi, SMS göndermek için program, haritalar, takvim, iletişim yöneticisi ve diğerleri içerir. Entegre uygulamaların listesi, cihaz modeline ve Android sürümüne bağlı olarak değişebilir. Ve bu temel setin yanı sıra, uygulama seviyesi, kullanıcı tarafından yüklenenler de dahil olmak üzere, Android platformu için tüm uygulamaları içerir.

Kural olarak, Android uygulamaları Java'da yazılmıştır, ancak C / C ++ programlarında (Yerel Geliştirme Kiti kullanılarak) programlar geliştirmek için bir fırsat vardır. Exotics Basic (Basit kullanarak) ve diğer dilleri kullanarak çağrılabilir. Ayrıca App Inventor gibi uygulama tasarımcılarını kullanarak kendi programlarınızı da oluşturabilirsiniz.

1.6. Çekirdek Özellikleri

Çekirdek, Linux işletim sisteminin en önemli parçasıdır ve diğer bölümlerinin aksine, neredeyse tamamen Android işletim sistemine aktarıldı. Ancak, aktarma sürecinde çekirdek için yaklaşık 250 yamalar uygulanmıştır.

Android işletim sistemi çekirdeğinde, Linux işletim sisteminin karşılıklı işleyen iletişim araçlarını terk etmeye ve bunun yerine Binder adlı tek bir mekanizma oluşturmaya karar verildi. Binder, bir sürecin yöntemlerini başka bir süreçten çağırmanıza, argümanları onlara aktarmanıza ve sonuçları almanıza olanak tanır, tıpkı yöntemler aynı süreç içinde çağrılır. Binder, bu işi en az bellek kullanımıyla yapar.

Küçük cihazlarda hata ayıklamayı etkinleştirmek için, hata ayıklama bilgisi çekirdeğe eklenmiştir. seri bağlantı noktası   ve logcat komutu için destek uyguladı.

Büyük değişiklikler hafızaya dokundu. Geleneksel Linux paylaşımlı bellek shmem yerini ashmem almıştır. Aynı problem, ancak fiziksel bellek düzeyinde, pmem sürücüsü kullanılarak çözülür. Viking Killer olarak adlandırılan özel bir bellek işleyici eklenmiştir, en basit durumda işlemi yalnızca öldürür, ancak daha karmaşık kurallar ayarlanabilir.

Ağ yığınına yeni güvenlik ayarları eklendi, YAFFS2 flash sürücüler için dosya sistemi desteği, çekirdeğe dahil edildi.

1.7. Java makinesi Dalvik

Dalvik Sanal Makine, Android mobil platformun bir parçasıdır. O sanal makineDan Bronstein sponsorluğunda. Gibi yayılıyor özgür yazılım BSD uyumlu Apache 2.0 lisansı altında. Birçok açıdan, bu gerçek, Google’ın Sun’dan lisans almak için gerekli olan JME’yi (Java Micro Edition) terk etme kararında rol oynamıştır. Bu nedenle amacı açık bir işletim sistemi oluşturmak olan şirket kendi sanal makinesini geliştirdi.

Yığın odaklı olan çoğu sanal makinenin (aynı Java Sanal Makinesi) aksine Dalvik, standart bir çözüm olarak adlandırılamayacak kayıt odaklı bir programdır. Öte yandan, mobil cihazlarda çok yaygın olarak kullanılan ARM işlemcileri içeren RISC mimarisi işlemcileri üzerinde çalışmak için çok uygundur.

Dalvik, Android platformu için özel olarak tasarlanmıştır. Platformun tüm süreçleri izole edilmiş, her biri kendi adres alanında çalıştığı dikkate alınmıştır. Sanal makine   Düşük bellek tüketimi için optimize edilmiş ve mobil donanım üzerinde çalışmaktadır. Android 2.2 ile başlayan Dalvik, JIT (Just-in-Time) derlemesini kullanıyor. Bu özelliklerin bir sonucu olarak hızlı ve üretken sanal makineBu uygulamanın bir bütün olarak çalışmasını etkileyemez.

Dalvik kendi bayt kodunu kullanır. Bir Android uygulaması geliştirirken, derleyici tarafından özel bir makine bağımsız alt düzey koduna dönüştürülür. Bir platformda yürütüldüğünde, Dalvik böyle bir programı yorumlar ve uygular.

Ayrıca Dalvik, Java bayt kodlarını yerel format kodlarına çevirebiliyor ve sanal ortamda da çalıştırabiliyor. Program kodu Java'da ve derlemeden sonra yazılır. sınıf dosyaları, Android SDK'da bulunan özel yardımcı dx'i kullanarak .dex biçimine (Dalvik'teki yorumlara uygun) dönüştürülür.

1.8. biyonik

Bionic, BSD lisansı (Berkeley Yazılım Dağıtım, eğitim kurumları arasında deneyim paylaşımı için oluşturulan bir kaynak tabanlı yazılım dağıtım sistemi) altında dağıtılan ve Android için Google tarafından geliştirilen standart C dil çağrılarının bir kütüphanesidir. Biyonik olarak, tam glibc uygulamasında kullanılabilen Android olmayan bazı POSIX işlevleri vardır.

Biyonik temel farklılıklar:

  1. BSD lisansı: Android, GNU Genel Kamu Lisansı (GPL) kapsamında olan Linux çekirdeğini kullanır, ancak Google, Android uygulamalarını GPL'nin etkilerinden ayırmak istedi. Linux çekirdeği ile yaygın olarak kullanılan GNU libc, uClibc'ye alternatif olarak GNU LGPL lisansı altındadır.
  2. küçük boyut: biyonik nesne kodu glibc'den çok daha küçük (yaklaşık 2 kez) ve uclibc'den biraz daha küçüktür.
  3. biyonik, nispeten düşük saat hızlarına sahip işlemciler için tasarlanmıştır.
  4. pOSIX iş parçacıklarının kesilmiş fakat etkili bir şekilde uygulanması.

1.9. Java Application Programmer Arayüzlerine Genel Bakış

Android uygulama programcısı için - Java dilinde bir dizi arayüz. Nasıl organize olduğunu düşünün. Paketin merkezinde java.util, java.lang, java.io gibi standart Java dilinin bir parçası olan paketler bulunur. Java uygulamalarının çalışabileceği ve Android için spesifik olmayan herhangi bir platformdadır. Dilin standartlarına dahil olmayan uzantılar onlara eklenmiştir, ancak fiili uzun süredir standart - javax.net paketleri, javax.xml.

Android ayrıca daha az yaygın Java eklentileri de içerir: org.apache.http paketi, HTTP protokolünün en katı uygulaması. Org.json paketi, JavaScript nesnelerinin serileştirilmesinden ve AJAX teknolojisinin desteklenmesinden sorumludur. Org.w3c.dom paketi belge nesne modelini sağlar

    Android platformuna dayalı belirli tablet modellerinde, yukarıdaki listeden bazı bileşenler eksik olabilir.

    Tüm "android" tabletler, Google'ın mobil işletim sisteminin sürümlerinden biri tarafından kontrol edilir. Bununla birlikte, daha eski versiyonlar modern uygulamaların bazılarını desteklemeyebilir.

    En popüler mobil işletim sisteminin tüm sürümleri ortak bir temel oluşturur. Android işletim sistemini çok katmanlı bir yapı olarak hayal edebiliyoruz. Bilgisayar mühendisleri buna yazılım yığını diyorlar. Yığının en üstündeki öğeler, kullanıcının işletim sistemi ile etkileşimi sırasında gördüğü şeydir. Yığının alt kısmında, işletim sisteminin doğrudan aygıtın donanımıyla etkileşime giren kısımları bulunur.

    Bu nedenle, en düşük seviyede donanım bileşenleri kendileri: işlemciler, sensörler, teller ve baskılı devre kartları. Bir sonraki katman, işletim sisteminin çekirdeğidir. Çekirdek bazen gömülü (veya tescilli) yazılım olarak da adlandırılır. “Firmware” in İngilizce tanımı daha çok bilinmektedir. Bu yazılım, cihazın donanım kaynaklarını kontrol eder, kontrol eder ve dağıtımını yapar.

    İşletim sisteminin bu kısmı, kullanıcının kullanışlı grafiksel arabirim aracılığıyla verdiği komutları donanım bileşenlerinin diline çevirir. Android için çekirdeğin bir örneği Linux 2.6 açık kaynaklı işletim sistemidir.

    Android kütüphaneleri işletim sistemi çekirdeğinin üstünde bulunur. Bir cihaz, çeşitli veri türlerini işlemede izlediği talimatlar kümesidir. Bir örnek üç boyutlu uzayda yönelim kütüphanesidir. Android cihazının uzayda bulunduğu konumdaki değişiklikleri tanımak ve onlara yanıt vermek için gerekli olan tüm talimatları içerir.

    Yazılım yığınının aynı seviyesinde, Java dilinde yazılmış uygulamaları desteklemek için gereken kök kütüphaneleri vardır. Java, Sun Microsystems'den bir programlama dilidir. Son zamanlarda, Java özellikli telefonlar çok yaygındı. Şu anda, onlar akıllı telefonlar tarafından giderek daha fazla yeniliyorlar.

    Android sanal makinesi, işletim sistemi yazılım yığınının aynı düzeyinde bulunur. Bu yazılım parçası, sanal çalışma ortamı olarak da adlandırılan sanal bir çalışma ortamı yaratıyor. Sanal makine, ayrı bir işletim sistemine sahip fiziksel bir aygıtı simüle eder. Google bu katmanı, Android işletim sisteminde çalışan her bir uygulamanın ayrı bir işlem olarak çalışması için tasarladı. Böylece, çalışan işlemlerden biri başarısız olursa, geri kalanlar etkilenmeden kalır. Sanal makine ayrıca bir bellek yöneticisinin rolünü oynar.

    Bir sonraki seviye uygulama çerçevesidir. Tüm uygulamalar "android" cihaz için esastır. Uygulama altyapısı, uygulamalar ve işletim sisteminin geri kalanı arasındaki bağlantıdır.

    Google, geliştiricilerin, arama katmanı işletim sistemi tarafından geliştirilen uygulama programlama arabiriminin () bir parçası olarak bu katmanla etkileşime giren uygulamalar oluşturmasını önerir. Geliştiricilerin yalnızca kendilerini API ile ilgili kurallara alıştırmaya ihtiyaçları vardır. Her "android" tabletin teknik özelliklerini düşünmek zorunda değiller.

    Yazılım yığınının üst seviyesi, kullanıcı arayüzünü ve android tabletin tüm uygulamalarını içerir. İşletim sisteminin bu kısmı, kullanıcı tarafından sürekli olarak görülür. Fakat bu çekici ve renkli tabakanın ardında çok fazla sıkıcı ve sadece kodun uzmanlarına ilgi duyuyor.

    Diğer tüm işletim sistemleri ve tabletin diğer donanım kaynakları gibi.

    Bilgisayar.howstuffworks.com dayanarak

# gerçekler | Android nasıl çalışır?    Oleg Dovbnya

Teması devam ediyor:
cihazlar

Çizim - en eski sınıflardan biri. Dünyanın farklı yerlerinden gelen insanlar, hikayenin yazılı kaynaklarda kaydedilmeye başlanmasından önce bile bununla uğraştılar. O zamandan beri, geçti ...