Uygulama öğeleri
Android, mobil cihazlar için açık kaynak bir platform ve uygulama ortamı sunar. Temel işletim sistemi Linux çekirdeğine dayanır. Android uygulamaları genellikle Java programlama dilinde yazılır ve Android Çalışma Zamanı (ART) sanal makinesinde çalışır. Ancak uygulamalar yerel kodda da yazılabilir. Uygulamalar, APK dosya uzantılı tek bir dosyadan yüklenir.
Android uygulamalarının ana yapı taşları şunlardır:
-
AndroidManifest.xml: AndroidManifest.xml dosyası, sistemde bir uygulamadaki tüm üst düzey bileşenlerle (özellikle aşağıda açıklanan etkinlikler, hizmetler, yayın alıcıları ve içerik sağlayıcılar) ne yapılacağını belirten kontrol dosyasıdır. Ayrıca hangi izinlerin gerekli olduğunu da belirtir.
-
Etkinlikler: Etkinlik, genellikle
Activity
sınıfını kullanan, kullanıcı odaklı tek bir görevin kodudur. Etkinlikler genellikle kullanıcıya bir kullanıcı arayüzü göstermeyi içerir ancak bu şart değildir. Bazı etkinlikler hiçbir zaman kullanıcı arayüzü göstermez. Genellikle uygulamanın etkinliklerinden biri uygulamaya giriş noktasıdır. -
Hizmetler: Hizmet, arka planda çalışan bir kod kümesidir. Kendi işleminde veya başka bir uygulamanın işlemi bağlamında çalışabilir. Diğer bileşenler bir hizmete "bağlanır" ve uzak prosedür çağrıları aracılığıyla bu hizmetteki yöntemleri çağırır. Hizmete örnek olarak bir medya oynatıcı verilebilir: Kullanıcı medya seçimi kullanıcı arayüzünden çıktığında bile muhtemelen müziğin çalmaya devam etmesini ister. Hizmet, kullanıcı arayüzü tamamlandığında bile müziğin çalmaya devam etmesini sağlar.
-
Yayın Alıcısı: BroadcastReceiver, işletim sistemi veya başka bir uygulama tarafından Intent olarak bilinen bir IPC mekanizması yayınlandığında oluşturulan bir nesnedir. Bir uygulama, örneğin düşük pil mesajı için bir alıcı kaydedebilir ve davranışını bu bilgilere göre değiştirebilir.
Android izin modeli: Korunan API'lere erişim
Android'deki tüm uygulamalar bir uygulama korumalı alanında çalışır. Android uygulamaları varsayılan olarak yalnızca sınırlı bir sistem kaynağı yelpazesine erişebilir. Sistem, yanlış veya kötüye kullanım amaçlı olarak kullanıldığında kullanıcı deneyimini, ağı veya cihazdaki verileri olumsuz yönde etkileyebilecek kaynaklara Android uygulamalarının erişimini yönetir.
Bu kısıtlamalar çeşitli şekillerde uygulanır. Bazı özellikler, hassas işlevler için API'lerin kasıtlı olarak bulunmaması nedeniyle kısıtlanır (örneğin, SIM kartta doğrudan değişiklik yapmak için Android API'si yoktur). Bazı durumlarda, rollerin ayrılması, depolama alanının uygulama başına izolasyonu gibi bir güvenlik önlemi sağlar. Diğer durumlarda, hassas API'ler güvenilir uygulamalar tarafından kullanılmak üzere tasarlanmıştır ve İzinler olarak bilinen bir güvenlik mekanizması aracılığıyla korunur.
Bu korumalı API'ler şunlardır:
- Kamera işlevleri
- Konum verileri (GPS)
- Bluetooth işlevleri
- Telefon işlevleri
- SMS/MMS işlevleri
- Ağ/veri bağlantıları
Bu kaynaklara yalnızca işletim sistemi üzerinden erişilebilir. Bir uygulamanın cihazdaki korumalı API'leri kullanabilmesi için manifest dosyasında ihtiyaç duyduğu özellikleri tanımlaması gerekir. Android 6.0 ve sonraki tüm sürümlerde çalışma zamanında izin modeli kullanılır. Bir kullanıcı, korumalı API gerektiren bir uygulamadan özellik isterse sistem, kullanıcıdan izni reddetmesini veya izin vermesini isteyen bir iletişim kutusu gösterir.
İzinler, yüklendikleri sürece uygulamaya uygulanır. Kullanıcıların kafasını karıştırmamak için sistem, uygulamaya verilen izinler hakkında kullanıcıyı tekrar bilgilendirmez. Ayrıca, temel işletim sistemine dahil edilen veya bir OEM tarafından paket hâline getirilen uygulamalar kullanıcıdan izin istemez. Uygulamalar kaldırıldığında izinler kaldırılır. Bu nedenle, uygulamanın yeniden yüklenmesi durumunda izinler tekrar gösterilir.
Kullanıcılar, cihaz ayarlarında daha önce yükledikleri uygulamaların izinlerini görüntüleyebilir. Kullanıcılar, GPS, radyo veya kablosuz ağ gibi bazı işlevleri istedikleri zaman dünya genelinde devre dışı bırakabilir.
Bir uygulama, manifest dosyasında belirtilmemiş bir korumalı özelliği kullanmaya çalıştığında izin hatası genellikle uygulamaya geri gönderilen bir güvenlik istisnasıyla sonuçlanır. Korunan API izin kontrolleri, atlatılmasını önlemek için mümkün olan en düşük düzeyde uygulanır. Korunan API'lere erişim isteğinde bulunurken bir uygulama yüklendiğinde gösterilen kullanıcı mesajı örneği Şekil 2'de verilmiştir.
Sistem varsayılan izinleri https://developer.android.com/reference/android/Manifest.permission.html adresinde açıklanmaktadır. Uygulamalar, diğer uygulamaların kullanabileceği kendi izinlerini beyan edebilir. Bu tür izinler yukarıdaki konumda listelenmez.
Bir izin tanımlanırken protectionLevel özelliği, kullanıcıya iznin gerekli olduğu uygulamalar hakkında nasıl bilgi verileceğini veya kimin izin almasına izin verileceğini sisteme bildirir. Uygulamaya özel izinleri oluşturma ve kullanma hakkında ayrıntılı bilgi edinmek için https://developer.android.com/guide/topics/security/security.html adresini ziyaret edin.
SMS yayın intent'leri gönderme gibi bazı cihaz özellikleri, üçüncü taraf uygulamaları tarafından kullanılamaz ancak OEM tarafından önceden yüklenmiş uygulamalar tarafından kullanılabilir. Bu izinler, signatureOrSystem iznini kullanır.
Kullanıcıların üçüncü taraf uygulamalarını nasıl anladığı
Android, kullanıcıların üçüncü taraf uygulamalarıyla etkileşime geçtiğinde bunu açıkça belirtmeye ve kullanıcıları bu uygulamaların sahip olduğu özellikler hakkında bilgilendirmeye çalışır. Herhangi bir uygulama yüklenmeden önce kullanıcıya, uygulamanın istediği farklı izinler hakkında net bir mesaj gösterilir. Yüklemeden sonra kullanıcıdan izinleri onaylaması tekrar istenmez.
İzinleri yükleme işleminden hemen önce göstermenin birçok nedeni vardır. Bu aşamada kullanıcı, uygulama, geliştirici ve işlev hakkındaki bilgileri inceleyerek bunların ihtiyaçlarına ve beklentilerine uygun olup olmadığını belirler. Ayrıca, kullanıcıların henüz uygulamaya zihinsel veya mali bir bağlılık geliştirmemiş olması ve uygulamayı diğer alternatif uygulamalarla kolayca karşılaştırabilmesi de önemlidir.
Diğer bazı platformlar, kullanıcı bildirimi için farklı bir yaklaşım kullanır ve her oturumun başında veya uygulamalar kullanılırken izin ister. Android'in vizyonu, kullanıcıların istedikleri zaman uygulamalar arasında sorunsuz bir şekilde geçiş yapmasını sağlamaktır. Her seferinde onay istemek kullanıcıyı yavaşlatır ve Android'in mükemmel bir kullanıcı deneyimi sunmasını engeller. Kullanıcının yükleme sırasında izinleri incelemesi, rahatsız edici bulduğu durumlarda uygulamayı yüklememe seçeneği sunar.
Ayrıca, birçok kullanıcı arayüzü çalışması, kullanıcıya çok fazla istem gösterilmesinin kullanıcının gösterilen tüm iletişim kutularına "Tamam" demeye başlamasına neden olduğunu göstermiştir. Android'in güvenlik hedeflerinden biri, önemli güvenlik bilgilerini kullanıcıya etkili bir şekilde iletmektir. Bu, kullanıcının yoksayması için eğitileceği iletişim kutuları kullanılarak yapılamaz. Önemli bilgileri yalnızca önemli olduğunda ve bir kez sunarak kullanıcıların neyi kabul ettiklerini düşünme olasılığı artar.
Bazı platformlar, uygulama işlevleriyle ilgili hiçbir bilgi göstermemeyi tercih eder. Bu yaklaşım, kullanıcıların uygulama özelliklerini kolayca anlamalarını ve tartışmalarını engeller. Tüm kullanıcıların her zaman bilinçli kararlar vermesi mümkün olmasa da Android izin modeli, uygulamalarla ilgili bilgileri geniş bir kullanıcı kitlesinin kolayca erişebileceği hale getirir. Örneğin, beklenmedik izin istekleri daha deneyimli kullanıcıların uygulama işleviyle ilgili kritik sorular sormasına ve Google Play gibi tüm kullanıcıların görebileceği yerlerde endişelerini paylaşmasına neden olabilir.
Uygulama yükleme sırasında izinler — Google Çeviri | Yüklü bir uygulamanın izinleri: Gmail |
---|---|
![]() |
![]() |
Şekil 1. Uygulamaların izinlerinin gösterilmesi
İşlemler arası iletişim
İşlemler, geleneksel UNIX türü mekanizmalardan herhangi birini kullanarak iletişim kurabilir. Dosya sistemi, yerel soketler veya sinyaller bu tür kaynaklara örnek olarak verilebilir. Ancak Linux izinleri geçerli olmaya devam eder.
Android ayrıca yeni IPC mekanizmaları da sağlar:
-
Binder: İşlem içi ve işlemler arası çağrılar gerçekleştirirken yüksek performans için tasarlanmış, hafif, özellik tabanlı bir uzak prosedür çağrısı mekanizması. Binder, özel bir Linux sürücüsü kullanılarak uygulanır. https://developer.android.com/reference/android/os/Binder.html sayfasına göz atın.
-
Hizmetler: Hizmetler (yukarıda ele alınmıştır), bağlayıcı kullanılarak doğrudan erişilebilen arayüzler sağlayabilir.
-
Intent'ler: Intent, bir şey yapma "niyetini" temsil eden basit bir mesaj nesnesi Örneğin, uygulamanız bir web sayfası görüntülemek istiyorsa bir Intent örneği oluşturarak ve bunu sisteme aktararak URL'yi görüntüleme "Intent"ini ifade eder. Sistem, bu Intent'i nasıl işleyeceğini bilen başka bir kod parçası (bu durumda Tarayıcı) bulur ve bu kodu çalıştırır. Intent'ler, sistem genelinde ilginç etkinlikleri (ör. bildirim) yayınlamak için de kullanılabilir. https://developer.android.com/reference/android/content/Intent.html sayfasına göz atın.
-
ContentProvider'lar: ContentProvider, cihazdaki verilere erişim sağlayan bir veri deposudur. Bunun klasik örneği, kullanıcının kişi listesine erişmek için kullanılan ContentProvider'dır. Bir uygulama, diğer uygulamaların bir ContentProvider aracılığıyla gösterdiği verilere erişebilir. Ayrıca, kendi verilerini göstermek için kendi ContentProvider'larını da tanımlayabilir. https://developer.android.com/reference/android/content/ContentProvider.html adresine bakın.
Ağ soketleri veya herkese açık yazılabilir dosyalar gibi başka mekanizmalar kullanarak IPC'yi uygulamak mümkün olsa da önerilen Android IPC çerçeveleri bunlardır. Android geliştiricileri, kullanıcı verilerini koruma ve güvenlik açıklarının ortaya çıkmasını önlemeyle ilgili en iyi uygulamaları kullanmaya teşvik edilecektir.
Maliyete duyarlı API'ler
Maliyete duyarlı API, kullanıcı veya ağ için maliyet oluşturabilecek tüm işlevlerdir. Android platformu, maliyete duyarlı API'leri işletim sistemi tarafından kontrol edilen korunan API'ler listesine yerleştirmiştir. Kullanıcının, maliyete duyarlı API'lerin kullanılmasını isteyen üçüncü taraf uygulamalarına açıkça izin vermesi gerekir. Bu API'ler şunlardır:
- Telefon Hizmeti
- SMS/MMS
- Ağ/Veri
- Uygulama İçi Faturalandırma
- NFC Erişimi
Android 4.2, SMS kullanımıyla ilgili daha fazla denetim ekler. Bir uygulama, ek ücretlere neden olabilecek premium hizmetler kullanan kısa bir koda SMS göndermeye çalışırsa Android bildirim gönderir. Kullanıcı, uygulamanın iletiyi göndermesine izin verebilir veya iletiyi engelleyebilir.
SIM karta erişim
Üçüncü taraf uygulamaların SIM karta düşük düzeyde erişimi yoktur. İşletim sistemi, SIM kart hafızasındaki kişisel bilgilere (kişiler) erişim de dahil olmak üzere SIM kartla yapılan tüm iletişimi yönetir. Ayrıca, AT komutları yalnızca Radyo Arayüzü Katmanı (RIL) tarafından yönetildiğinden uygulamalar bu komutlara da erişemez. RIL, bu komutlar için üst düzey API sağlamaz.
Kişisel bilgiler
Android, kullanıcı verilerine erişim sağlayan API'leri korunan API'ler grubuna yerleştirdi. Android cihazlar, normal kullanımda kullanıcılar tarafından yüklenen üçüncü taraf uygulamalarındaki kullanıcı verilerini de toplar. Bu bilgileri paylaşmayı seçen uygulamalar, verileri üçüncü taraf uygulamalarından korumak için Android OS izin kontrollerini kullanabilir.

Şekil 2. Hassas kullanıcı verilerine yalnızca korumalı API'ler üzerinden erişilebilir
Kişiler ve takvim gibi kişisel veya kimliği tanımlayabilecek bilgiler içerme olasılığı olan sistem içerik sağlayıcıları, açıkça tanımlanmış izinlerle oluşturulmuştur. Bu ayrıntı düzeyi, kullanıcıya uygulamaya sağlanabilecek bilgi türleri hakkında net bir bilgi verir. Üçüncü taraf uygulamaları, yükleme sırasında bu kaynaklara erişim izni isteyebilir. İzin verilirse uygulama yüklenebilir ve yüklendiği andan itibaren istenen verilere erişebilir.
Kişisel bilgi toplayan tüm uygulamalarda, varsayılan olarak bu veriler yalnızca ilgili uygulamayla kısıtlanır. Bir uygulama, verileri IPC aracılığıyla diğer uygulamalara sunmayı seçerse erişim izni veren uygulama, IPC mekanizmasına işletim sistemi tarafından uygulanan izinleri uygulayabilir.
Hassas veri giriş cihazları
Android cihazlar genellikle uygulamaların çevreyle etkileşime geçmesine olanak tanıyan hassas veri giriş cihazları (ör. kamera, mikrofon veya GPS) sağlar. Üçüncü taraf uygulamalarının bu cihazlara erişebilmesi için öncelikle Android OS izinleri kullanılarak kullanıcı tarafından açıkça erişim izni verilmelidir. Yükleyici, yükleme işleminin ardından kullanıcıdan adını belirterek sensör için izin istemesini ister.
Bir uygulama, kullanıcının konumunu öğrenmek istiyorsa kullanıcının konumuna erişmek için izin almalıdır. Yükleyici, yükleme işleminin ardından kullanıcıdan uygulamanın konumuna erişip erişemeyeceğini sorar. Kullanıcı dilediğinde "Ayarlar" uygulamasını çalıştırıp "Konum ve Güvenlik"e gidip "Kablosuz ağları kullan" ve "GPS uydularını etkinleştir" seçeneklerinin işaretini kaldırarak konumuna hiçbir uygulamanın erişmesini engelleyebilir. Bu işlem, kullanıcının cihazındaki tüm uygulamalar için konuma dayalı hizmetleri devre dışı bırakır.
Cihaz meta verileri
Android, temel olarak hassas olmayan ancak kullanıcı, kullanıcı tercihleri ve cihazı kullanma şekliyle ilgili özellikleri dolaylı olarak gösterebilecek verilere erişimi de kısıtlamaya çalışır.
Varsayılan olarak uygulamalar, işletim sistemi günlüklerine, tarayıcı geçmişine, telefon numarasına veya donanım / ağ tanımlama bilgilerine erişemez. Bir uygulama yükleme sırasında bu bilgilere erişim izni isterse yükleyici, uygulamanın bilgilere erişip erişemeyeceğini kullanıcıya sorar. Kullanıcı erişim izni vermezse uygulama yüklenmez.
Sertifika yetkilileri
Android, sistem genelinde güvenilir olan bir dizi yüklü sistem sertifika yetkilisi içerir. Android 7.0'dan önce cihaz üreticileri, cihazlarında gönderilen CA grubunu değiştirebiliyordu. Ancak 7.0 ve sonraki sürümleri çalıştıran cihazlarda, cihaz üreticileri tarafından değişiklik yapılmasına artık izin verilmediğinden tek tip bir sistem CA grubu bulunur.
Android'in stok CA grubuna yeni bir herkese açık CA olarak eklenebilmesi için CA'nın Mozilla CA dahil etme sürecini tamamlaması ve ardından Android Açık Kaynak Projesi'ndeki (AOSP) stok Android CA grubuna eklenmesi için Android'e yönelik bir özellik isteği göndermesi gerekir ( https://code.google.com/p/android/issues/entry).
Cihaza özgü olan ve AOSP CA'ların temel grubuna dahil edilmemesi gereken CA'lar (ör. operatörlerin altyapı bileşenlerine (ör. SMS/MMS ağ geçitleri) güvenli bir şekilde erişmek için ihtiyaç duyulan özel CA'lar) hâlâ mevcuttur. Cihaz üreticilerinin, özel CA'ları yalnızca bu CA'lara güvenmesi gereken bileşenlere/uygulamalara dahil etmeleri önerilir. Daha fazla bilgi için Ağ Güvenliği Yapılandırması başlıklı makaleyi inceleyin.
Uygulama imzalama
Kod imzalama, geliştiricilerin uygulamanın yazarını tanımlamasına ve karmaşık arayüzler ve izinler oluşturmadan uygulamalarını güncellemesine olanak tanır. Android platformunda çalışan her uygulama geliştirici tarafından imzalanmalıdır. İmzalanmadan yüklenmeye çalışan uygulamalar Google Play veya Android cihazdaki paket yükleyici tarafından reddedilir.
Google Play'de uygulama imzalama, Google'ın geliştiriciye ve geliştiricinin de uygulamasına duyduğu güveni birbirine bağlar. Geliştiriciler, uygulamalarının Android cihaza değiştirilmeden sağlandığını bilir ve uygulamalarının davranışından sorumlu tutulabilir.
Android'de uygulama imzalama, bir uygulamayı uygulama korumalı alanına yerleştirmenin ilk adımıdır. İmzalı uygulama sertifikası, hangi kullanıcı kimliğinin hangi uygulamayla ilişkili olduğunu tanımlar. Farklı uygulamalar farklı kullanıcı kimlikleri altında çalışır. Uygulama imzalama, bir uygulamanın iyi tanımlanmış IPC dışında başka bir uygulamaya erişememesini sağlar.
Bir uygulama (APK dosyası) Android cihaza yüklendiğinde Paket Yöneticisi, APK'nın APK'ya dahil edilen sertifikayla doğru şekilde imzalandığını doğrular. Sertifika (veya daha doğrusu sertifikadaki ortak anahtar) cihazdaki diğer APK'ları imzalamak için kullanılan anahtarla eşleşiyorsa yeni APK, manifest dosyasında benzer şekilde imzalanmış diğer APK'larla bir UID paylaşacağını belirtme seçeneğine sahiptir.
Uygulamalar bir üçüncü taraf (OEM, operatör, alternatif pazar) tarafından veya kendi kendine imzalanabilir. Android, geliştiricilerin harici yardım veya izin almadan oluşturabileceği kendinden imzalı sertifikalar kullanarak kod imzalama olanağı sunar. Uygulamaların merkezi bir yetkili tarafından imzalanması gerekmez. Android şu anda uygulama sertifikaları için CA doğrulaması yapmıyor.
Uygulamalar, güvenlik izinlerini İmza koruması düzeyinde de belirtebilir. Böylece, farklı UID'ler ve Uygulama Özel Korumalı Alanları korurken erişimi yalnızca aynı anahtarla imzalanan uygulamalarla kısıtlayabilir. Aynı geliştirici anahtarıyla imzalanan iki veya daha fazla uygulamanın manifest dosyalarında paylaşılan bir UID beyan edebileceği paylaşılan UID özelliği sayesinde, paylaşılan bir uygulama korumalı alanı ile daha yakın bir ilişki kurulmasına izin verilir.
Uygulama doğrulama
Android 4.2 ve sonraki sürümler uygulama doğrulamasını destekler. Kullanıcılar, "Uygulamaları Doğrula"yı etkinleştirebilir ve uygulamaların yükleme öncesinde bir uygulama doğrulayıcı tarafından değerlendirilmesini seçebilir. Uygulama doğrulaması, zararlı olabilecek bir uygulamayı yüklemeye çalışan kullanıcıları uyarabilir. Özellikle kötü bir uygulamanın yüklemesini engelleyebilir.
Dijital hak yönetimi
Android platformu, uygulamaların hak korumalı içeriği içerikle ilişkili lisans kısıtlamalarına göre yönetmesine olanak tanıyan genişletilebilir bir dijital hak yönetimi (DRM) çerçevesi sağlar. DRM çerçevesi birçok DRM şemasını destekler. Bir cihazın desteklediği DRM şemaları, cihaz üreticisine bağlıdır.
Android DRM çerçevesi iki mimari katmanda uygulanır (aşağıdaki resme bakın):
-
Android uygulama çerçevesi aracılığıyla uygulamalara sunulan ve standart uygulamalar için ART sanal makinesi üzerinden çalışan bir DRM çerçeve API'si.
-
DRM çerçevesini uygulayan ve DRM eklentilerinin (araçlar) çeşitli DRM şemaları için hak yönetimini ve şifre çözmeyi yönetmesi amacıyla bir arayüz sunan yerel kod DRM yöneticisi
Şekil 3. Android platformundaki DRM mimarisi