Nedir: APK DOSYASI

Nedir: APK DOSYASI


1. Apk Dosyasının Oluşumu

Bir uygulama geliştirilidiğinde apk dosyalarının oluşması için birkaç yol izlemesi gerekir.Application modüle kısmında kaynak kodunuzu ve kaynak dosylarınızın bulunduğu kısımdır.Dependencies kısmı ise uygulamanız için gerekli olan kütüphanelerin bulunduğu yerdir.Bu kütüphaneler sayesinde uygulamanızın gelişimi sağlanır. Kaynak kodunuzun ve kütüphanelerin birleşmesiyle compilers yani derlenme işlemi gerçekleşir. Derlenen bu dosyanın içerisinden DEX File kodu çıkar. Ve oluşan kaynaklar APK Packager ile dosyanıza yerleştirirlir. Debug or Release Keystore ile gerekli imzalar, anahtarlar oluşturulur.Ve bu paketlenen dosya sayesinde bir apk dosyası oluşur. Bu oluşan apk dosyası store gibi yerlerden indirilir.

2. Apk Dosyasının İçeriği

Bir uygulama geliştirilirken önemli dosyalar bulunmaktadır. İlk olarak AndroidManifest dosyası vardır. AndroidManifest.xml dosyası, herhangi bir Android projesinin en önemli dosyalarından biridir. Uygulamanızın tüm temel bilgileri AndroidManifest.xml içinde gösterilir manifest: Dosyanın ana başlığıdır. Versiyon numaraları paket isimleri gibi temel özellikler manifest dosyasında bulunmaktadır. Eklenecek diğer başlıklar buraya eklenmelidir. Application taginini bulundurmak zorundadır.

Application: Uygulamaların değişkenlerini belirtmekte olduğumuz yerdir. Uygulamaların isimleri, ikonları , izinleri, bir takım ayarlar, kullanıcıların alan yönetimleri ve yedekleme gibi işlevleri application kısmında şekillendiriyoruz. resources.arsc: Kaynakların en ilk hallerini belirtir yani derlenmeden önceki hallerini saklamaktadır. uses-permission: Uygulamaların düzgün çalışması için kullanıcıların vermesi gereken sistem izinleridir.Bunlar kamera ,internet konum gibi izinlerdir.

permission: Uygulamaların genel özelliklerine erişimi için güvenlik izni şeklindedir. res: resources.arsc dosyasına düzenlememiş olan kaynakları tutmaktadır.

permission-tree: Bu kısımda ise izinlerin konumlanmasını yapmak için taban ismini belirtir.

classes.dex: Dalvik Sanal Makinesi ile iletişime geçebilen DEX dosyalarının formatını belirtir.

permission-group: İzinlerin mantıksal gruplandırılabilmesi için bir isim belirtmektedir.

instrumentation: Uygulamaların sistemle nasıl bir etkileşimde olduğunu izlememizi sağlayan sınıfı bildirir.Bu sınıfın nesnesi uygulamanın herhangi bir bileşeninden önce başlatılır ve uygulamayla ilgili test süreçlerini gerçekleştiren bir bileşendir.

uses-sdk:API servisini belirlemektedir.

assets: AssetManager ile çağırılabilir. Uygulama öğelerini tutmakla görevlidir.

uses-configuration: Uygulamanın gerektirdiği yazılım ve donanım özelliklerini belirtmektedir

2.1 İçerik sağlayıcılar

İçerik sağlayıcılar, bir uygulamanın kendi başına depolanan, diğer uygulamalar tarafından depolanan verilere erişimi yönetmesine yardımcı olabilir ve verileri diğer uygulamalarla paylaşmanın bir yolunu sağlayabilir. Verileri kapsarlar ve veri güvenliğini tanımlamak için mekanizmalar sağlarlar. İçerik sağlayıcılar, bir işlemdeki verileri başka bir işlemde çalışan koda bağlayan standart arabirimdir. Bir içerik sağlayıcı uygulamanın birçok avantajı vardır. En önemlisi, bir içerik sağlayıcısını, diğer uygulamaların uygulama verilerinize güvenli bir şekilde erişmesine ve şekil 1'de gösterildiği gibi değiştirmesine izin verecek şekilde yapılandırabilirsiniz.

Verileri paylaşmayı planlıyorsanız içerik sağlayıcıları kullanabilirsiniz. Verileri paylaşmayı planlamıyorsanız, yine de kullanabilirsiniz çünkü soyutlama sağlar, ancak verileri paylaşmak zorunda değilsiniz. Bu soyutlama, verilerinize erişime dayanan diğer mevcut uygulamaları etkilemeden uygulama veri depolama uygulamanızda istediğiniz değişiklikleri gerçekleştirmenize olanak sağlamaktadır. Bu kısımda, ona erişen uygulamalar değil, yalnızca içerik sağlayıcınız etkilenmektedir. Örneğin şekilde gösterildiği gibi, alternatif depolama için bir SQLite veri tabanını değiştirebilirsiniz.

Bir dizi başka sınıf, sınıfa güvenir.

ContentProvider
AbstractThreadedSyncAdapter 
CursorAdapter 
CursorLoader

Yukarıdaki sınıflardan herhangi birini kullanıyorsanız, uygulamanıza bir içerik saÄŸlayıcı da eklemeniz gerekmektedir. AÅŸağıdaki durumlardan birini yapmak istiyorsanız kendi içerik saÄŸlayıcınıza ihtiyacınız vardır:  Uygulamanızda özel arama önerileri uygulamak istiyorsanız  Uygulama verilerinizi widget’lara açmak için bir içerik saÄŸlayıcı kullanmanız gerekir.

 Uygulamanızdan diÄŸer uygulamalara karmaşık verileri veya dosyaları kopyalayıp yapıştırmak istiyorsanız içerik saÄŸlayıcı kullanmalısınız.  İçerik saÄŸlayıcıların avantajları İçerik saÄŸlayıcılar, verilere eriÅŸim izinleri üzerinde ayrıntılı olarak kontrol saÄŸlamaktadırlar. Bir içerik saÄŸlayıcıya eriÅŸimi yalnızca uygulamanızdan kısıtlamayı, baÅŸka uygulamalardan verilere eriÅŸim için genel olarak izin vermeyi veya veri okumak ve yazmak için farklı izinler yapılandırmayı seçebilirsiniz. Uygulamanızdaki farklı veri kaynaklarına eriÅŸim ayrıntılarını ayırmak için bir içerik saÄŸlayıcı kullanabilirsiniz.

 Mesela uygulamanız biçimlendirilmiÅŸ kayıtları bir SQLite veri tabanının dışında ses ve video dosyalarını da depolayabilmektedir. EÄŸer uygulamanızda bu geliÅŸtirme modelini kullanırsanız oluÅŸan tüm verilere bir içerik saÄŸlayıcı kullanabilirsiniz.Arka planda verileri yüklemek için CursorLoader kullanabilirsiniz.

2.2. Aktivite

public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, View.OnCreateContextMenuListener, ComponentCallbacks2

java.lang.Object

android.content.Context

android.content.ContextWrapper

android.view.ContextThemeWrapper

android.app.Activity

Bilinen doğrudan alt sınıflar

• AccountAuthenticatorActivity

• ActivityGroup

• AliasActivity

• ExpandableListActivity

• ListActivity

• NativeActivity

Bilinen dolaylı alt sınıflar

 LauncherActivity

PreferenceActivity

TabActivity Aktivite, kullanıcının yapabileceÄŸi odak noktalarından bir tanesidir. setContentView(View):Burada bulunan tüm etkinlikler kullanıcıyla etkileÅŸime girmektedir, bu nedenle Activity sınıfı sizin için kullanıcı ara yüzünüzü yerleÅŸtirebileceÄŸiniz bir pencere oluÅŸturmaya özen gösterir. Aktiviteler genellikle kullanıcıya tam ekran pencereler olarak sunulsa da, kayan pencereler ve çoklu pencere modu veya gömülü pencereler ÅŸeklide de kullanıcılara sunulabiliyor. onCreate(Bundle) iÅŸlemlerinizi baÅŸlattığınız kısımdır. Bu kısımda en önemli detaylardan biri, genellikle setContentView(int) kullanıcı ara yüzünüzü tanımlayan bir düzen tabanı ile uyarı yapacaksınız ve findViewById(int) bu kullanıcı ara yüzünde programlı olarak etkileÅŸimde bulunmanız gereken pencere öğelerini almak için kullanacaksınız.  onPause():Kullanıcının iÅŸlemlerde aktif etkileÅŸimi duraklatılmasıyla ilgilenilen kısımdır. Contentprovider verilerini tutmak için genellikle kullanıcı tarafından yapılan herhangi bir deÄŸiÅŸiklik bu noktada yapılmalıdır. Çünkü bu iÅŸlem gerçekleÅŸtiÄŸinde aktivite iÅŸlemi ekranda görünüyor olabilir. 

Ele alınan konular:

1. Parça

2. Etkinlik Yaşam Döngüsü

3. Yapılandırma Değişiklikleri

4. Faaliyetlere Başlama ve Sonuçları Alma

5. Kalıcı Durumu Kaydetme

6. Ä°zinler

7. Süreç Yaşam Döngüsü

2.3. Parça

Alt FragmentActivity sınıfından, Fragment kodlarını daha iyi modülleştirmek uygulamalarının küçük ve büyük ekranlar arasında ölçeklenmesine yardımcı olmak için ve daha büyük ekranlar için daha sofistike kullanıcı ara yüzleri oluşturmak amaçlı bu sınıftan yararlanabilmektedir.

2.4. Etkinlik Yaşam Döngüsü

Sistemdeki aktiviteler , aktivite yığınları olarak yönetilmektedir . Yeni bir etkinlik baÅŸlatıldığında, genelde mevcut olan yığının üstüne yerleÅŸtirilmektedir ve böylece devam eden etkinlik haline gelir. Daha önce yapılan etkinlik yığında en alttadır ve yeni bir etkinlik oluÅŸana kadar ön plana gelmemesi saÄŸlanır. Ekranda görülebilen bir veya daha fazla etkinlik yığını olabilir. Bir faaliyetin esasen dört durumu vardır:  Bir etkinlik ekranın ön planındaysa yani en üst yığının en yüksek konumunda ise, etkin veya çalışıyor demektir . Bu genellikle kullanıcının ÅŸu anda etkileÅŸimde olduÄŸu etkinlik anlamına gelmektedir.  Bir etkinlik odak noktası olmakta çıkmışsa yine de kullanıcıya hizmet veriyorsa sistemde görülebilir. Yeni tam boyut olarak kullanılmayan uygulamaların diÄŸer etkinliÄŸinizin üstüne odaklanması sonucunda geçerli pencere modunda ki uygulamaya odaklanamaması mümkündür.  Bir etkinlik, baÅŸka bir etkinlik tarafından tamamen durdurulur veya engellenirse sistem tarafından kullanıcıya ait olan bilgileri saklar ama bu kullanıcı tarafından görülmez çünkü pencere gizli haldedir. EÄŸer bellek ihtiyacında olursa sistem tarafından engellenir.  Sistem, aktiviteyi bitirmesini isteyerek ya da sadece sürecini engelleyerek hafızadan çıkarabilir. Kullanıcıya tekrar görüntülendiÄŸinde ise tamamen yeniden baÅŸlatılmalı ve önceki durumuna geri yüklenmelidir. AÅŸağıdaki ÅŸekilde, bir faaliyetin önemli durum yollarını göstermektedir. Dikdörtgenler, Activity durumlar arasında iÅŸlem gösterdiÄŸinde gerekli iÅŸlemleri gerçekleÅŸtirmek için uygulayabileceÄŸiniz geri uyarı yöntemlerini temsil etmektedir. Renkli ovaller ise aktivitenin içinde olabileceÄŸi baÅŸlıca durumları kast etmektedir.

Faaliyetleri izlemek için 3 temel döngü bulunmaktadır bunlar: 

Tüm kullanım süresi : Bir etkinliÄŸin ilk çaÄŸrı arasında olur. Bir etkinlik, onCreate () içindeki tüm “küresel” durum kurulumunu gerçekleÅŸtirecek ve onDestroy () içinde kalan bütün kaynakları serbest olarak bırakacaktır. Örnek olarakbelirli bir aÄŸdan veri indirmek için arka planda çalışan bir iÅŸ parçacığı bulunuyorsa, bu iÅŸ parçacığını onCreate () içinde oluÅŸturabilir ve sonrasında onDestroy () yardımıyla içinde bulunan iÅŸ parçacığını durdurabilmektedir. 

Görünür süresi bir etkinliÄŸin bir çaÄŸrı arasında olur onStart()ve onStop().yapılana kadar kullanıcıyla etkileÅŸim halinde olmasa bile ekranda etkinliÄŸi görüntüleyebilir. Kullanıcıya bu etkileÅŸimleri göstermek istenirse bu yöntemle korunabilir. ÖrneÄŸin, BroadcastReceiver kullanıcı arayüzünüzü etkileyen deÄŸiÅŸimleri gözlemlemek için bir onStart () kaydı yapabilir ve kullanıcı görüntülediÄŸiniz ÅŸeyi artık görmediÄŸinde onStop () kaydını iptal edebilirsiniz. OnStart () ve onStop () yöntemleri, etkinlik görünür hale geldiÄŸinde ve kullanıcı tarafından saklandığında birden fazla çaÄŸrılabilmektedir. 

Ön süresi onResume()cevap olarak gelen bir çaÄŸrı yapılana kadar onPause()arasında geçen çaÄŸrıda olur. Bu süre zarfında etkinlik görünür haldedir ve kullanıcıyla iletiÅŸim halindedir.

Hizmet nedir? 

Aksi bir durum olmadıkça parçası olduÄŸu uygulama ile aynı süreçte çalışmaktadır. Hizmeti ayrı bir süreç olarak göremeyiz. Sadece nesnenin kendisi ile çalıştığı süreçte görev almaktadır.  Hizmet uygulama yanıt vermiyor hatalarını önlemek için çalışmaktadır. Bir Hizmet bileÅŸeni oluÅŸturulduÄŸunda bu nedenlerden herhangi biri için, sistemin gerçekte yaptığı tek ÅŸey bileÅŸeni somutlaÅŸtırmak onCreate() ve temel iÅŸ parçacığındaki yerini ve diÄŸer uygun geri çaÄŸrıları istetmelidir. Ä°kincil bir iÅŸ parçacığı oluÅŸturmak hizmet sistemine kalmıştır.

Hizmet Yaşam Döngüsü

Bir hizmetin sistem tarafından çalıştırılmasının iki nedeni vardır. Context. startService()herhangi biri ararsa sistem hizmeti alır yani onCreate()gerekirse onu oluÅŸturur ve yöntemini çağırabilir ve ardından onStartCommand(Intent, int, int)istemci tarafından saÄŸlanan argümanlarla iÅŸlemini çağırabilir. Servis bu noktada Context. stopService()veya stopSelf()çaÄŸrılıncaya kadar iÅŸlemini sürdürmeye çalışacaktır. Context. startService () ‘e yapılan birden fazla çaÄŸrı toplanmaz bu yüzden Context. stopService () veya stopSelf bir kez bir hizmetin kaç kez baÅŸlatıldığına bakılmaksızın çaÄŸrıları durduracaktır. Fakat hizmetler, stopSelf(int)baÅŸlatılan amaçlar iÅŸlenene kadar hizmetin durdurulmamasını saÄŸlamak için kendi bulduÄŸu iÅŸlemleri kullanabilir.

Ä°zinler

Bir hizmete erişim, bildiriminin <service> etiketi altında belirtildiğinde o hizmete erişim zorunlu kılınabilir. Bunu yaparak, diğer uygulamaların <uses-permission> hizmeti başlatabilmesi, durdurabilmesi veya hizmete bağlanabilmesi için kendi bildirimlerinde karşılık gelen bir öğeyi tanımlamaları gerekecektir. Hizmet, ContextWrapper.checkCallingPermission(String) gibi bahsi geçen aramanın işlemini gerçekleştirmeden önce kendisine gelen özel IPC çağrılarını izinlerle koruyabilmektedir.

Süreç Yaşam Döngüsü

Android sistemi, işlem başlatıldığında veya istemcilerin buna bağlı olduğu sürece bir hizmeti bulundurma sürecini sürdürmeye çalışacaktır. Bellek yetersiz bir şekilde çalışırken ve mevcut işlemleri bitirmek gerektiğinde, hizmeti barındıran bir işlemin önceliği süreç yaşam döngüsü olacaktır. Hizmetle aynı anda çalışan diğer uygulama bileşenleri ilk olarak genel sürecin önemi arttırmaktadır.

2.4. Broadbcast receiver

public abstract class BroadcastReceiver

extends Object

java.lang.Object

android.content.BroadcastReceiver

Bilinen doÄŸrudan alt sınıflar 

AppWidgetProvider 

DelegatedAdminReceiver

DeviceAdminReceiver

MbmsDownloadReceiver 

PackageChangeReceiver 

RestrictionsReceiver

Broadcast kullanıcıya bildiri şeklinde görünürler. Diğer uygulamalar için bir köprü görevini üstlenmektedir. Örneğin bir uygulamanın düşük pil uyarış aldığında ona göre hareket etmesi gibi. Yayınların geneli sistem tarafından organize edilmektedir. Context. sendBroadcast(Intent):Gönderen yayınların amaçlarını alan ve işleyen kod için bir temel sınıfı belirtmektedir.

İç içe geçmiş sınıflar

Class BroadcastReceiver. PendingResult

Broadcast için bekleyen bir sonucun durumu hakkında bilgi vermektedir.

Genel yöntemler

Final void abortBroadcast()

Mevcut yayını durdurması gerektiğini belirten bayrakları ayarlamaktadır. Context#sendOrderedBroadcast(Intent, String) yayını sadece üzerinden gönderilen yayınlar yardımıyla çalışmaktadır. Bu alıcının mevcut yayını durdurması gerektiğini belirten bayrağı ayarlar; yalnızca üzerinden gönderilen yayınlarla çalışır.

Final void clearAbortBroadcast()

Bu alıcının geçerli olan yayını sonlandırması gerektiğini belirten bayrağı temizlemekle sorumludur.

Final boolean getAbortBroadcast()

Bu alıcının mevcut olan yayını iptal edip etmeyeceğini belirten bayrağı döndürmektedir.

Final int getResultCode()

Geçerli sonuç kodunu önceki alıcı tarafından alınan kısımdır.

Final String getResultData()

Önceki alıcı tarafından ayarlanan biçimde geçerli sonuçta oluşan verileri almaya yardımcı olur.

Final Bundle getResultExtras(boolean makeMap)

Alıcı tarafından oluşturulan ek verileri almaya yardımcı olur.

Final BroadcastReceiver.PendingResult goAsync()

onReceive(Context, Intent) işlevini tamamladıktan sonra uygulama tarafından yayını aktif tutmak ve izin vermek için çağrılabilir. Final boolean isOrderedBroadcast() Alıcı tarafından sıralı bir yayın işleniyorsa bunu döndürür.

abstract void onReceive(Context context ,Intent intent)

BroadcastReceiver yani yayın alıcı bir amaç yayını aldığında döndürülmektedir.

IBinder peekService(Context myContext, Intent service)

Zaten mevcut olan bağlı bir hizmete bağlayıcı eklemeye yarar.

Final void setDebugUnregister(boolean debug) Context#registerReceiver(BroadcastReceiver, IntentFilter) ile uyumsuz çaÄŸrılar için hata ayıklama yardımının dâhil edilmesini saÄŸlayan kısımdır.

Final void setOrderedHint(boolean isOrdered)

Dâhili kullanım için, broadcast sıralı bir şekilde çalışıp çalışmadığına dair bilgiler vermektedir.

2.5. Amaç

public class Intent extends Object implements Parcelable, Cloneable

java.lang.Object

android.content.Intent

Bilinen doğrudan alt sınıflar

-LabeledIntent

Amaç gerçekleştirilecek bir işlemin soyut olarak açıklanmasını ifade etmektedir. Farklı uygulamalardaki kod arasında geç çalışma zamanı bağlama işlemi gerçekleştirmek için bir işletme sağlar. En mühim kullanımı, çalışma arası sistemleri birleştirmesi olarak düşünülebilecek faaliyetlerin başlatılmasıdır. Başlıca, uygulanabilecek bir olayın özet bir tanımını tutan pasif bir veri birleşimidir.

Amaç Yapısı

Bir amaçtaki birincil bilgi parçaları ÅŸunlardır: 

Eylem :ACTION_VIEW, ACTION_EDIT, ACTION_MAIN gibi yapılması gereken genel bir aksiyondur 

Data:Kişiler veri tabanındaki bir şahıs kaydı gibi üzerinde işlem düzenleyebilecek verilerdir. 17

Bazı eylem / veri çifti örnekleri şunlardır:

 ACTION_VIEW content: // kiÅŸiler / kiÅŸiler / 1 — Tanımlayıcısı “1” olan kiÅŸi hakkındaki bilgileri görüntülemek için kullanılmaktadır.

 ACTION_DIAL content: // kiÅŸiler / kiÅŸiler / 1 — DoldurulmuÅŸ kiÅŸi ile telefon çeviriciyi görüntülemek için kullanılır.

 ACTION_VIEW tel: 123 — Girilen numara ile telefon çeviriciyi görüntülemeye yarar. Görünüm eyleminin belirli bir

URI için en mantıklı olanı nasıl yaptığına dikkat edilmesi gerekmektedir.

 ACTION_DIAL tel: 123 — Verilen numara depolanmış olarak telefon çeviriciyi görüntülemeye yarar.

Bu birincil özniteliklere ek olarak, bir amaçla dâhil edebileceğiniz birkaç ikincil öznitelik vardır:

Kategori: Yürütülecek hareket hakkında ek olarak bilgiler vermektedir. .

Tür: Amaç verilerinin açık bir örneÄŸini (bir MIME türü) belirtmektedir. Normalde tür, verilerin kendisinde taşıdığından dolayı verileri kendinden çıkartmaktadır. Bu özniteliÄŸi ayarlayarak, bu deÄŸerlendirmeyi devre dışı bırakır ve açık bir türü açmayı zorlayabilirsiniz.

Component: Amaç için kullanılacak bir bileÅŸen bloÄŸunun açık bir ismini göstermektedir. Normalde bu, amaçtaki diÄŸer bilgilere (eylem, veri / tür ve kategoriler) bakılarak ve bunu idare edebilecek bir bileÅŸenle eÅŸleÅŸtirilerek belirlenir.

Ekstralar :Bu, bileşene büyütmek ve bilgi sağlamak için kullanılabilir. Örneğin, bir e-postayı iletmek için bir

işlemimiz varsa, buraya bir konu, gövde vb. eklemek için fazladan veri parçaları da eklenebilmektedir.

Intent sınıfında belirlenmiş çeşitli standart Intent hareketi ve kategori sabitleri vardır, ancak uygulamalar kendi

değerlerini de tanımlayabilir. Uygulamalar sisteme eklendikçe, yeni eylemler, türler ve kategoriler ekleyerek bu dili

genişletebilirler veya bunları işleyen kendi etkinliklerini sağlayarak mevcut cümlelerin davranışını değiştirebilirler.

Amaç Çözümü

Kullanacağınız iki temel amaç biçimi vardır.

 Açık Amaçlar , çalıştırılacak tam sınıfı saÄŸlayan bir bileÅŸen ÅŸeklinde gösterilmektedir. Genellikle bunlar, bir uygulamanın, kullanıcı uygulamayla iletiÅŸime geçerken sahip olduÄŸu farklı etkinlikleri baÅŸlatmasıyla bilindiÄŸi için herhangi bir veri içermemektedir.

 Ã–rtük Amaçlar sahip olunan bileÅŸenlerden hangisinin o amaç için en iyi düzeyde çalıştırılacağını belirlemesi için sisteme yeterli bilgi vermesidir.

2.6. Ä°ntent Aktivasyonu

Bileşenleri birbirine bağlayan bir gruptur. Servis, broadcast ve aktivite ile eş zamanlı bir şekilde çalışmayan mesajlar tarafından çalışır hale getirir. Intentler, uygulama çalışırken, bağımsız bileşenleri birbirine bağlar. Bu bileşen uygulama bünyesinde de barınabilir , başka uygulamaların bileşenlerinde de bulunabilir. Bu dosyalar xml formatında oluşturulduğu için hem insanlar hem de makineler tarafından okunabilir bir haldedir.

Kaynakça

AndroidDev (2020). Activity

AndroidDev (2020). BroadcastReceiver

AndroidDev (2020). Intent

Yorum Gönder

0Yorumlar
Yorum Gönder (0)