AOSP Deep Dive — Dizin Yapısı
AOSP kaynak kodlarını derin inceleme maksatlı çeşitli seviyelerde makale ve video paylaşacağım.
Bu serinin ilk makalesi,AOSP projesinin kaynak kodlarına ait dizin yapısını tanımakla başlayacağız.
NOT: AOSP’a ait kaynak kodları BURADAN indirebilirsiniz. Gerekli talimatlar ilgili sayfada mevcuttur.
Source Code Dizin Yapısı
Open Source projelerin kaynak kodlarını incelemeye geçmeden evvel,ilgili projeye ait dizin yapısını tanımak iyi bir başlangıçtır.Eğer incelenecek proje AOSP gibi büyük bir proje ise,bu durumda çok fazla dizin ve alt dizinle çalışmak zorunda kalabiliriz.
Projeye ait dizin yapısını iyi bilmek-tanımak,projeye yapacağımız katkıyı proje içinde daha iyi konumlandırmak demektir.Custom projelerde ürün geliştiren firma kendine ait modülleri,kütüphaneleri ve applicationları belli bir mimaride tutmak için yeni alt dizinler oluşturabilir. Bu eklentiler projeye ait dizin yapısını oldukça dağınık hale getirebilir. Örneğin kendi ürününe ait bir modülü aosp’e ait framework dizinine yerleştirmek yerine,kendi ürününe ait başka bir alt dizin oluşturup oraya konumlandırabilir.Veya aynı şekilde kendi ürününe ait application’ları orjinal AOSP application dizininde konumlandırmak yerine kendi vendor dizininde konumlandırabilir. Ve aynı şekilde android kernel için de bu durum mevcuttur. Ancak ne olursa olsun,standart AOSP dizin yapısı orjinal yapısını kurumaya devam eder.
AOSP kaynak kodlarını başarıyla indirdikten sonra,bizi karşılayan ilk dizin içeriği aşağıdaki gibi olacaktır.
Görselde de görüldüğü üzere dizinlerin yanı sıra birkaç dosya da yer alıyor.
Bu dizinleri ve dosyaları sırayla açıklamaya geçelim.
abi: Bu klasör birçok yere bağlı bazı C++ dosyalarını içeren “cpp” isminde bir alt klasör barındırır. Custom ürün geliştirme aşamasında temel olarak bu klasörle işiniz olmayacak.
art: ART’a ait dizindir. Art ile ilgili derleme vb burada yer alır. Temel android bilgisine sahip her geliştirici ART’ı bilir. Dolayısıyla üzerinde durmadan geçeceğiz. Ancak art’ın desteklenmediği sistemlerde bu dizin bulunmaz.
bionic: Bionic,Google tarafından Android işletim sistemi için geliştirilen standart C kütüphanesinin bir uygulamasıdır. Bu kütüphane,tipik bir linux sisteminden daha az bellek ve işlemci gücüne sahip aygıtlar için tasarlanmıştır. Bu özelliği dolayısıyla GNU C(glibc) kütüphanesinden farklıdır.
bootable: Boot(önyükleme) ve Startup(Başlatma) ile ilgili kaynak kodları içerir. Ve diğer “fastboot,recovery,diskinstaller vb.” modüllerini içerir. Yani boot ile ilgili tüm süreçler burda yer alır. Ayrıca custom ürün geliştiriciler buraya kendi “recovery,fastboot,vb” modüllerini yerleştirirler.
build: Sistemi derlemek için tüm derleme dosyaları(.mk) ve scriptler bu dizinde yer alır. Sisteme ekleme,çıkarma,revize vb. gibi tüm konuları bu dizin altında yapabilirsiniz. Build’in ana tetikleme noktası ise “envsetup.sh” dosyasıdır. Ancak custom ürün geliştiriciler bu dosyayı ve/veya dizin içinde bulunan diğer dosyaları/scriptleri baypas edebilirler. Sistem üzerinde çalışmaya başlamadan evvel, “envsetup.sh” dosyası içindeki talimatları okumanız önerilir.
cts: Android sistemine ait uyumluluk denetimleri ve testleri bu dizinde yer alır.
dalvik: Dalvik’e ait dizindir. Dalvik ile ilgili kaynak kodlar ve derleme süreçleri bu dizinde yer alır.
developers: Geliştiricilere örnek olması açısından bazı application örnekleri bu dizinde yer almaktadır.
development: Bu dizin,sistemi geliştirme ile ilgili kullanabileceğiniz IDE’ler ve sistemle birlikte deploy edilmeyen bazı faydalı uygulamalar(widget vb.) barındırır. Örneğin eclipse ortamı için “../development/ide/eclipse/” dizinini kullanabilirsiniz.Dolayısıyla projeyi eclipse ortamında açmak için bu dizinde bulunan talimatları(README.importing-to-eclipse.txt) okuyabilirsiniz.
device: Bu dizinde birçok cihaz(asus,samsung,..) için cihaza özel konfigürasyonları içerir. Ancak custom çalışmalarda üreticinize ait konfigürasyonları burda bulamayabilirsiniz. Ayrıca bu dizinde cihaz konfigürasyon alt dizinleri yanı sıra aşağıda yer alan dizinleri de barındırır.
- common: Bu dizin gps bilgilerini ve ayrıca build işlemine dahil edilecek özel binary dosyaları telefonunuzdan çıkarmanıza olanak tanıyan script dosyası içerir.
- generic: Bu dizin “goldfish” adı verilen genel cihaz yapılandırmasını içerir.Ayrıca bazı mimarilere ait sınıflandırmalar da içerir. Tüm bunlar emulatörleri build etmek için gereklidir.
- google:Bu dizin Android Aksesuar Geliştirme Kiti(ADK) kodunu içerir. ADK,donanım üreticileri ve hobi olarak uğraşanların Android’e aksesuar geliştirmek için başlangıç noktası olarak kullanılmak üzere bir referans uygulamadır.
- sample:Bu dizin,Android framework’u değiştirmeden kendi Android platform paylaşılan kütüphanenizi yazmanın kapsamlı bir örneğini içerir.Ayrıca JNI kodunu yazmak ve yazılan kütüphanenin uygulamaya nasıl dahil edileceği ile ilgili bir örnek barındırır. Dolayısıyla AOSP üzerinde çalışmaya aşina değilseniz,bu dizini incelemenizi ve örnek çalışmalar yaparak deneyimlemeniz önerilir.
docs: AOSP ile ilgili dökümantasyon içerir.
external: Bu dizin,”SQLite,webrtc,yaffs2,arduino,freetype,vb..” gibi tüm harici açık kaynaklı projelerin kaynak kodlarını içerir.
frameworks: AOSP’nin en önemli dizinlerinden birisidir. Framework kaynak kodları burada yer alır. Ayrıca harici paketlerin implement edildiği,java uygulama apileri ve native kütüphanelerin dahil edildiği dosyalar ve alt dizinler barındırır.
hardware: Android donanım soyutlama katmanı(HAL) bu dizinde yer alır. Bu dizin ayrıca Radyou Arayüz Katmanı(RIL) uygulamasını da barındırır.
kernel: Kernel dizini AOSP kaynak koduna ait varsayılan bir klasör değildir. AOSP source kodlarını çekerken default olarak bu dizin gelmeyebilir. Bu dizini harici olarak çekip dahil etmeniz gerekir. Ancak custom ürün çalışmalarında bu dizin üretici firma tarafından revize edilmiş haldedir.Dolayısıyla standart linux kernel dizin içeriğinden farklılık gösterebilir.
libcore: Bu dizin aşağıda yer alan alt dizinleri içerir.Bu dizinlerin her biri farklı bir işleve sahiptir.Bunları sırayla açıklayalım:
- dom: DOM için java test classları.
- expectations: Test senaryoları hakkında bilgi içerir.
- dalvik: Android için dalvikVM runtime.
- include: Dizi ve String kullanımları için bazı CC++ dosyaları içerir.
- json: JSON tabanlı java implementasyon içerir.
- luni: .jar ve .dex dosyalarını yüklemek için test kaynak kodunu içerir.
- support: Dalvik’i test etmek için destek sınıf dosyaları içerir.
- xml:XML implementasyon içerir.
nativehelper: Native yardımcı dosyaları.
mediatek: Üretici firmaya ait tüm kaynak kodlar yer alır.Bu dizinde AOSP’ye ait birçok dosya ve dizin baypas edilmiş haldedir.
Ürüne ait build,kernel,framework,application,HAL vb. ve yapılandırma dosya/scriptler yer alır.
ndk: NDK’yı oluşturmak için derleme ve script dosyaları ve yardımcı dosyaları içerir.
out: Derleme işlemi sürerken ve tamamlandığında,derlemeye ait dosya,paket,binary’ler vb. çıktılar yer alır.Ürüne ait log ve binary çıktıları “out/target/product/” dizininde yer alır. Eğer emulator için derleme yapıyorsanız,derleme çıktıları “out/target/product/generic” dizininde yer alacaktır. Yani bu dizinde,ürün için derlediğiniz sistemin flash’a yüklenecek hali,ve/veya emulator için derlediyseniz emulatore uygun çıktıların yer alacağı dizindir. Benim kaynak kodlarım bir ürün için derlendi ve “out/target/product” dizin içeriği aşağıdaki gibidir:
Ve ürüne ait çıktılar:
packages: Android’e ait standart applicationlar bu dizinde yer alır.Kamera,SMS,Dialer,Launcher,vb.
pdk: Platform Geliştirme Kiti(PDK),yeni bir android platformu piyasaya sürülmeden önce,yonga seti satıcılarına sağlanan indirgenmiş(sadece HAL katmanını geliştirmek için gerekli bileşenler) bir android sürümüdür.
prebuilt: Çapraz derleme araçlarını içerir.Python,GCC,Clang,vb.
sdk: Bu dizin,işletim sisteminin parçası olmayan birçok uygulama içerir.Geliştiricilerin yararlanabileceği ve işletim sisteminin bir parçası olarak daha da geliştirilebilecek oldukça kullanışlı uygulamalar var.
system: Android core sistem için kaynak kod dosyaları yer alır. Bu kısım android için core işlevini üstlendiği için,dalvik vm ve herhangi bir java tabanlı servisler etkinleştirilmeden önce çalışacak minimum linux sistemidir.
Yani init vb. kısımlara ait kaynak kodlar burada yer alır.
tools: Sistemi derlemeye yardımcı olan bazı harici önemli araç(gradle,vb) gereçler bulunur.
vendor: Bu dizinde,üreticiler tarafından açık kaynak olmayan uygulamaların paketlenmiş(binary vb.) hali yer alır.
AOSP’ye ait olan dizinler yukarıdaki gibidir. Ana dizinde yer alan bazı dosyalar üretici firmaya göre değişkenlik gösterebilir veya hiç olmayabilir.
Örnek:
checkenv.log: Bu dosya,derleme yapacağınız sistemin derleme ortamına uygun olup olmadığını ve gerekliliklerini raporlar.Yani “envsetup.sh” dosyası çalışmaya başladığında bu dosyayı oluşturur. Derlemenin başlatılmasıyla ilgili herhangi bir problem çıkarsa,problemle ilgili detayları bu dosyada bulabilirsiniz. Örneğin Sistem bellek yetersizliği,JDK ve/veya JDK sürümü,python vb. kaynaklı eksikler ve/veya sürüm sorunları.
-end of