Android

Uygulamamı Hangi Android Sürümlerinde Çalıştırmalıyım?

​ Size bu yazıda başlıktaki sorunun cevabını vermeye çalışacağım. İlk adımdan başlamak gerekirse Android geliştirmek için kullandığımız uygulama geliştirme aracındaki -ki bu çoğumuz için şu anda Eclipse-, yeni bir proje yarattığımız ...

Yasin Kafadar |

24.06.2014

Size bu yazıda başlıktaki sorunun cevabını vermeye çalışacağım. İlk adımdan başlamak gerekirse Android geliştirmek için kullandığımız uygulama geliştirme aracındaki -ki bu çoğumuz için şu anda Eclipse-, yeni bir proje yarattığımız zaman karşımıza ilk çıkan ekranda bizden bazı bilgiler istenmektedir.

Burada Minumum Required SDK ve Target SDK isimli 2 tane adım vardır. Bunlar varsayılan olarak dolu gelmektedir. Aslında bu seçimler önemsiz gibi görünse de uygulamamızın sınırlarını ve yapabileceklerini belirleyen önemli alanlardır. Bu alanların ne işe yaradığını anlatmadan önce API Level kavramını anlatmak gerekir.

 

API Level

Her Android Framework API'sinin integer cinsinden tekil (unique) bir API Level değeri bulunur. Framework API, uygulamamız ile işletim sisteminin haberleşmesini ve etkileşimde bulunmasına yarar. Aşağıdaki tabloda Android sürümlerine karşılık gelen API Level'leri görebilirsiniz.

İlk proje yaratma adımında seçtiğimiz Minimum Required SDK ve Target SDK değerleri, uygulamamızın AndroidManifest.xml dosyasında aşağıdaki gibi görünecektir.

[code]<uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" />[/code]


 

Minimum Required SDK

Burada belirttiğimiz değer ile uygulamamızın en düşük hangi Android sürümünde çalışabileceğini belirtiyoruz. Uygulamamızın bir cihaza yüklenebilmesi için cihaz üzerinde koşan işletim sisteminin API Level değeri, bizim belirttiğimiz “minSdkVersion” değerinden düşük olmaması gerekiyor, aksi halde uygulamayı cihazımıza kuramayız. Google Play de uygulamaları listelerken bu değeri dikkate alıp, cihaz ile uygulamanın “minSdkVersion” değerini karşılaştırarak cihaza uygun uygulamaları göstermektedir.

AndroidManifest.xml dosyasında minSdkVersion tanımlanmaz ise varsayılan olarak 1 verilir. Bu da uygulamanızın bütün Android sürümleriyle uyumlu olduğu anlamına gelir. Örneğin, projenizde kullandığınız bir metot API Level 4'den sonra eklendiyse ve uygulamanız API Level 3 olan bir cihaza yüklendiyse düzgün çalışmayacak ve çökecektir. O yüzden bu değeri her zaman belirtmek ve desteklediğiniz sürümler üzerinde test etmek gerekir. Android'in çıkan bütün sürümleri geriye dönük bütün özellikleri desteklemektedir.

 

Target SDK

Burada belirttiğimiz değer ile uygulamamızı belirtilen API Level'de düzgün bir şekilde çalıştığını garanti etmiş oluyoruz. Eğer "targetSdkVersion" değeri belirtilmemişse varsayılan değer olarak “minSdkVersion” değeri verilir.

Bu tanımlamayı yapmamız önemlidir çünkü her Android sürümünde bazı özellikler farklı davranışlar sergileyebilmektedir. Bunu hepimizin arka planda işlem yapmak için kullandığımız AsyncTask üzerinden anlatmak gerekirse, bu sınıf ilk olarak kullanıma açıldığı zaman (API Level 3 - Cupcake) arka tarafta tek bir thread üzerinden seri bir şekilde çalıştırılıyordu. API Level 4'ün (Donut) çıkması ile birlikte bu yapı değişti ve thread havuzu kullanılarak paralel çalışma özelliği getirildi. Fakat bu özellik API Level 11'in (Honeycomb) çıkmasıyla birlikte tekrar eski haline getirildi.

Biz target SDK sürümü olarak aşağıdaki gibi bir tanımlama yaptığımız zaman iki tane Asynctask tanımlayıp art arda çalıştırdığımız zaman hata alırız.

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="11" />

Eğer AsyncTask'ı aşağıdaki gibi çalıştırırsak bir sıkıntı yaşamayız.

[code]public class BaseTask extends AsyncTask {
    
    ...
    
    public void executeSafely() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            this.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
            }
        else {
            this.execute();
        }
    }
    
    ...
    
}[/code]

Peki, örneği biraz değiştirip target SDK sürümü belirlemeden minSdkVersion olarak API Level 8 verelim ve uygulamayı derleyip, API Level 11 olan bir cihazda çalıştıralım. Böyle bir durumda işletim sistemi size uygulamanızın beklediğiniz gibi çalışmasını sağlayacak uyumlu bir modda çalıştırmaktadır. Bir başka deyişle, art arda AsyncTask'larınızı çalıştırabilirsiniz.

Her yeni Android sürümü çıktıkça uygulamamızı o sürümde test edip, target SDK sürümünü güncellemeniz önerilir.
 

Hangi API Level'i seçmeliyim?

Bence bu aşamada Android Developer sitesindeki Dashboards sayfasından faydalanmak gerekir. Burada piyasada aktif olarak kullanılan bütün Android cihazların sürümleri bir tablo içinde gösterilmektedir.

Tarih:05.06.2014

 

Uygulamaya özel kullandığımız bir kütüphane (library) veya özellik varsa, ona göre de minimum API Level'imizi değiştirebiliriz. Bu veriler ışığında şu anda bence en mantıklı minimum desteklenecek API Level'i 10 olarak görünüyor. API Level 8 ile 10 arasında geliştiricilerin işini kolaylaştıracak yeni özellikler eklenmişti. Zaten 1-2 ay içinde API Level 8 olan cihaz sayısı iyice düşecek gibi duruyor. Uygulamanızda herhangi bir kısıt yoksa, en mantıklısı bütün cihazları desteklemektir.

 

Not: Uygulamanızı Lint hata kontrol aracından geçirip API Level'i uyumsuz metotları görebilirsiniz.

Yasin Kafadar |

24.06.2014

Yorumlar

Eyüp KAYA
28.12.2014 - 01:39

ben Eclipse kullanmıyorumönermiyorumda.
Diğer tüm derleyicilerde de olduğu gibi İntelijİdea da A.manifest dosyasını açarak

 


<uses-sdk android:minSdkVersion="11"/>

<uses-sdk android:targetSdkVersion="19"/>

<uses-sdk android:maxSdkVersion="21"/>

 

gibi ayarlıyabilirisin. veya sadece hrhangi birini belirlieybilirsiniz. mesela uyuglamanız alt versiyonda çalışmıyorsa. Minimum SDK yı belirtin. Aynı şekilde diğerlerinide ayarlayınz. Yanlız unutmayın bu değerler çoköenmlidir. Çünkü gerekli koşulları sağlamayan kullanıcılar uygulamanızı google playde görüntüliyemiyecek bile.
 

Gökhan Türedi
25.07.2014 - 09:44

android gelistirme tarafında onemli bir konu icin yalın, temiz bir anlatım olmus, tesekkurler