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ı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 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 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 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ızSettings.System
bölgesinde tanımlanan veSettings.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
veandroid:minSdkVersion
değeriniz 17'den düşük olsa bile uygulamanız, Android 4.2 ve sonraki bir sürümde çalışırkenSettings.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ışırkenWebView
ü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çinfinish()
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:
- 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()
ürününü 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:
- 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
yerineandroid:layout_marginStart
veandroid:layout_marginRight
yerineandroid: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
yerineandroid:layout_alignParentLeft
veandroid:layout_toStartOf
öğesini değiştirmek içinandroid:layout_alignParentStart
gibi özellikler sağlanır. - 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üzenlerinizires/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:
Blends
Blur
Color matrix
3x3 convolve
5x5 convolve
Per-channel lookup table
Converting an Android YUV buffer to RGB
İç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 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
, 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 birScriptGroup.Builder
kullanın. Tüm komut dosyalarını ekledikten sonraaddConnection()
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çincreate()
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ı vesetOutput()
ile çalışacak son komut dosyasını sağlayın. Son olarak, komut dosyası grubunu çalıştırmak içinexecute()
ç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.