API Düzeyi: 17
Android 4.2 (JELLY_BEAN_MR1
)
kullanıcılar ve uygulama için yeni özellikler sunan Jelly Bean sürümünün güncellemesidir.
birlikte çalışır. Bu dokümanda, geliştiriciler için en dikkate değer ve faydalı yeni API'ler tanıtılmaktadır.
Uygulama geliştirici olarak, Android 4.2 sistem imajını ve SDK platformunu SDK Yöneticisi'nden en kısa sürede indirmeniz gerekir. Şu durumda: Uygulamanızı test etmek için Android 4.2 çalıştıran bir cihazınız yoksa Android 4.2 sistemini kullanın görselini kullanarak uygulamanızı Android emülatöründe test edebilirsiniz. Ardından, en son API'leri kullanmaya başlamak için uygulamalarınızı Android 4.2 platformuna göre derleyin.
Uygulamanızı Android 4.2 çalıştıran cihazlar için daha iyi optimize etmek amacıyla targetSdkVersion
dosyanızı "17"
olarak ayarlamanız, Android 4.2 sistem resmine yüklemeniz, test etmeniz ve ardından bu değişikliği içeren bir güncelleme yayınlamanız gerekir.
Siz
API'leri Android 4.2'de kullanabilir ve
çalıştırmadan önce sistem API düzeyini kontrol eden kodunuza koşullar
minSdkVersion
cihazınızın desteklemediği API'ler.
Şu konu hakkında daha fazla bilgi edinmek için:
geriye dönük uyumluluğu koruma için Geriye Dönük Uyumlu Oluşturma başlıklı makaleyi okuyun
Kullanıcı arayüzleri.
API düzeylerinin işleyiş şekli hakkında daha fazla bilgiyi API düzeyi nedir? başlıklı makalede bulabilirsiniz.
Önemli davranış değişiklikleri
Daha önce Android için bir uygulama yayınladıysanız aşağıdakilere dikkat edin Uygulamanızın davranışını etkileyebilecek değişiklikler:
- İçerik sağlayıcılar artık varsayılan olarak dışa aktarılmaz. Diğer bir deyişle,
android:exported
özelliği için artık“false"
. Diğer uygulamaların sağlayıcıya erişebiliyorsanız artıkandroid:exported="true"
özelliğini açık bir şekilde ayarlamanız gerekir.Bu değişiklik yalnızca
android:targetSdkVersion
veyaandroid:minSdkVersion
değerini 17 ya da daha yüksek bir değere ayarlarsanız geçerli olur. Aksi takdirde varsayılan değer yine“true"
olur hatta Android 4.2 ve sonraki sürümlerde bile kullanılabilir. - Uygulamanız
ACCESS_COARSE_LOCATION
iznini istiyor ancakACCESS_FINE_LOCATION
iznini istemiyorsa kullanıcı konumu sonuçları, Android'in önceki sürümlerine kıyasla daha az doğru olabilir.Uygulamanız şunlar için izin istediğinde kullanıcıların gizlilik beklentilerini karşılamak: yaklaşık konum (tam konum değil) olduğunda sistem, kullanıcıya yaklaşık konum tahmini sağlamaz bir şehir bloğundan daha doğrudur.
Settings.System
tarafından tanımlanan bazı cihaz ayarları artık salt okunur. Uygulamanız,Settings.System
politikasında tanımlanan veSettings.Global
hizmetine taşınan ayarları yazmaya çalışırsa Android 4.2 ve sonraki sürümlerde çalışırken yazma işlemi sessiz bir şekilde başarısız olur.android:targetSdkVersion
veandroid:minSdkVersion
değeriniz 17'den düşük olsa bile uygulamanız, , Android 4.2 ve sonraki sürümlerde çalışırkenSettings.Global
konumuna taşındı.- Uygulamanızda
WebView
kullanılıyorsa Android 4.2, uygulamanızın Böylece JavaScript'i uygulamanıza daha güvenli bir şekilde bağlayabilmek için Android kodu. ÖrneğintargetSdkVersion
için artık@JavascriptInterface
ek açıklamasını eklemek istediğiniz herhangi bir yönteme eklemeniz JavaScript'inizde kullanılabilir olmasını ister (yöntem ayrıca herkese açık olmalıdır). Lütfen not, söz konusu yöntemeWebView
içindeki bir web sayfası tarafından erişilemiyorsa .targetSdkVersion
değerini 16 veya daha düşük bir değere ayarlarsanız ek açıklama zorunlu değildir ancak ek güvenlik için hedef sürümünüzü güncellemenizi ve ek açıklamayı eklemenizi öneririz.Bağlama hakkında daha fazla bilgi edinin. JavaScript kodu için Android kodu.
Daydream
Daydream, Android cihazlar için geliştirilmiş yeni etkileşimli ekran koruyucu modudur. Otomatik olarak etkinleştirilir Cihaz bir yuvaya takıldığında veya yuvaya takılıyken boşta kaldığında şarj cihazı (ekranı kapatmak yerine). Daydream, her seferinde bir rüya gösterir. Bu rüya, dokunulduğunda kaybolan tamamen görsel ve pasif bir görüntü veya giriş etkinliklerinin tamamına duyarlı ve etkileşimli bir görüntü olabilir. Uygulamanızın işleminde çalışan ve görünümler, düzenler ve animasyonlar da dahil olmak üzere Android kullanıcı arayüzü araç setine tam erişimi olan rüyalarınız, canlı duvar kağıtlarından veya uygulama widget'larından daha esnek ve güçlüdür.
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. Şunun için kullanıcı arayüzünü belirtmek için:
öğesini tamamladıktan sonra herhangi bir noktada setContentView()
adresine bir düzen kaynağı kimliği veya View
onAttachedToWindow()
gibi bir pencereden
geri arama.
DreamService
sınıfı, yaşam döngüsü boyunca başka önemli geri çağırma işlemleri sağlar.
temel Service
API'lerine ek olarak onDreamingStarted()
, onDreamingStopped()
ve onDetachedFromWindow()
gibi yöntemler kullanabilirsiniz.
DreamService
'yi uygulamanızdan başlatamazsınız. Bu işlem 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üyadan bir etkinlik başlatabilirsiniz. Kullanıcının görebileceği şekilde hayali sonlandırmak için finish()
öğesini kullanabilirsiniz.
yeni Etkinlik'e dokunun.
Daydream'inizi sistemde kullanılabilir hale getirmek için manifest dosyanızda DreamService
öğenizi <service>
öğesiyle beyan edin. Ardından "android.service.dreams.DreamService"
işlemini içeren bir intent filtresi eklemeniz gerekir. Örnek:
<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
'te kullanabileceğiniz diğer faydalı yöntemler:
setInteractive(boolean)
, hayal, kullanıcı girişinden hemen sonra giriş etkinliklerini veya çıkışları alır. Hayalim kullanıcı rüyadan çıkmak için Geri veya Ana Ekran düğmelerini kullanabilir veya Rüyayı durdurmak içinfinish()
.- Tamamen etkileyici bir ekran istiyorsanız durum çubuğunu gizlemek için
setFullscreen()
öğesini çağırabilirsiniz. - Hafif uyku modu başlamadan önce, kullanıcıya boşta kalma zaman aşımının işaretleneceğini bildirmek için ekran kararır
yaklaşıyor.
setScreenBright(true)
numarasını aradığınızda, ekranı normal parlaklığına ayarlayabilirsiniz.
Daha fazla bilgi için DreamService
belgelerini inceleyin.
İkincil Ekranlar
Android artık bağlı olan ek ekranlarda uygulamanızın benzersiz içerikler göstermesine olanak tanıyor
veya kablosuz bağlantı üzerinden kullanıcının cihazına bağlayabilirsiniz.
İkincil ekran için benzersiz içerik oluşturmak üzere Presentation
sınıfını genişletin ve onCreate()
geri çağırma işlevini uygulayın. onCreate()
içinde, setContentView()
'ü çağırarak ikincil ekran için kullanıcı arayüzünüzü belirtin.
Dialog
sınıfının bir uzantısı olan Presentation
sınıfı, uygulamanızın ikincil ekranda benzersiz bir kullanıcı arayüzü gösterebileceği bölgeyi sağlar.
Presentation
'ünüzü gösterebileceğiniz ikincil ekranları algılamak için DisplayManager
veya MediaRouter
API'lerini kullanın. DisplayManager
API'leri tüm verileri numaralandırmanıza
aynı anda bağlanabilecek birden fazla ekran varsa sistemin varsayılan ekranına hızlıca erişmek için
MediaRouter
tercih etmelisiniz.
en iyi uygulamaları
paylaşacağız.
Sununuzun varsayılan görüntülemesini almak için MediaRouter.getSelectedRoute()
işlevini çağırın ve ROUTE_TYPE_LIVE_VIDEO
parametresini iletin. Bu işlev, sistemin video sunumları için şu anda seçili olan yolunu açıklayan bir MediaRouter.RouteInfo
nesnesi döndürür. MediaRouter.RouteInfo
boş değilse şunu çağırın:
Bağlı ekranı temsil eden Display
değerini almak için getPresentationDisplay()
.
Daha sonra Display
nesnesini ileterek sununuzu görüntüleyebilirsiniz
Presentation
sınıfınız için bir oluşturucusuna ekleyin. Sununuz artık ikincil ekranda görünür.
Yeni bir ekranın çalışma zamanında bağlandığını algılamak için MediaRouter.SimpleCallback
örneği oluşturun. Bu örnekte, sistem yeni bir sunu ekranı bağlandığında çağıracağı onRoutePresentationDisplayChanged()
geri çağırma yöntemini uygulayın. Ardından MediaRouter.SimpleCallback
öğesini, ROUTE_TYPE_LIVE_VIDEO
rota türüyle birlikte MediaRouter.addCallback()
öğesine aktararak kaydedin. Bir çağrı aldığınızda
onRoutePresentationDisplayChanged()
, yukarıda belirtildiği gibi MediaRouter.getSelectedRoute()
adlı kişiyi aramanız yeterlidir.
Presentation
içindeki kullanıcı arayüzünü daha da optimize etmek için
ikincil ekranlara göre
arasında android:presentationTheme
özelliğini belirterek <style>
üzerine konuşacağız.
Kullanıcının cihazına bağlı ekranların genellikle daha büyük ekran boyutuna ve muhtemelen farklı bir ekran yoğunluğuna sahip olduğunu unutmayın. Ekran özellikleri farklı olabileceğinden, özellikle bu tür daha büyük ekranlar için optimize edilmiş kaynaklar sağlamanız gerekir. İhtiyacınız varsa
Presentation
cihazınızdan ek kaynak istemek için getContext()
.getResources()
numaralı telefonu arayarak ekrana karşılık gelen Resources
nesnesini alın. Bu da
uygulamanıza en uygun kaynakları
ikincil ekranın ekran boyutu ve yoğunluğu.
Daha fazla bilgi ve bazı kod örnekleri için Presentation
sınıf dokümanlarına bakın.
Kilit Ekranı Widget'ları
Android artık kullanıcıların kilit ekranına uygulama widget'ları eklemesine izin veriyor. Uygulama widget'ınızı kilit ekranında kullanılabilir hale getirmek için XML dosyanıza AppWidgetProviderInfo
değerini belirten android:widgetCategory
özelliğini ekleyin. Bu özellik iki değeri destekler: home_screen
ve keyguard
. Kullanıcılarınhome_screen
uygulama widget'ını ana ekrana taşıyın. Uygulama widget'ınızın kilit ekranında da kullanılabilmesini istiyorsanız keyguard
değerini ekleyin:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" ... android:widgetCategory="keyguard|home_screen"> </appwidget-provider>
Ayrıca, kilit ekranındayken uygulama widget'ınız için bir başlangıç düzeni
android:initialKeyguardLayout
özelliği için değer ekleyebilirsiniz. Bu, uygulama widget'ınız başlatılıp düzeni güncelleyene kadar hemen görünebilecek bir düzen sağlaması açısından android:initialLayout
ile aynı şekilde çalışır.
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 hesapları, uygulamaları, sistem ayarları, dosyaları ve kullanıcıyla ilişkili diğer 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 farklı bir işlem yapmanız gerekmez. Bir cihazda kaç kullanıcı olursa olsun, 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, hangi kullanıcı verilerinin veri içeren kullanıcı işlemine ait olduğunu Uygulamanız çalışıyor ve uygulamanızın yalnızca bu kullanıcının verilerine erişmesine izin veriyor ve Diğer kullanıcıların verilerine erişme.
Ç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ında yer alırsa bu verilere yalnızca ilgili kullanıcı olarak çalıştırıldığı sırada erişilebilir.
Uygulamanızın çok kullanıcılı bir ortamda düzgün şekilde çalıştığından emin olmak için sabit kodlanmış yollar kullanarak dahili uygulama dizininize veya harici depolama konumunuza başvurmayın. Bunun yerine her zaman uygun API'leri kullanın:
- Dahili depolama alanına erişmek için
getFilesDir()
,getCacheDir()
veyaopenFileOutput()
'yi kullanın. - Harici depolama alanına erişim için
getExternalFilesDir()
veyagetExternalStoragePublicDirectory()
kullanın.
Belirli bir kullanıcının verilerini kaydetmek için bu API'lerden hangisini kullanırsanız kullanın, veriler yine de erişilebilir hale getirebilirsiniz. Uygulamanızın bakış açısından her kullanıcı tamamen ayrı bir cihazda çalışır.
Çok kullanıcılı ortamda kullanıcıları tanımlama
Uygulamanız, analiz toplamak veya başka bir hesap oluşturmak gibi benzersiz kullanıcıları tanımlamak istiyorsa
ilişkilendirmelerini not etmek için, Google Cloud'u tanımlamak üzere
benzersiz yükleme sayısı. UygulamanızUUID
kaç tanesine bakıldığından bağımsız olarak her kullanıcıyı izlemek için benzersiz bir kimlik alacağınızdan
uygulamanızı tek bir cihaza yüklemesini sağlar. Alternatif olarak, şuradan getirilen bir yerel jeton kaydedebilirsiniz:
veya Google Cloud Messaging tarafından sağlanan kayıt kimliğini kullanın.
Uygulamanız donanım cihaz tanımlayıcılarından birini (ör. kablosuz MAC adresi veya SERIAL
numarası) isterse bu tanımlayıcıların kullanıcıya değil donanıma bağlı olması nedeniyle her kullanıcı için aynı değeri sağlayacağını unutmayın. Uygulama Yüklemelerini Tanımlama blog yayınında da belirtildiği gibi, bu tanımlayıcıların neden olduğu diğer sorunlar da cabası.
Yeni Global Ayarlar
Sistem ayarları, Settings.Global
ürününün eklenmesiyle birden fazla kullanıcıyı destekleyecek şekilde güncellendi. Bu ayar koleksiyonu salt okunur olduklarından Settings.Secure
ayarlarına benzer, ancak genel olarak şuralarda geçerlidir:
cihazdaki tüm kullanıcı alanları.
Mevcut bazı ayarlar Settings.System
veya Settings.Secure
konumundan buraya taşındı. Uygulamanız
şu anda daha önce Settings.System
içinde tanımlanan ayarlarda değişiklik yapılıyor
(AIRPLANE_MODE_ON
gibi) kullanıyorsanız,
Android 4.2 veya sonraki sürümleri çalıştıran cihazlarda bu ayarlar kullanılabiliyorsa
Settings.Global
klasörüne taşındı. Şuradaki ayarları okumaya devam edebilirsiniz:
Ayarlar artık güvenli olarak kabul edilmediğinden Settings.Global
bu değişikliği yapmaya çalıştığınızda işlem sessizce başarısız olur ve sistem,
Sistem günlüğü.
RTL Düzen Desteği
Android artık sorunsuz şekilde kullanıcı arayüzleri oluşturmanıza olanak tanıyan çeşitli API'ler sunuyor. Sağdan sola (RTL) kullanıcı arayüzleri ve okuma kullanan dilleri desteklemek için düzen yönünü dönüştürme yönlendirme için kullanabilirsiniz.
Uygulamanızda RTL düzenlerini desteklemeye başlamak için manifest dosyanızda android:supportsRtl
özelliğini <application>
öğesine ayarlayın.
ve “true"
olarak ayarladım. Bunu etkinleştirdiğinizde sistem, uygulamanızı RTL düzenleriyle görüntülemek için çeşitli RTL API'lerini etkinleştirir. Örneğin, işlem çubuğunda simge ve başlık sağ tarafta, işlem düğmeleri ise solda gösterilir. Ayrıca, ç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österildiğindeki görünümünü daha da optimize etmeniz gerekiyorsa iki temel optimizasyon düzeyi vardır:
- Sol ve sağa yönlü düzen özelliklerini başlangıç ve bitiş odaklı düzene dönüştür
özellikler.
Örneğin,
android:layout_marginStart
kullanın (android:layout_marginRight
yerineandroid:layout_marginLeft
veandroid:layout_marginEnd
).RelativeLayout
sınıfı, ilgili düzeni de sağlar. özellikleri, örneğinandroid:layout_alignParentStart
-android:layout_alignParentLeft
veandroid:layout_toStartOf
yerineandroid:layout_toLeftOf
. - Bunun yerine RTL düzenleri için tam optimizasyon sağlamak üzere RTL düzenleri için tamamen ayrı
ldrtl
kaynak niteleyiciyi kullanan düzen dosyaları (ldrtl
, Edit-direction-right-to-left}). Örneğin, varsayılan düzen dosyalarınızıres/layout/
, RTL için optimize edilmiş düzenlerinizi iseres/layout-ldrtl/
klasörüne kaydedebilirsiniz.ldrtl
niteleyicisi, çekilebilir kaynaklar için idealdir. Böylece Okuma yönüne karşılık gelen yöne bakan grafikler
RTL düzenleri desteklemek için çerçevede çeşitli API'ler mevcuttur. Örneğin, özel görünümler için uygun davranışları uygulayabilmeniz amacıyla View
sınıfında ve mevcut düzen yönünü sorgulamak için Configuration
sınıfında.
Not: SQlite kullanıyorsanız ve "yalnızca sayı" olan tablo veya sütun adlarınız varsa dikkatli olun: String.format(String, Object...)
kullanmanız, cihazınız Arapça yerel ayarına ayarlanmışsa sayıların Arapça eşdeğerlerine dönüştürüldüğü hatalara neden olabilir.
Sayıların doğru olduğundan emin olmak için String.format(Locale,String,Object...)
kullanmanız gerekir
korunduğundan emin olun. Ayrıca,String.format("%d", int)
Şunun için String.valueOf(int)
:
biçimlendirme sayıları.
İç içe yerleştirilmiş 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, kendisi de dinamik ve yeniden kullanılabilir olan bir kullanıcı arayüzü bileşenine yerleştirmek istediğiniz çeşitli durumlarda yararlıdır. Örneğin, sola ve sağa kaydırılan ve ekran alanının büyük bir kısmını kaplayan parçalar oluşturmak için ViewPager
simgesini kullanıyorsanız artık her bir parça sayfasına parça ekleyebilirsiniz.
Bir parçayı iç içe yerleştirmek için, parça eklemek istediğiniz Fragment
üzerinde getChildFragmentManager()
'yi çağırmanız yeterlidir. Bu işlem, normalde üst düzey etkinlikten yaptığınız gibi parça işlemleri oluşturmak için kullanabileceğiniz bir FragmentManager
döndürür. Örneğin, aşağıda örnek dosya içinden bir parça ekleyen
mevcut bir Fragment
sınıfı:
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, şunu çağırarak üst parçaya bir başvuru alabilirsiniz:
getParentFragment()
Android Destek Kitaplığı artık iç içe yerleştirilmiş parçaları da desteklediği için Android 1.6 ve sonraki sürümlerde iç içe yerleştirilmiş parça tasarımları uygulayabilirsiniz.
Not: Bir düzen <fragment>
içeriyorsa bu düzeni bir parçaya genişletemezsiniz. İç içe yerleştirilmiş parçalar yalnızca
parçasına dinamik bir şekilde uyar.
Renderscript
Renderscript hesaplama işlevi, aşağıdaki özelliklerle geliştirildi:
- Komut dosyası yerleşiklikleri
Aşağıdakiler gibi yaygın işlemleri sizin için uygulayan Renderscript'in yerleşik komut dosyası içsel özelliklerini kullanabilirsiniz:
Blends
Blur
Color matrix
3x3 convolve
5x5 convolve
Per-channel lookup table
Converting an Android YUV buffer to RGB
Komut dosyası içsel özelliğini kullanmak için komut dosyasının bir örneğini oluşturmak üzere her içsel özelliğin statik
create()
yöntemini çağırın. Ardından, müsaitset()
hattını arayın. her komut dosyasının doğasında vardır. Son olarak,forEach()
yöntemini kullanabilirsiniz.- Komut Dosyası Grupları
-
ScriptGroup
, ilgili Renderscript komut dosyalarını birbirine bağlamanıza ve tek bir çağrıyla yürütmenize olanak tanır.Tüm komut dosyalarını gruba eklemek için
ScriptGroup.Builder
kullanınaddKernel()
numaralı telefonu arayarak. Tüm komut dosyalarını ekledikten sonraaddConnection()
'ü çağırarak komut dosyaları arasında bağlantılar oluşturun. Bağlantıları ekleme işlemini tamamladığınızdacreate()
adlı kuruluşu arayın komut dosyası grubunu oluşturun. Komut dosyası grubunu yürütmeden önce,setInput(Script.KernelID, Allocation)
yöntemiyle çalıştırılacak girişAllocation
ve ilk komut dosyasını belirtin ve sonucun yazılacağı çıkışAllocation
dosyasını vesetOutput()
ile çalıştırılacak son komut dosyasını sağlayın. Son olarak, Komut dosyası grubunu çalıştırmak içinexecute()
. - Filterscript
-
Filtre komut dosyası, mevcut Renderscript API'lerinde, ortaya çıkan kodun daha çeşitli işlemcilerde (CPU'lar, GPU'lar ve DSP'ler) çalışmasını sağlayan kısıtlamalar tanımlar. Filtre komut dosyası oluşturmak için
.fs
dosyası oluşturun dosyalarını kullanarak.rs
dosyalarını çalıştırabilir ve#pragma rs_fp_relaxed
öğesini Renderscript çalışma zamanına komut dosyalarınızın yüksek düzeyde IEEE 754-2008 kayan nokta kesinliği gerektirmediğini bildirir. Bu hassasiyet, normalleştirme için sıfıra yuvarlamaya ve sıfıra doğru yuvarlamaya olanak tanır. Ayrıca, Filterscript komut dosyalarınız 32 bit yerleşik türleri kullanmamalı ve Filterscript,root()
işlevinin varsayılan imzasını tanımlayan işaretçileri desteklemediğinden__attribute__((kernel))
özelliğini kullanarak özel bir kök işlev belirtmelidir.
Not: Platformda filterscript desteği mevcuttur ancak geliştirici desteği, SDK Araçları Sürüm 21.0.1'de 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.