API Düzeyi: 17
Android 4.2 (JELLY_BEAN_MR1
), kullanıcılar ve uygulama geliştiriciler için yeni özellikler sunan bir Jelly Bean güncellemesidir. Bu belgede, geliştiriciler için en önemli ve kullanışlı yeni API'ler tanıtılmaktadır.
Uygulama geliştiricisi olarak, SDK Yöneticisi'nden Android 4.2 sistem görüntüsünü ve SDK platformunu en kısa sürede indirmelisiniz. Uygulamanızı test edebileceğiniz Android 4.2 çalıştıran bir cihazınız yoksa uygulamanızı Android emülatörde test etmek için Android 4.2 sistem görüntüsünü kullanın. Ardından, en yeni 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
uygulamanızı "17"
olarak ayarlamalı, bir Android 4.2 sistem görüntüsüne yüklemeli, test etmeli ve ardından bu değişikliği içeren bir güncelleme yayınlamalısınız.
Hem Android 4.2'de API'leri kullanabilir hem de kodunuza minSdkVersion
tarafından desteklenmeyen API'leri yürütmeden önce sistem API düzeyini kontrol eden koşullar ekleyerek eski sürümleri destekleyebilirsiniz.
Geriye dönük uyumluluğu koruma hakkında daha fazla bilgi edinmek için Geriye Doğru Uyumlu Kullanıcı Arayüzleri Oluşturma konusuna 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 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"
oldu. Diğer uygulamaların içerik sağlayıcınıza erişebilmesi önemliyse artıkandroid:exported="true"
ayarını açıkça yapmanız gerekir.Bu değişiklik yalnızca
android:targetSdkVersion
veyaandroid:minSdkVersion
değerlerinden birini 17 veya daha yüksek bir değere ayarladıysanız geçerli olur. Aksi takdirde, Android 4.2 ve sonraki sürümler çalıştırıldığında bile varsayılan değer hâlâ“true"
olur. - Android'in önceki sürümlerine kıyasla, uygulamanız
ACCESS_COARSE_LOCATION
iznini istiyor ancakACCESS_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 bloğundan daha doğru olan bir kullanıcı konumu tahmini sağlamaz.
Settings.System
tarafından tanımlanan bazı cihaz ayarları artık salt okunur. UygulamanızSettings.System
ürününde tanımlanmış veSettings.Global
sürümüne taşınmış ayarlarda değişiklik yapmayı denerse yazma işlemi Android 4.2 ve sonraki sürümlerde çalışırken sessizce 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
sürümüne taşınan ayarları değiştiremez.- Uygulamanız
WebView
kullanıyorsa Android 4.2 ilave bir güvenlik katmanı ekler. Böylece JavaScript'i Android kodunuza daha güvenli bir şekilde bağlayabilirsiniz.targetSdkVersion
değerinizi 17 veya daha yüksek bir değere ayarlarsanız@JavascriptInterface
ek açıklamasını, JavaScript'inizde kullanılabilmesini istediğiniz herhangi bir yönteme 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ışırkenWebView
sayfanızdaki bir web sayfası yönteme erişemez.targetSdkVersion
değerini 16 veya daha düşük bir değere ayarlarsanız ek açıklama gerekli değildir ancak hedef sürümünüzü güncellemenizi ve ek güvenlik için ek açıklama eklemenizi öneririz.JavaScript kodunu Android koduna bağlama hakkında daha fazla bilgi edinin.
Daydream
Daydream, Android cihazlar için yeni bir etkileşimli ekran koruyucu modudur. Cihaz bir yuvaya yerleştirildiğinde veya şarj cihazına takı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. Bu ekran, dokunulduğunda kapanan tamamen görsel, pasif bir ekran olabilir veya giriş etkinlikleri paketinin tamamına etkileşimli ve duyarlı olabilir. Hayalleriniz, uygulamanızın sürecinde çalışır ve görünümler, düzenler ve animasyonlar da dahil olmak üzere Android kullanıcı arayüzü araç setine tam erişim sahibidir. Böylece, animasyonlu duvar kağıtlarından 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
ile benzer olacak şekilde tasarlanmıştır. Hayalinizdeki kullanıcı arayüzünü belirtmek için onAttachedToWindow()
geri çağırma işlevi gibi bir pencere açıldıktan sonra herhangi bir noktada bir düzen kaynağı kimliğini veya View
öğesini setContentView()
öğesine iletin.
DreamService
sınıfı, temel Service
API'lerinin üzerinde onDreamingStarted()
, onDreamingStopped()
ve onDetachedFromWindow()
gibi diğer önemli yaşam döngüsü geri çağırma yöntemleri sağlar.
Uygulamanızdan 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 aktiviteyi başlatabilirsiniz. Kullanıcı 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. Ö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
konusunda dikkat etmeniz gereken bazı faydalı yöntemler de vardır:
setInteractive(boolean)
, rüyanın giriş etkinliklerini alıp almayacağını veya kullanıcı girişinde hemen çı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 veya siz de rüyayı durdurmak içinfinish()
yöntemini çağırabilirsiniz.- 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 yaklaştığını bildirmek için ekran kararır.
setScreenBright(true)
çağrıldığında ekranı her zamanki parlaklığında ayarlayabilirsiniz.
Daha fazla bilgi için DreamService
belgelerine 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çerikler göstermesine olanak tanıyor.
İkincil bir görüntülü reklam 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üntüsüne sunular için hızlıca erişmek amacıyla genellikle MediaRouter
kullanmanız gerekir.
Sununuzun varsayılan görünümünü almak için MediaRouter.getSelectedRoute()
numaralı telefonu arayıp bulun ve ROUTE_TYPE_LIVE_VIDEO
geçin. Bu işlem, video sunuları için sistemin 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()
yöntemini çağırın.
Ardından, Display
nesnesini Presentation
sınıfınız için bir kurucuya geçirerek sununuzu görüntüleyebilirsiniz. Sununuz şimdi
ikincil ekranda görünür.
Çalışma zamanında yeni bir ekran bağlandığında algılamak için MediaRouter.SimpleCallback
örneği oluşturun. Bu örnekte, yeni bir sunu ekranı bağlandığında sistemin çağıracağı onRoutePresentationDisplayChanged()
geri çağırma yöntemini uygulayın. Ardından, MediaRouter.SimpleCallback
rotasını ROUTE_TYPE_LIVE_VIDEO
rota türüyle birlikte MediaRouter.addCallback()
yöntemine ileterek kaydedin. onRoutePresentationDisplayChanged()
numaralı telefon arandığında, 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çinde 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 kaynaklar istemeniz gerekirse ekrana karşılık gelen Resources
nesnesini almak için getContext()
.getResources()
yöntemini çağırın. Böylece, ikincil ekranın ekran boyutu ve yoğunluğuna en uygun olan uygun kaynakları uygulamanızdan erişilebilir.
Daha fazla bilgi ve bazı kod örnekleri için Presentation
sınıfı belgelerine 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 AppWidgetProviderInfo
değerini belirten XML dosyanıza android:widgetCategory
özelliğini ekleyin. Bu özellik iki değeri destekler: home_screen
ve keyguard
. Varsayılan olarak, kullanıcıların uygulama widget'ınızı Ana ekrana ekleyebilmesi için özellik home_screen
değerine ayarlanır. 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, android:initialLayout
ile aynı şekilde çalışır. Çünkü uygulama widget'ınız başlatılana ve düzeni güncelleyebilene kadar hemen görünebilecek bir düzen sağlar.
Kilit ekranında uygulama widget'ınızı uygun şekilde boyutlandırmak dahil, kilit ekranı için uygulama widget'ları oluşturma hakkında daha fazla bilgi edinmek üzere Uygulama Widget'ları kılavuzuna bakın.
Birden Çok 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 grubu, 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 hiçbir şey yoktur. Bir cihazda kaç kullanıcı olmasından bağımsız olarak, uygulamanızın belirli bir kullanıcı için kaydettiği veriler, diğer kullanıcılar için kaydettiği verilerden ayrı tutulur. Sistem hangi kullanıcı verilerinin, uygulamanızın çalıştığı kullanıcı sürecine ait olduğunu izler ve uygulamanızın yalnızca söz konusu kullanıcının verilerine erişmesine izin verir ve diğer kullanıcıların verilerine erişilmesine izin vermez.
Çok kullanıcılı bir ortamda veri kaydetme
Uygulamanız kullanıcı tercihlerini kaydettiğinde, bir veritabanı oluşturduğunda veya kullanıcının dahili ya da harici depolama alanına bir dosya yazdığında, bu verilere yalnızca söz konusu kullanıcı olarak çalışırken erişilebilir.
Uygulamanızın çok kullanıcılı bir ortamda doğru şekilde davrandığından emin olmak için sabit kodlu yolları kullanarak dahili uygulama dizininize veya harici depolama konumunuza başvurmaktan kaçının. Bunun yerine her zaman uygun API'leri kullanın:
- Dahili depolama alanına erişmek için
getFilesDir()
,getCacheDir()
veyaopenFileOutput()
ürününü kullanın. - Harici depolama alanına erişmek 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, verilere farklı bir kullanıcı olarak çalışırken erişilemez. Uygulamanız açısından her kullanıcı tamamen ayrı 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şlatıldığında yeni bir UUID
oluşturduğunuzda, 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 edeceğinizden emin olursunuz. 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 (kablosuz ağ MAC adresi veya SERIAL
numarası gibi) isterse her kullanıcı için aynı değeri sağlar. Çünkü bu tanımlayıcılar kullanıcıya değil donanıma bağlıdır. Uygulama Yüklemelerini Tanımlama blog yayınında ele aldığımız üzere, 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 olmaları nedeniyle Settings.Secure
ayarlarına benzer, ancak cihazdaki tüm kullanıcı alanlarında küresel olarak geçerlidir.
Mevcut bazı ayarlar Settings.System
veya Settings.Secure
konumundan buraya taşındı. Uygulamanız şu anda Settings.System
politikasında daha önce tanımlanan ayarlarda (ör. AIRPLANE_MODE_ON
) 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şınmışsa bu değişikliğin artık çalışmayacağını bilmeniz gerekir. 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, bunu yapmaya çalışmak sessizce başarısız olur ve sistem, uygulamanızı Android 4.2 veya sonraki bir sürümde çalıştırırken sistem günlüğüne bir uyarı yazar.
RTL Düzeni Desteği
Android artık sağdan sola (RTL) kullanıcı arayüzleri ve okuma yönü kullanan Arapça ve İbranice gibi dilleri desteklemek için düzen yönünü incelikle dönüştüren kullanıcı arayüzleri oluşturmanıza olanak tanıyan çeşitli API'ler sunmaktadır.
Uygulamanızda RTL düzenlerini desteklemeye başlamak için manifest dosyanızdaki <application>
öğesine android:supportsRtl
özelliğini ve “true"
olarak ayarlayın. Bu özellik etkinleştirildikten sonra 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, solda ise işlem düğmeleri görünür. Çerçeve tarafından sağlanan View
sınıflarıyla oluşturduğunuz düzenler de tersine çevrilir.
Uygulamanızın RTL düzeniyle görüntülendiğinde görünümünü daha fazla optimize etmeniz gerekiyorsa iki temel optimizasyon düzeyi vardır:
- Sola ve sağa yönelik düzen özelliklerini, başlangıç ve bitiş odaklı düzen özelliklerine dönüştürün.
Örneğin,
android:layout_marginLeft
yerineandroid:layout_marginStart
veandroid:layout_marginRight
yerineandroid:layout_marginEnd
kullanın.RelativeLayout
sınıfı, sol/sağ konumlarını değiştirmek için karşılık gelen düzen özelliklerini de sağlar. Örneğin,android:layout_alignParentLeft
yerineandroid:layout_alignParentStart
veandroid:layout_toLeftOf
yerineandroid:layout_toStartOf
öğesini kullanabilirsiniz. - RTL düzenleri 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/
'e ve RTL için optimize edilmiş düzenlerinizires/layout-ldrtl/
'a kaydedebilirsiniz.ldrtl
niteleyicisi, çekilebilir kaynaklar için idealdir. Bu sayede, okuma yönüne karşılık gelen yönde grafikler sağlayabilirsiniz.
Geçerli düzen yönünü sorgulamak amacıyla özel görünümler için ve Configuration
içinde doğru davranışları uygulayabilmeniz için View
sınıfında olduğu gibi, çerçeve genelinde RTL düzenlerini destekleyen çeşitli API'ler mevcuttur.
Not: SQlite kullanıyorsanız ve "yalnızca sayı" şeklinde tablo veya sütun adlarınız varsa dikkatli olun: Cihazınız Arapça yerel ayara ayarlanmışsa String.format(String, Object...)
kullanımı, sayıların Arapça karşılığına dönüştürülmesine yol açabilecek hatalara neden olabilir.
Sayıların ASCII olarak korunmasını sağlamak 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ın içine parçalar 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 hızlıca kaydırıp ekran alanının büyük bir kısmını 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, parçayı eklemek istediğiniz Fragment
üzerinde getChildFragmentManager()
çağrısı yapmanız yeterlidir. Bu, parça işlemleri oluşturmak için üst düzey etkinlikte normalde kullandığınız gibi bir FragmentManager
döndürür. Örneğin, mevcut bir Fragment
sınıfının içinden parça ekleyen bazı kod aşağıda verilmiştir:
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()
yöntemini çağırarak üst parçaya 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çeren bir düzeni, parçaya dönüştüremezsiniz. İç içe yerleştirilmiş parçalar yalnızca dinamik bir şekilde parçaya eklendiğinde desteklenir.
Renderscript
Renderscript hesaplama işlevi aşağıdaki özelliklerle geliştirildi:
- Komut dosyası yapıları
Renderscript'in, sizin için yaygın olarak kullanılan işlemleri uygulayan yerleşik komut dosyası iç yapısını kullanabilirsiniz. Örneğin:
Blends
Blur
Color matrix
3x3 convolve
5x5 convolve
Per-channel lookup table
Converting an Android YUV buffer to RGB
Bir komut dosyası içsel yapısını kullanmak için komut dosyasının bir örneğini oluşturmak üzere her içsel unsurun statik
create()
yöntemini çağırın. Daha sonra gerekli girişleri ve seçenekleri ayarlamak için her bir komut dosyasının dahiliset()
yöntemlerini çağırırsınız. Son olarak, komut dosyasını çalıştırmak içinforEach()
yöntemini çağırın.- Komut Dosyası Grupları
-
ScriptGroup
'ler, ilgili Renderscript komut dosyalarını zincir şeklinde zincirlemenize 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çinScriptGroup.Builder
kullanın. Tüm komut dosyalarını ekledikten sonraaddConnection()
yöntemini çağırarak komut dosyaları arasında bağlantılar oluşturun. Bağlantıları eklemeyi tamamladığınızda komut dosyası grubunu oluşturmak içincreate()
yöntemini çağırın. Komut dosyası grubunu yürütmeden önce,setInput(Script.KernelID, Allocation)
yöntemiyle çalışacakAllocation
girdisini ve başlangıç komut dosyasını belirtin. Ardından, sonucun yazılacağıAllocation
çıkışını vesetOutput()
ile çalışacak son komut dosyasını sağlayın. Son olarak, komut dosyası grubunu çalıştırmak içinexecute()
yöntemini çağırın. - Filterscript
-
Filtre komut dosyası, 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 sıfıra kaydırmaya ve sıfıra doğru yuvarlamaya olanak tanır. Ayrıca, Filtrescript komut dosyalarınız 32 bit yerleşik türleri kullanmamalı ve filterscript,root()
işlevinin varsayılan imzasının tanımladığı işaretçileri desteklemediğinden__attribute__((kernel))
özelliğini kullanarak özel bir kök işlevi belirtmelidir.
Not: Filtre komut dosyası desteği platformda bulunsa da geliştirici desteği, SDK Araçları Sürüm 21.0.1'de olacaktır.
Android 4.2'deki tüm API değişikliklerinin ayrıntılı görünümü için API Farkları Raporu'na bakın.