Android 4.2 API'leri

API Düzeyi: 17

Android 4.2 (JELLY_BEAN_MR1), kullanıcılar ve uygulama geliştiriciler için yeni özellikler sunan Jelly Bean sürümüne ait bir güncellemedir. Bu belgede, geliştiriciler için en göze çarpan ve kullanışlı yeni API'ler tanıtılmaktadır.

Uygulama geliştirici olarak mümkün olan en kısa sürede SDK Yöneticisi'nden Android 4.2 sistem görüntüsünü ve SDK platformunu indirmelisiniz. Android 4.2 çalıştıran ve uygulamanızı test edebileceğiniz bir cihazınız yoksa uygulamanızı Android emülatöründe test etmek için Android 4.2 sistem görüntüsünü kullanın. Ardından, en son API'leri kullanmaya başlamak için uygulamalarınızı Android 4.2 platformuna göre oluşturun.

Uygulamanızı Android 4.2 çalıştıran cihazlar için daha iyi optimize etmek istiyorsanız targetSdkVersion özelliğini "17" olarak ayarlamanız, Android 4.2 sistem görüntüsüne yüklemeniz, test etmeniz, ardından bu değişikliği içeren bir güncelleme yayınlamanız gerekir.

Kodunuza, minSdkVersion tarafından desteklenmeyen API'leri yürütmeden önce sistem API düzeyini kontrol eden koşullar ekleyerek eski sürümleri desteklerken Android 4.2'de API'leri kullanabilirsiniz. Geriye dönük uyumluluğu sağlama hakkında daha fazla bilgi için Geriye Doğru Uyumlu Kullanıcı Arayüzü Oluşturma bölümüne bakın.

API düzeylerinin işleyiş şekli hakkında daha fazla bilgiyi API Düzeyi nedir? bölümünde bulabilirsiniz.

Önemli Davranış Değişiklikleri

Daha önce Android için bir uygulama yayınladıysanız uygulamanızın davranışını etkileyebilecek aşağıdaki değişikliklerden haberdar olun:

  • İçerik sağlayıcılar artık varsayılan olarak dışa aktarılmamaktadır. Yani android:exported özelliğinin varsayılan değeri artık “false" olur. Diğer uygulamaların içerik sağlayıcınıza erişebilmesi önemliyse artık android:exported="true" ayarını açıkça yapmanız gerekir.

    Bu değişiklik yalnızca android:targetSdkVersion veya android:minSdkVersion değerlerinden birini 17 ya da daha yüksek bir değere ayarlarsanız geçerli olur. Aksi takdirde, Android 4.2 ve sonraki sürümlerde çalışırken bile varsayılan değer “true" olur.

  • Android'in önceki sürümlerine kıyasla, uygulamanız ACCESS_COARSE_LOCATION iznini istiyor ancak ACCESS_FINE_LOCATION iznini istemiyorsa kullanıcı konumu sonuçlarının doğruluğu daha düşük olabilir.

    Uygulamanız yaklaşık konum (tam konum değil) için izin istediğinde kullanıcıların gizlilik beklentilerini karşılamak amacıyla sistem, şehir blokundan daha doğru bir kullanıcı konum tahmini sağlamaz.

  • Settings.System tarafından tanımlanan bazı cihaz ayarları artık salt okunur özellikte. Uygulamanız Settings.System bölgesinde tanımlanan ve Settings.Global sürümüne taşınan ayarlarda yapılan değişiklikleri yazmaya çalışırsa Android 4.2 ve sonraki sürümlerde çalışırken yazma işlemi sessizce başarısız olur.

    android:targetSdkVersion ve android:minSdkVersion değeriniz 17'den düşük olsa bile uygulamanız, Android 4.2 ve sonraki bir sürümde çalışırken Settings.Global öğesine taşınan ayarları değiştiremez.

  • Uygulamanız WebView kullanıyorsa Android 4.2, JavaScript'i Android kodunuza daha güvenli bir şekilde bağlayabilmeniz için Android 4.2 ilave bir güvenlik katmanı ekler. targetSdkVersion değerinizi 17 veya daha yüksek bir değere ayarlarsanız artık JavaScript'inizde kullanılabilmesini istediğiniz tüm yöntemlere @JavascriptInterface ek açıklamasını eklemeniz gerekir (yöntem herkese açık da olmalıdır). Ek açıklamayı sağlamazsanız Android 4.2 veya sonraki bir sürümde çalışırken WebView üzerindeki bir web sayfası bu yönteme erişemez. targetSdkVersion değerini 16 veya daha düşük bir değere ayarlarsanız ek açıklama gerekli olmasa da daha fazla güvenlik için hedef sürümünüzü güncellemenizi ve ek açıklamayı eklemenizi öneririz.

    JavaScript kodunu Android koduna bağlama hakkında daha fazla bilgi edinin.

Daydream

Daydream, Android cihazlara yönelik yeni bir etkileşimli ekran koruyucu modudur. Cihaz yuvaya yerleştirildiğinde veya şarj cihazına bağlıyken boşta kaldığında (ekranı kapatmak yerine) otomatik olarak etkinleşir. Daydream, aynı anda yalnızca bir rüya görüntüler. Dokunulduğunda kapanan tamamen görsel, pasif bir ekran veya giriş etkinliklerinin tamamına duyarlı ve etkileşimli bir ekran olabilir. Hayalleriniz, uygulamanızın süreçlerinde gerçekleşir ve görünümler, düzenler ve animasyonlar da dahil olmak üzere Android kullanıcı arayüzü araç setine tam erişim sağlar. Böylece, animasyonlu duvar kağıtları veya uygulama widget'larından daha esnek ve güçlüdürler.

DreamService alt sınıfını uygulayarak Daydream için bir hayal oluşturabilirsiniz. DreamService API'leri, Activity API'lerine benzer şekilde tasarlanmıştır. Hayalinizdeki kullanıcı arayüzünü belirtmek için onAttachedToWindow() geri çağırması gibi bir pencere açıldıktan sonra herhangi bir noktada bir düzen kaynağı kimliği veya View öğesini setContentView() öğesine iletin.

DreamService sınıfı, temel Service API'lerinin yanı sıra onDreamingStarted(), onDreamingStopped() ve onDetachedFromWindow() gibi diğer önemli yaşam döngüsü geri çağırma yöntemlerini sağlar. Uygulamanızdan bir DreamService başlatamazsınız. Uygulama, sistem tarafından otomatik olarak başlatılır.

Rüyanız etkileşimliyse daha fazla ayrıntı veya kontrol için kullanıcıyı uygulamanızın tam kullanıcı arayüzüne göndermek üzere rüyadaki bir etkinlikten başlatabilirsiniz. Kullanıcının yeni Etkinliği görebilmesi için hayali sonlandırmak üzere finish() kullanabilirsiniz.

Hafif uykunuzu sistem tarafından kullanılabilir hale getirmek için manifest dosyanızda DreamService öğesini bir <service> öğesiyle tanımlayın. Ardından, "android.service.dreams.DreamService" işlemiyle bir amaç filtresi eklemeniz gerekir. Örneğin:

<service android:name=".MyDream" android:exported="true"
    android:icon="@drawable/dream_icon" android:label="@string/dream_label" >
    <intent-filter>
        <action android:name="android.service.dreams.DreamService" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</service>

DreamService konusunda dikkat etmeniz gereken başka faydalı yöntemler de vardır:

  • setInteractive(boolean), rüyanın giriş etkinliklerini alıp almayacağını veya kullanıcı girişi yapıldıktan hemen sonra çıkış yapıp yapmayacağını kontrol eder. Rüya etkileşimliyse kullanıcı rüyadan çıkmak için Geri veya Ana Sayfa düğmelerini kullanabilir ya da siz rüyayı durdurmak için finish() işlevini çağırabilirsiniz.
  • Görüntüyü tam olarak görüntülemek istiyorsanız setFullscreen() numaralı telefonu arayarak durum çubuğunu gizleyebilirsiniz.
  • Hafif uyku modu başlamadan önce, kullanıcıya boşta kalma zaman aşımının yaklaştığını bildirmek için ekran kararır. setScreenBright(true) çağrıldığında ekranın normal parlaklığını ayarlayabilirsiniz.

Daha fazla bilgi için DreamService dokümanlarına bakın.

İkincil Ekranlar

Android artık uygulamanızın kablolu veya kablosuz bağlantı üzerinden kullanıcının cihazına bağlanan ek ekranlarda benzersiz içerik göstermesine olanak tanıyor. İkincil bir ekran için benzersiz içerik oluşturmak istiyorsanız Presentation sınıfını genişletin ve onCreate() geri çağırmasını uygulayın. onCreate() içinde, setContentView() yöntemini çağırarak ikincil ekran için kullanıcı arayüzünüzü belirtin. Dialog sınıfının bir uzantısı olarak Presentation sınıfı, uygulamanızın ikincil ekranda benzersiz bir kullanıcı arayüzü gösterebileceği bölgeyi sağlar.

Presentation öğenizi görüntüleyebileceğiniz ikincil ekranları algılamak için DisplayManager veya MediaRouter API'lerini kullanın. DisplayManager API'leri aynı anda bağlı olabilecek birden fazla ekranı numaralandırmanıza izin verse de sistemin varsayılan görünümüne hızlı bir şekilde erişmek için sunumlar için genellikle MediaRouter kullanmanız gerekir.

Sununuzun varsayılan görünümünü almak için MediaRouter.getSelectedRoute() numaralı telefonu arayıp ROUTE_TYPE_LIVE_VIDEO değerini iletin. Bu işlem, video sunuları için sistemin o anda seçili rotasını açıklayan bir MediaRouter.RouteInfo nesnesi döndürür. MediaRouter.RouteInfo boş değilse bağlı ekranı temsil eden Display kodunu almak için getPresentationDisplay() çağrısı yapın.

Ardından, Display nesnesini Presentation sınıfınız için bir kurucuya geçirerek sununuzu görüntüleyebilirsiniz. Şimdi sununuz ikincil ekranda görünür.

Çalışma zamanında yeni bir ekranın bağlandığını algılamak için onRoutePresentationDisplayChanged() geri çağırma yöntemini uyguladığınız bir MediaRouter.SimpleCallback örneği oluşturun. Bu örnekte, yeni bir sunu ekranı bağlandığında sistem çağırır. Ardından, MediaRouter.SimpleCallback öğesini ROUTE_TYPE_LIVE_VIDEO rota türüyle birlikte MediaRouter.addCallback() hizmetine ileterek kaydedin. onRoutePresentationDisplayChanged() numaralı telefona bir arama geldiğinde, yukarıda belirtildiği şekilde MediaRouter.getSelectedRoute() numaralı telefonu aramanız yeterlidir.

İkincil ekranlar için Presentation kullanıcı arayüzünü daha da optimize etmek amacıyla uygulamanıza veya etkinliğinize uyguladığınız <style> için android:presentationTheme özelliğini belirterek farklı bir tema uygulayabilirsiniz.

Kullanıcının cihazına bağlı ekranların genellikle daha büyük bir ekran boyutuna ve muhtemelen farklı bir ekran yoğunluğuna sahip olduğunu unutmayın. Ekran özellikleri farklı olabileceğinden bu tür büyük ekranlar için özel olarak optimize edilmiş kaynaklar sağlamanız gerekir. Presentation cihazınızdan ek kaynak istemeniz gerekirse ekrana karşılık gelen Resources nesnesini almak için getContext().getResources() yöntemini çağırın. Böylece, uygulamanızda ikincil ekranın ekran boyutu ve yoğunluğuna en uygun kaynakları kullanabilirsiniz.

Daha fazla bilgi ve bazı kod örnekleri için Presentation sınıfı belgelerine göz atın.

Kilit Ekranı Widget'ları

Android artık kullanıcıların kilit ekranına uygulama widget'ları eklemesine izin veriyor. App Widget'ınızı kilit ekranında kullanılabilir hale getirmek için AppWidgetProviderInfo özelliğini belirten XML dosyanıza android:widgetCategory özelliğini ekleyin. Bu özellik iki değeri destekler: home_screen ve keyguard. Varsayılan olarak özellik home_screen değerine ayarlanır. Böylece kullanıcılar, uygulamanızın widget'ını Ana ekrana ekleyebilirler. Uygulama widget'ınızın kilit ekranında da kullanılabilmesini isterseniz keyguard değerini ekleyin:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:widgetCategory="keyguard|home_screen">
</appwidget-provider>

Kilit ekranındayken android:initialKeyguardLayout özelliğiyle uygulama widget'ınız için bir başlangıç düzeni de belirtmeniz gerekir. Bu, uygulama widget'ınız başlatılana ve düzeni güncelleyene kadar hemen görünebilen bir düzen sağladığından android:initialLayout ile aynı şekilde çalışır.

Kilit ekranında uygulama widget'ınızı doğru şekilde boyutlandırmak dahil, kilit ekranı için uygulama widget'ları oluşturma hakkında daha fazla bilgi için Uygulama Widget'ları kılavuzuna bakın.

Birden Fazla Kullanıcı

Android artık tabletler gibi paylaşılabilir cihazlarda birden fazla kullanıcı alanına izin veriyor. Bir cihazdaki her kullanıcının kendi hesap grupları, uygulamaları, sistem ayarları, dosyaları ve kullanıcıyla ilişkili diğer tüm verileri vardır.

Uygulama geliştirici olarak, uygulamanızın tek bir cihazda birden fazla kullanıcıyla düzgün çalışması için yapmanız gereken herhangi bir işlem yoktur. Bir cihazda kaç kullanıcı olmasından bağımsız olarak, uygulamanızın belirli bir kullanıcı için kaydettiği veriler, uygulamanızın diğer kullanıcılar için kaydettiği verilerden ayrı tutulur. Sistem, uygulamanızın çalıştığı kullanıcı işlemine ait olan kullanıcı verilerini izler ve uygulamanızın yalnızca bu kullanıcının verilerine erişmesine olanak tanır ve diğer kullanıcıların verilerine erişim izni vermez.

Çok kullanıcılı bir ortamda veri kaydetme

Uygulamanız kullanıcı tercihlerini kaydettiğinde, veritabanı oluşturduğunda veya kullanıcının dahili veya harici depolama alanına dosya yazdığında, söz konusu verilere yalnızca söz konusu kullanıcı olarak çalışırken erişilebilir.

Uygulamanızın çok kullanıcılı bir ortamda düzgün şekilde davrandığından emin olmak için, sabit kodlu yolları kullanarak dahili uygulama dizininize veya harici depolama konumunuza başvurmayın ve bunun yerine her zaman uygun API'leri kullanın:

Belirli bir kullanıcının verilerini kaydetmek için bu API'lerden hangisini kullanırsanız kullanın, verilere farklı bir kullanıcı olarak çalışırken erişilemez. Uygulamanız açısından bakıldığında, her kullanıcı tamamen farklı bir cihazda çalışıyor.

Çok kullanıcılı bir ortamdaki kullanıcıları tanımlama

Uygulamanız analiz toplamak veya başka hesap ilişkilendirmeleri oluşturmak gibi benzersiz kullanıcılar tanımlamak istiyorsa benzersiz yüklemeleri tanımlamak için önerilen uygulamaları izlemelisiniz. Uygulamanız ilk kez başladığında yeni bir UUID oluşturarak, uygulamanızı tek bir cihaza kaç kullanıcının yüklediğinden bağımsız olarak, her kullanıcıyı izlemek için benzersiz bir kimlik elde edersiniz. Alternatif olarak, sunucunuzdan getirilen yerel bir jetonu kaydedebilir veya Google Cloud Messaging tarafından sağlanan kayıt kimliğini kullanabilirsiniz.

Uygulamanız donanım cihaz tanımlayıcılarından birini (ör. kablosuz MAC adresi veya SERIAL numarası) isterse donanımın her bir kullanıcı için aynı değeri sağlayacağını unutmayın. Bunun nedeni, bu tanımlayıcıların kullanıcıya değil donanıma bağlı olmasıdır. Ayrıca, Uygulama Yüklemelerini Tanımlama blog yayınında ele aldığımız gibi, bu tanımlayıcıların neden olduğu diğer sorunlardan bahsetmeye de gerek yok.

Yeni Genel Ayarlar

Sistem ayarları, Settings.Global eklenmesiyle birden çok kullanıcıyı destekleyecek şekilde güncellendi. Bu ayar koleksiyonu, salt okunur olduğundan Settings.Secure ayarlarına benzer, ancak cihazdaki tüm kullanıcı alanları için global olarak geçerlidir.

Bazı mevcut ayarlar Settings.System veya Settings.Secure konumundan buraya taşındı. Uygulamanız şu anda Settings.System politikasında tanımlanan ayarlarda (AIRPLANE_MODE_ON gibi) değişiklik yapıyorsa Android 4.2 veya sonraki sürümleri çalıştıran cihazlarda, söz konusu ayarlar Settings.Global sürümüne taşındıysa bu değişikliğin artık çalışmayacağını bekleyebilirsiniz. Settings.Global içindeki ayarları okumaya devam edebilirsiniz. Ancak bu ayarlar artık uygulamaların değiştirilmesi için güvenli kabul edilmediğinden, bu işlemi yapma girişiminiz sessizce başarısız olur ve uygulamanızı Android 4.2 veya sonraki bir sürümde çalıştırırken sistem, sistem günlüğüne bir uyarı yazar.

RTL Düzeni Desteği

Android artık Arapça ve İbranice gibi, sağdan sola (RTL) kullanıcı arayüzleri ve okuma yönü kullanan dilleri destekleyecek şekilde düzen yönünü sorunsuzca değiştiren kullanıcı arayüzleri oluşturmanıza olanak tanıyan çeşitli API'ler sunar.

Uygulamanızda RTL düzenlerini desteklemeye başlamak için android:supportsRtl özelliğini manifest dosyanızda <application> öğesine ayarlayın ve “true" olarak ayarlayın. Bunu etkinleştirdiğinizde sistem, uygulamanızı RTL düzenleri ile görüntülemek için çeşitli RTL API'lerini etkinleştirir. Örneğin, işlem çubuğunun sağ tarafında simge ve başlık, soldaki işlem düğmeleri gösterilir. Çerçeve tarafından sağlanan View sınıflarıyla oluşturduğunuz tüm düzenler de tersine çevrilir.

Uygulamanızın RTL düzeniyle görüntülendiğinde görünümünü daha da optimize etmeniz gerekirse iki temel optimizasyon düzeyi vardır:

  1. Sol ve sağ yönlü düzen özelliklerini başlangıç ve bitiş yönlü düzen özelliklerine dönüştürün.

    Örneğin, android:layout_marginLeft yerine android:layout_marginStart ve android:layout_marginRight yerine android:layout_marginEnd kullanın.

    RelativeLayout sınıfı, sol/sağ konumları değiştirmek için karşılık gelen düzen özelliklerini de sağlar. Örneğin, android:layout_toLeftOf yerine android:layout_alignParentLeft ve android:layout_toStartOf öğesini değiştirmek için android:layout_alignParentStart gibi özellikler sağlanır.

  2. Sağdan sola düzenler için tam optimizasyon sağlamak isterseniz ldrtl kaynak niteleyicisini (ldrtl, "layout-direction-right-to-left} anlamına gelir) kullanarak tamamen ayrı düzen dosyaları sağlayabilirsiniz. Örneğin, varsayılan düzen dosyalarınızı res/layout/ ve RTL için optimize edilmiş düzenlerinizi res/layout-ldrtl/ içine kaydedebilirsiniz.

    ldrtl niteleyicisi, çekilebilir kaynaklar için idealdir. Böylece okuma yönüne karşılık gelen yönde grafikler sağlayabilirsiniz.

Çerçeve genelinde RTL düzenlerini desteklemek için View sınıfı gibi çeşitli API'ler mevcuttur. Böylece özel görünümler için, geçerli düzen yönünü sorgulamak amacıyla Configuration içinde doğru davranışları uygulayabilirsiniz.

Not: SQlite kullanıyorsanız ve "yalnızca sayı" türündeki tablo ya da sütun adlarınız varsa dikkatli olun: Cihazınız Arapça yerel ayarına ayarlanmışsa String.format(String, Object...) kullanımı, sayıların Arapçadaki eşdeğerlerine dönüştürülmesine yol açan hatalara neden olabilir. Sayıların ASCII olarak korunduğundan emin olmak için String.format(Locale,String,Object...) kullanmanız gerekir. Sayıları biçimlendirmek için String.valueOf(int) yerine String.format("%d", int) kullanın.

İç İçe Parçalar

Artık parçaları parçaların içine yerleştirebilirsiniz. Bu, dinamik ve yeniden kullanılabilir kullanıcı arayüzü bileşenlerini, dinamik ve yeniden kullanılabilen bir kullanıcı arayüzü bileşenine yerleştirmek istediğiniz çeşitli durumlarda faydalıdır. Örneğin, sola ve sağa kaydıran ve ekran alanının çoğunu kaplayan parçalar oluşturmak için ViewPager kullanırsanız artık her bir parça sayfasına parçalar ekleyebilirsiniz.

Bir parçayı iç içe yerleştirmek için, içine parça eklemek istediğiniz Fragment öğesinde getChildFragmentManager() çağrısı yapmanız yeterlidir. Bu, parça işlemleri oluşturmak için üst düzey etkinlikte normalde yaptığınız gibi kullanabileceğiniz bir FragmentManager döndürür. Örneğin, mevcut bir Fragment sınıfının içinden parça ekleyen bazı kodu burada görebilirsiniz:

Kotlin

val videoFragment = VideoPlayerFragment()
childFragmentManager.beginTransaction().apply {
    add(R.id.video_fragment, videoFragment)
    commit()
}

Java

Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();

İç içe yerleştirilmiş bir parçanın içinden, getParentFragment() çağrısı yaparak üst parçaya bir referans alabilirsiniz.

Android Destek Kitaplığı artık iç içe yerleştirilmiş parçaları da desteklemektedir. Böylece, Android 1.6 ve sonraki sürümlerde iç içe yerleştirilmiş parça tasarımları uygulayabilirsiniz.

Not: <fragment> içerdiğinde bir düzeni bir parçaya genişletemezsiniz. İç içe yerleştirilmiş parçalar yalnızca parçaya dinamik bir şekilde eklendiğinde desteklenir.

Renderscript

Renderscript hesaplama işlevi aşağıdaki özelliklerle geliştirildi:

Komut dosyası iç öğeleri

Renderscript'in sizin için yaygın işlemleri uygulayan yerleşik komut dosyası iç çubuklarını kullanabilirsiniz. Örneğin:

İçsel bir komut dosyası kullanmak için komut dosyasının bir örneğini oluşturmak üzere her bir instrinsic'in statik create() yöntemini çağırın. Daha sonra, gerekli girişleri ve seçenekleri ayarlamak için her bir komut dosyasının dahili set() yöntemlerini çağırırsınız. Son olarak, komut dosyasını çalıştırmak için forEach() yöntemini çağırın.

Komut Dosyası Grupları

ScriptGroup, ilgili Renderscript komut dosyalarını bir araya getirmenize ve bunları tek bir çağrıyla yürütmenize olanak tanır.

addKernel() yöntemini çağırarak tüm komut dosyalarını gruba eklemek için bir ScriptGroup.Builder kullanın. Tüm komut dosyalarını ekledikten sonra addConnection() yöntemini çağırarak komut dosyaları arasında bağlantı oluşturun. Bağlantıları eklemeyi tamamladığınızda komut dosyası grubunu oluşturmak için create() yöntemini çağırın. Komut dosyası grubunu yürütmeden önce, setInput(Script.KernelID, Allocation) yöntemiyle çalışacak giriş Allocation ve ilk komut dosyasını belirtin ve sonucun yazılacağı Allocation çıkışını ve setOutput() ile çalışacak son komut dosyasını sağlayın. Son olarak, komut dosyası grubunu çalıştırmak için execute() çağrısı yapın.

Filterscript

Filterscript, mevcut Renderscript API'lerinde ortaya çıkan kodun daha çeşitli işlemcilerde (CPU, GPU ve DSP) çalıştırılmasına olanak tanıyan kısıtlamalar tanımlar. Filterscript dosyaları oluşturmak için .rs dosyaları yerine .fs dosyaları oluşturun ve Renderscript çalışma zamanına komut dosyalarınızın katı IEEE 754-2008 kayan nokta hassasiyeti gerektirmediğini bildirmek için #pragma rs_fp_relaxed değerini belirtin. Bu hassasiyet, denormlar için floştan sıfıra ve sıfıra doğru yuvarlamaya olanak tanır. Ayrıca, Filterscript, root() işlevinin varsayılan imzasının tanımladığı işaretçileri desteklemediğinden Filterscript komut dosyalarınız, 32 bitlik yerleşik türleri kullanmamalı ve __attribute__((kernel)) özelliğini kullanarak özel bir kök işlev belirtmelidir.

Not: Platformda Filterscript desteği bulunsa da, SDK Araçları 21.0.1 sürümünde geliştirici desteği sunulacaktır.

Android 4.2'deki tüm API değişikliklerinin ayrıntılı görünümü için API Farklılıkları Raporu'na bakın.