Android 15, geliştiriciler için harika özellikler ve API'ler sunuyor. Aşağıdaki bölümlerde, ilgili API'leri kullanmaya başlamanıza yardımcı olmak için bu özellikler özetlenmiştir.
Eklenen, değiştirilen ve kaldırılan API'lerin ayrıntılı listesi için API farklılıkları raporunu inceleyin. Eklenen API'lerle ilgili ayrıntılar için Android API referansını ziyaret edin. Android 15 için API düzeyi 35'te eklenen API'leri bulun. Platform değişikliklerinin uygulamalarınızı etkileyebileceği alanlar hakkında bilgi edinmek için Android 15'i hedefleyen uygulamalarda ve tüm uygulamalarda Android 15 davranış değişikliklerini inceleyin.
Kamera ve medya içerikleri
Android 15, kamera ve medya deneyimini iyileştiren, içerik üreticilerin vizyonlarını Android'de hayata geçirmelerini desteklemek için araçlara ve donanımlara erişmenizi sağlayan çeşitli özellikler içerir.
Android'deki medya ve kamera için en yeni özellikler ve geliştirici çözümleri hakkında daha fazla bilgi edinmek istiyorsanız Google I/O'daki Modern Android medya ve kamera deneyimleri oluşturma başlıklı konuşmayı izleyin.
Düşük Işık Güçlendirmesi
Android 15, hem Camera 2 hem de gece modu kamera uzantısında kullanılabilen bir otomatik pozlama modu olan düşük ışık güçlendirmesi özelliğini kullanıma sunar. Düşük Işık Güçlendirmesi, düşük ışık koşullarında önizleme akışının pozlamasını ayarlar. Gece modu, tek bir gelişmiş resim oluşturmak için seri çekim fotoğrafları birleştirdiğinden bu, gece modu kamera uzantısının hareketsiz resim oluşturma yönteminden farklıdır. Gece modu, hareketsiz resim oluşturmak için çok iyi çalışır ancak sürekli kare akışı oluşturamaz. Düşük Işık Geliştirme özelliği ise bunu yapabilir. Bu nedenle, Düşük Işıkta Geliştirme özelliği aşağıdaki gibi kamera özelliklerini etkinleştirir:
- Kullanıcıların düşük ışıkta çektiği fotoğrafları daha iyi kadraja alabilmesi için gelişmiş resim önizlemesi sunma
- Düşük ışıkta QR kodu tarama
Düşük ışık güçlendirmesini etkinleştirirseniz bu özellik, ışık seviyesi düşük olduğunda otomatik olarak açılır ve ışık seviyesi arttığında kapanır.
Uygulamalar, düşük ışık koşullarında önizleme akışını kaydederek videoları aydınlatabilir.
Daha fazla bilgi için Düşük Işıkta Güçlendirme başlıklı makaleyi inceleyin.
Uygulama içi kamera kontrolleri
Android 15, desteklenen cihazlarda kamera donanımı ve algoritmaları üzerinde daha fazla kontrol için bir uzantı ekler:
- Görüntü çekerken hem
SINGLEhem deTORCHmodlarında flaşın yoğunluğunu hassas bir şekilde kontrol etmenizi sağlayan gelişmiş flaş gücü ayarları.
HDR headroom kontrolü
Android 15, temel cihazın özelliklerine ve panelin bit derinliğine uygun HDR yedek bandını seçer. Tek bir HDR küçük resmi gösteren bir mesajlaşma uygulaması gibi çok fazla SDR içeriği bulunan sayfalarda bu davranış, SDR içeriğinin algılanan parlaklığını olumsuz yönde etkileyebilir. Android 15, SDR ve HDR içerik arasında denge kurmak için setDesiredHdrHeadroom ile HDR marjını kontrol etmenize olanak tanır.
Ses yüksekliği kontrolü

Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.
To enable this feature, you need to ensure loudness metadata is available in
your AAC content and enable the platform feature in your app. For this, you
instantiate a LoudnessCodecController object by
calling its create factory method with the audio
session ID from the associated AudioTrack; this
automatically starts applying audio updates. You can pass an
OnLoudnessCodecUpdateListener to modify or filter
loudness parameters before they are applied on the
MediaCodec.
// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
.setSessionId(sessionId)
.build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
val lcController = LoudnessCodecController.create(mSessionId)
// Starts applying audio updates for each added MediaCodec
}
AndroidX media3 ExoPlayer will also be updated to use the
LoudnessCodecController APIs for a seamless app integration.
Sanal MIDI 2.0 cihazları
Android 13'e, Universal MIDI Paketleri (UMP) kullanarak iletişim kuran USB üzerinden MIDI 2.0 cihazlarına bağlanma desteği eklendi. Android 15, UMP desteğini sanal MIDI uygulamalarına genişleterek beste uygulamalarının sentezleyici uygulamalarını USB MIDI 2.0 cihazı gibi sanal MIDI 2.0 cihazı olarak kontrol etmesine olanak tanır.
Daha verimli AV1 yazılım kod çözme
VideoLAN'ın popüler AV1 yazılım kod çözücüsü dav1d, donanımda AV1 kod çözmeyi desteklemeyen Android cihazlarda kullanılabilir. Eski AV1 yazılım kod çözücüsüne kıyasla 3 kata kadar daha yüksek performans gösteren dav1d, bazı düşük ve orta sınıf cihazlar da dahil olmak üzere daha fazla kullanıcının HD AV1 oynatmasını sağlar.
Uygulamanızın, dav1d'yi adıyla çağırarak "c2.android.av1-dav1d.decoder" kullanmayı etkinleştirmesi gerekir. dav1d, sonraki bir güncellemede varsayılan AV1 yazılım kod çözücüsü olacak. Bu destek standartlaştırılır ve Google Play sistem güncellemeleri alan Android 11 cihazlara geri bağlanır.
Geliştirici üretkenliği ve araçları
Üretkenliğinizi artırmaya yönelik çalışmalarımızın çoğu Android Studio, Jetpack Compose ve Android Jetpack kitaplıkları gibi araçlara odaklanırken platformda vizyonunuzu daha kolay gerçekleştirmenize yardımcı olacak yollar aramaya devam ediyoruz.
OpenJDK 17 güncellemeleri
Android 15, Android'in temel kitaplıklarını en son OpenJDK LTS sürümlerindeki özelliklerle uyumlu hale getirmek için yenileme çalışmalarına devam ediyor.
Aşağıdaki temel özellikler ve iyileştirmeler bu sürüme dahil edilmiştir:
- NIO arabellekleriyle ilgili yaşam kalitesi iyileştirmeleri
- Yayınlar
- Ek
mathvestrictmathyöntemleri - Sıralı
collection,mapvesetiçerenutilpaket güncellemeleri Deflater'teByteBufferdesteğiX500PrivateCredentialve güvenlik anahtarı güncellemeleri gibi güvenlik güncellemeleri
Bu API'ler, Google Play sistem güncellemeleri aracılığıyla Android 12 (API düzeyi 31) ve sonraki sürümleri çalıştıran bir milyardan fazla cihazda güncellenir. Böylece en son programlama özelliklerini hedefleyebilirsiniz.
PDF iyileştirmeleri
Android 15 includes substantial improvements to the PdfRenderer
APIs. Apps can incorporate advanced features such as rendering
password-protected files, annotations, form editing,
searching, and selection with copy. Linearized PDF
optimizations are supported to speed local PDF viewing and reduce resource use.
The Jetpack PDF library uses these APIs to simplify adding PDF
viewing capabilities to your app.
The PdfRenderer has been moved to a module that can be updated using Google
Play system updates independent of the platform release, and we're supporting
these changes back to Android 11 (API level 30) by creating a compatible
pre-Android 15 version of the API surface, called
PdfRendererPreV.
Otomatik dil geçişiyle ilgili iyileştirmeler
Android 14, diller arasında otomatik geçişle birlikte cihaz üzerinde sesli olarak çok dilli tanıma özelliğini ekledi. Ancak bu özellik, özellikle iki ifade arasında daha az duraksama olduğunda kelimelerin atlanmasına neden olabilir. Android 15, uygulamaların bu geçişi kullanım alanlarına göre ayarlamalarına yardımcı olmak için ek kontroller ekler.
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS, otomatik geçişi ses oturumunun başına sınırlar. EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES ise belirli sayıda geçişten sonra dil geçişini devre dışı bırakır. Bu seçenekler, oturum sırasında otomatik olarak algılanması gereken tek bir dilin konuşulacağını düşünüyorsanız özellikle kullanışlıdır.
Geliştirilmiş OpenType Variable Font API
Android 15 improves the usability of the OpenType variable font. You can create
a FontFamily instance from a variable font without specifying weight axes
with the buildVariableFamily API. The text renderer overrides the value
of wght axis to match the displaying text.
Using the API simplifies the code for creating a Typeface considerably:
Kotlin
val newTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build()
Java
Typeface newTypeface = Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build();
Previously, to create the same Typeface, you would need much more code:
Kotlin
val oldTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build()) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ).build() ).build()
Java
Typeface oldTypeface = new Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ) .build() ).build();
Here's an example of how a Typeface created with both the old and new APIs
renders:
In this example, the Typeface created with the old API doesn't have the
capability to create accurate font weights for the 350, 450, 550 and 650
Font instances, so the renderer falls back to the closest weight. So in
this case, 300 is rendered instead of 350, 400 is rendered instead of 450, and
so on. By contrast, the Typeface created with the new APIs dynamically creates
a Font instance for a given weight, so accurate weights are rendered for 350,
450, 550, and 650 as well.
Ayrıntılı satır sonu kontrolleri
Android 15'ten itibaren, TextView ve temel satır ayırıcı, okunabilirliği artırmak için metnin belirli bir bölümünü aynı satırda koruyabilir. Dize kaynaklarında <nobreak> etiketini veya createNoBreakSpan kullanarak bu satır sonu özelleştirmesinden yararlanabilirsiniz. Benzer şekilde, <nohyphen> etiketini veya createNoHyphenationSpan kullanarak kelimeleri kısaltmalardan koruyabilirsiniz.
Örneğin, aşağıdaki dize kaynağı satır sonu içermez ve "Pixel 8 Pro" metninin istenmeyen bir yerde kesildiği şekilde oluşturulur:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
Buna karşılık bu dize kaynağı, "Pixel 8 Pro" ifadesini sarmalayan ve satır aralarını önleyen <nobreak> etiketini içerir:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
Bu dizelerin oluşturulma biçimleri arasındaki fark aşağıdaki resimlerde gösterilmektedir:
<nobreak> etiketi kullanılarak sarmalandığı bir metin satırı için düzen.
<nobreak> etiketi kullanılarak sarıldığı aynı metin satırının düzeni.Uygulama arşivleme
Android and Google Play announced support for app archiving last year, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.
Apps with the REQUEST_DELETE_PACKAGES permission can call the
PackageInstaller requestArchive method to request archiving an
installed app package, which removes the APK and any cached files, but persists
user data. Archived apps are returned as displayable apps through the
LauncherApps APIs; users will see a UI treatment to highlight that those
apps are archived. If a user taps on an archived app, the responsible installer
will get a request to unarchive it, and the restoration process can be
monitored by the ACTION_PACKAGE_ADDED broadcast.
Geliştirici seçeneklerini kullanarak bir cihazda 16 KB modunu etkinleştirme
Cihazı 16 KB modunda başlatmak için 16 KB sayfa boyutuyla başlat geliştirici seçeneğini etkinleştirin.
Android 15'in QPR sürümlerinde, cihazı 16 KB modunda başlatmak ve cihaz üzerinde test yapmak için belirli cihazlarda bulunan geliştirici seçeneğini kullanabilirsiniz. Geliştirici seçeneğini kullanmadan önce Ayarlar > Sistem > Yazılım güncellemeleri'ne gidip varsa güncellemeleri uygulayın.
Bu geliştirici seçeneği aşağıdaki cihazlarda kullanılabilir:
Pixel 8 ve 8 Pro (Android 15 QPR1 veya sonraki sürümler)
Pixel 8a (Android 15 QPR1 veya sonraki sürümlerin yüklü olduğu)
Pixel 9, 9 Pro ve 9 Pro XL (Android 15 QPR2 Beta 2 veya sonraki sürümlerle)
Grafik
Android 15, ANGLE ve Canvas grafik sistemine eklemeler de dahil olmak üzere en yeni grafik iyileştirmelerini sunar.
Android'in GPU erişimini modernleştirme
Android donanımı, çekirdek işletim sisteminin tek bir CPU'da çalıştığı ve GPU'lara sabit işlevli ardışık düzenlere dayalı API'ler kullanılarak erişildiği ilk günlerden bu yana oldukça gelişti. Vulkan® grafik API'si, Android 7.0 (API seviyesi 24) sürümünden beri NDK'da mevcuttur. Modern GPU donanımlarını daha iyi yansıtan, birden fazla CPU çekirdeğini desteklemek için daha iyi ölçeklendirilen ve CPU sürücüsünün ek yükünü azaltan bu API, uygulama performansını iyileştirir. Vulkan, tüm modern oyun motorları tarafından desteklenir.
Vulkan, Android'in GPU için tercih ettiği arayüzdür. Bu nedenle Android 15, Vulkan'ın üzerinde OpenGL® ES çalıştırmak için isteğe bağlı bir katman olarak ANGLE'ı içerir. ANGLE'a geçiş, Android OpenGL uygulamasını standartlaştırarak daha iyi uyumluluk ve bazı durumlarda daha iyi performans sağlar. Android 15'te Ayarlar -> Sistem -> Geliştirici Seçenekleri -> Deneysel: ANGLE'ı etkinleştir geliştirici seçeneğini etkinleştirerek OpenGL ES uygulamanızın kararlılığını ve performansını ANGLE ile test edebilirsiniz.
Vulkan'da Android ANGLE yol haritası
GPU yığınımızı basitleştirme kapsamında, bundan sonra daha fazla yeni cihazda GL sistem sürücüsü olarak ANGLE'ı kullanıma sunacağız. OpenGL/ES'in gelecekte yalnızca ANGLE üzerinden kullanılmasını bekliyoruz. Bununla birlikte, tüm cihazlarda OpenGL ES desteğini sürdürmeyi planlıyoruz.
Sıradaki önerilen adımlar
OpenGL ES için ANGLE sürücüsünü seçmek ve uygulamanızı test etmek üzere geliştirici seçeneklerini kullanın. Yeni projelerde C/C++ için Vulkan'ı kullanmanızı önemle tavsiye ederiz.
Canvas'ta yapılan iyileştirmeler
Android 15, Android'in Canvas grafik sistemini modernleştirme çalışmalarımıza ek özellikler ekliyor:
Matrix44, tuvali 3D olarak değiştirmek istediğinizde kullanılması gereken koordinatları dönüştürmek için 4x4 matris sağlar.clipShader, mevcut klibi belirtilen gölgelendiriciyle kesiştirirkenclipOutShader, klibi mevcut klip ile gölgelendiricinin farkına ayarlar. Her ikisi de gölgelendiriciyi bir alfa maskesi olarak işler. Bu, karmaşık şekillerin verimli bir şekilde çizilmesini destekler.
Performans ve pil
Android, uygulamalarınızın performansını ve kalitesini artırmanıza yardımcı olmaya odaklanmaya devam ediyor. Android 15, uygulamanızdaki görevlerin daha verimli bir şekilde yürütülmesine, uygulama performansının optimize edilmesine ve uygulamalarınızla ilgili analizler toplanmasına yardımcı olan API'ler sunar.
Pil verimliliğiyle ilgili en iyi uygulamalar, ağ ve güç kullanımında hata ayıklama ve Android 15 ile Android'in son sürümlerinde arka plan çalışmalarının pil verimliliğini nasıl artırdığımız hakkında ayrıntılı bilgi için Google I/O'daki Android'de arka plan çalışmalarının pil verimliliğini artırma başlıklı konuşmayı izleyin.
ApplicationStartInfo API
Android'in önceki sürümlerinde uygulama başlatma biraz gizemli bir konuydu. Uygulamanızın sıfırdan, hazır durumda veya çalışır durumda başlatılıp başlatılmadığını belirlemek zordu. Ayrıca, uygulamanızın çeşitli başlatma aşamalarında (ör. işlemin ayrılması, onCreate çağrılması, ilk karenin çizilmesi) ne kadar süre harcadığını bilmek de zordu. Application sınıfınız oluşturulduğunda, uygulamanın bir yayından, içerik sağlayıcıdan, işten, yedekten, önyüklemenin tamamlanmasından, alarmdan veya Activity'ten başlatılıp başlatılmadığını bilemezdiniz.
Android 15'teki ApplicationStartInfo API'si tüm bunları ve daha fazlasını sunar. Zamanlama verilerini tek bir yerde toplamayı kolaylaştırmak için akışa kendi zaman damgalarınızı eklemeyi bile seçebilirsiniz. Metrikleri toplamanın yanı sıra, uygulamanızın başlatılmasını doğrudan optimize etmek için ApplicationStartInfo'ü kullanabilirsiniz. Örneğin, uygulamanız bir yayın nedeniyle başlatılırken Application sınıfınızda kullanıcı arayüzüyle ilgili kitaplıkların maliyetli şekilde oluşturulmasını ortadan kaldırabilirsiniz.
Ayrıntılı uygulama boyutu bilgileri
Android 8.0 (API seviyesi 26) sürümünden itibaren Android, bir uygulamanın yüklü boyutunu tek bir bayt sayısı olarak özetleyen StorageStats.getAppBytes API'yi içermektedir. Bu sayı, APK boyutunun, APK'dan ayıklanan dosyaların boyutunun ve cihazda oluşturulan dosyaların (ör. önceden derlenmiş kod) toplamıdır. Bu sayı, uygulamanızın depolama alanını nasıl kullandığı konusunda çok yararlı değildir.
Android 15'te, APK dosya bölme işlemleri, AOT ve hızlandırmayla ilgili kod, dex meta verileri, kitaplıklar ve rehberli profiller dahil olmak üzere uygulamanızın tüm bu alanı nasıl kullandığı hakkında bilgi edinmenizi sağlayan StorageStats.getAppBytesByDataType([type]) API eklendi.
Uygulama tarafından yönetilen profilleme
Android 15, uygulamanızdan yığın dökümleri, yığın profilleri, yığın örnekleme ve daha fazlası gibi profil oluşturma bilgilerini toplamanıza olanak tanıyan ProfilingManager sınıfını içerir. Uygulamanızın dosya dizinine yayınlanan çıkış dosyasını tanımlamak için sağlanan bir etiketle uygulamanıza geri çağırma sağlar. API, performans üzerindeki etkiyi en aza indirmek için hız sınırlaması yapar.
Uygulamanızda profil oluşturma istekleri oluşturmayı basitleştirmek için Core 1.15.0-rc01 veya sonraki sürümlerde bulunan ilgili Profiling AndroidX API'sini kullanmanızı öneririz.
SQLite veritabanı iyileştirmeleri
Android 15, temel SQLite motorundaki gelişmiş özellikleri sunan ve uygulamalarda ortaya çıkabilecek belirli performans sorunlarını hedefleyen SQLite API'lerini kullanıma sunar. Bu API'ler, SQLite'ın sürüm güncellemesine dahil edilir 3.44.3 belgesini inceleyin.
Geliştiriciler, özellikle büyük veritabanlarıyla çalışırken veya gecikmeye duyarlı sorgular çalıştırırken SQLite veritabanlarından en iyi şekilde yararlanmak için SQLite performansıyla ilgili en iyi uygulamalara göz atmalıdır.
- Salt okunur ertelenen işlemler: Salt okunur (yazma ifadeleri içermeyen) işlemler gönderirken salt okunur
DEFERREDişlemleri göndermek içinbeginTransactionReadOnly()vebeginTransactionWithListenerReadOnly(SQLiteTransactionListener)kullanın. Bu tür işlemler, olarak ayarlayabilir ve veritabanı WAL modundaysa birbirlerineIMMEDIATEveyaEXCLUSIVEişlemiyle eş zamanlı olarak çalışır. - Satır sayıları ve kimlikler: Değiştirilen öğelerin sayısını almak için API'ler eklenmiştir
satır kimliğini veya son eklenen satır kimliğini girin.
getLastChangedRowCount(), geçerli işlemdeki en son SQL ifadesi tarafından eklenen, güncellenen veya silinen satır sayısını döndürür.getTotalChangedRowCount()ise geçerli bağlantıdaki sayıyı döndürür.getLastInsertRowId(), son satırınrowiddeğerini döndürür yeni bir bağlantı eklemeniz gerekir. - Ham ifadeler: Kolaylık sağlayan sarmalayıcıları ve bunların neden olabileceği ek işlem maliyetlerini atlayarak ham SQlite ifadesi gönderin.
Android Dinamik Performans Çerçevesi güncellemeleri
Android 15, oyunların ve performans açısından yoğun uygulamaların Android cihazların güç ve termal sistemleriyle daha doğrudan etkileşim kurmasına olanak tanıyan bir API grubu olan Android Dinamik Performans Çerçevesi'ne (ADPF) yaptığımız yatırımı sürdürüyor. Android 15, desteklenen cihazlarda ADPF özelliklerini ekler:
- İpucu oturumları için güç verimliliği modu. Bu mod, ilişkili ileti dizilerinin performans yerine güç tasarrufunu tercih etmesi gerektiğini belirtir. Uzun süreli arka plan iş yükleri için idealdir.
- İpucu oturumlarında hem GPU hem de CPU çalışma süreleri raporlanabilir. Bu sayede sistem, iş yükü taleplerini en iyi şekilde karşılamak için CPU ve GPU frekanslarını birlikte ayarlayabilir.
- Boşluk tahminine dayalı olası termal azaltma durumunu yorumlamak için termal boşluk eşikleri.
ADPF'yi uygulama ve oyunlarınızda nasıl kullanacağınız hakkında daha fazla bilgi edinmek için dokümanlara göz atın.
Gizlilik
Android 15, uygulama geliştiricilerin kullanıcı gizliliğini korumasına yardımcı olan çeşitli özellikler içerir.
Ekran kaydı algılama
Android 15 adds support for apps to detect that they are being recorded. A callback is invoked whenever the app transitions between being visible or invisible within a screen recording. An app is considered visible if activities owned by the registering process's UID are being recorded. This way, if your app is performing a sensitive operation, you can inform the user that they're being recorded.
val mCallback = Consumer<Int> { state ->
if (state == SCREEN_RECORDING_STATE_VISIBLE) {
// We're being recorded
} else {
// We're not being recorded
}
}
override fun onStart() {
super.onStart()
val initialState =
windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
mCallback.accept(initialState)
}
override fun onStop() {
super.onStop()
windowManager.removeScreenRecordingCallback(mCallback)
}
Genişletilmiş IntentFilter özellikleri
Android 15, URL sorgu parametreleri, URL parçaları ve engelleme veya hariç tutma kuralları dahil olmak üzere her biri karşılanması gereken bir Intent eşleme kuralı grubu oluşturan bir UriRelativeFilter nesnesi grubu içeren UriRelativeFilterGroup aracılığıyla daha hassas Intent çözümü destekler.
Bu kurallar, AndroidManifest XML dosyasında <uri-relative-filter-group> etiketiyle tanımlanabilir. Bu etiket isteğe bağlı olarak android:allow etiketi içerebilir. Bu etiketler, mevcut veri etiketi özelliklerinin yanı sıra android:query ve android:fragment özelliklerini kullanan <data> etiketleri içerebilir.
AndroidManifest söz dizimi örneğini aşağıda bulabilirsiniz:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="astore.com" />
<uri-relative-filter-group>
<data android:pathPrefix="/auth" />
<data android:query="region=na" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:query="mobileoptout=true" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:fragmentPrefix="faq" />
</uri-relative-filter-group>
</intent-filter>
Özel alan
Özel alan, kullanıcıların cihazda ayrı bir alan oluşturmalarını sağlayarak hassas uygulamaları, ek bir kimlik doğrulama katmanıyla meraklı gözlerden korur. Özel alan ayrı bir kullanıcı profili kullanır. Kullanıcı, özel alan için cihaz kilidi veya ayrı bir kilit faktörü kullanmayı seçebilir.
Özel alandaki uygulamalar, Launcher'daki ayrı bir kapsayıcıda gösterilir ve özel alan kilitlendiğinde son kullanılanlar görünümü, bildirimler, ayarlar ve diğer uygulamalardan gizlenir. Kullanıcı tarafından oluşturulup indirilen içerikler (ör. medya veya dosyalar) ve hesaplar, özel alan ile ana alan arasında ayrılır. Özel alanın kilidi açıldığında, sistem paylaşım sayfası ve fotoğraf seçici, uygulamalara alanlar arasındaki içeriklere erişim izni vermek için kullanılabilir.
Kullanıcılar mevcut uygulamaları ve verilerini özel alana taşıyamaz. Bunun yerine, kullanıcılar tercih ettikleri uygulama mağazasını kullanarak uygulama yüklemek için özel alanda bir yükleme seçeneği belirler. Özel alandaki uygulamalar, ana alandaki uygulamalardan ayrı kopyalar olarak yüklenir (aynı uygulamanın yeni kopyaları).
Kullanıcı özel alanı kilitlediğinde profil durdurulur. Profil durdurulduğunda özel alandaki uygulamalar artık etkin olmaz ve bildirim gösterme dahil olmak üzere ön plan veya arka plan etkinlikleri gerçekleştiremez.
Uygulamanızın beklendiği gibi çalıştığından emin olmak için uygulamanızı özel alanla test etmenizi öneririz. Özellikle uygulamanız aşağıdaki kategorilerden birine giriyorsa:
- Uygulamalarının ana profilde olmayan yüklü kopyalarının iş profilinde olduğunu varsaymaya çalışan iş profilleri için mantığı olan uygulamalar.
- Tıbbi uygulamalar
- Başlatıcı uygulamaları
- Uygulama mağazası uygulamaları
Seçili Fotoğraflara Erişim için en son kullanıcı seçimini sorgulama
Apps can now highlight only the most-recently-selected photos and videos when
partial access to media permissions is granted. This feature can improve
the user experience for apps that frequently request access to photos and
videos. To use this feature in your app, enable the
QUERY_ARG_LATEST_SELECTION_ONLY argument when querying MediaStore
through ContentResolver.
Kotlin
val externalContentUri = MediaStore.Files.getContentUri("external") val mediaColumns = arrayOf( FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE, ) val queryArgs = bundleOf( // Return only items from the last selection (selected photos access) QUERY_ARG_LATEST_SELECTION_ONLY to true, // Sort returned items chronologically based on when they were added to the device's storage QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC", QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?", QUERY_ARG_SQL_SELECTION_ARGS to arrayOf( FileColumns.MEDIA_TYPE_IMAGE.toString(), FileColumns.MEDIA_TYPE_VIDEO.toString() ) )
Java
Uri externalContentUri = MediaStore.Files.getContentUri("external"); String[] mediaColumns = { FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE }; Bundle queryArgs = new Bundle(); queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC"); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?"); queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] { String.valueOf(FileColumns.MEDIA_TYPE_IMAGE), String.valueOf(FileColumns.MEDIA_TYPE_VIDEO) });
Android'de Özel Korumalı Alan
Android 15, Android'deki Özel Korumalı Alan'ın en son sürümünü içeren en yeni Android reklam hizmetleri uzantılarını içerir. Bu ekleme, kullanıcı gizliliğini iyileştiren ve mobil uygulamalar için etkili, kişiselleştirilmiş reklam deneyimleri sağlayan teknolojiler geliştirme çalışmalarımızın bir parçasıdır. Başlamanıza yardımcı olmak için Android geliştirici önizlemesi ve beta programlarındaki Özel Korumalı Alan hakkında daha fazla bilgiyi Özel Korumalı Alan sayfamızda bulabilirsiniz.
Health Connect
Android 15 integrates the latest extensions around Health Connect by Android, a secure and centralized platform to manage and share app-collected health and fitness data. This update adds support for additional data types across fitness, nutrition, skin temperature, training plans, and more.
Skin temperature tracking allows users to store and share more accurate temperature data from a wearable or other tracking device.
Training plans are structured workout plans to help a user achieve their fitness goals. Training plans support includes a variety of completion and performance goals:
- Completion goals around calories burned, distance, duration, repetition, and steps.
- Performance goals around as many repetitions as possible (AMRAP), cadence, heart rate, power, perceived rate of exertion, and speed.
Learn more about the latest updates to Health Connect in Android in the Building adaptable experiences with Android Health talk from Google I/O.
Uygulama ekran paylaşımı
Android 15, uygulama ekranı paylaşımını destekler. Böylece kullanıcılar cihaz ekranının tamamını değil, yalnızca bir uygulama penceresini paylaşabilir veya kaydedebilir. İlk olarak Android 14 QPR2'de etkinleştirilen bu özellik, uygulamanızın uygulama ekranı paylaşımı deneyimini özelleştirmesine olanak tanıyan MediaProjection geri çağırma işlevlerini içerir. Android 14 (API düzeyi 34) veya sonraki sürümleri hedefleyen uygulamalarda her MediaProjection yakalama oturumu için kullanıcı izninin gerekli olduğunu unutmayın.
Kullanıcı deneyimi ve sistem arayüzü
Android 15, uygulama geliştiricilere ve kullanıcılara cihazlarını ihtiyaçlarına göre yapılandırma konusunda daha fazla kontrol ve esneklik sunar.
Android 15'teki en son iyileştirmeleri kullanarak uygulamanızın kullanıcı deneyimini nasıl iyileştireceğiniz hakkında daha fazla bilgi edinmek için Google I/O'daki Android uygulamanızın kullanıcı deneyimini iyileştirme başlıklı konuşmayı izleyin.
Generated Previews API ile daha zengin widget önizlemeleri
Before Android 15, the only way to provide widget picker previews was to specify a static image or layout resource. These previews often differ significantly from the look of the actual widget when it is placed on the home screen. Also, static resources can't be created with Jetpack Glance, so a Glance developer had to screenshot their widget or create an XML layout to have a widget preview.
Android 15 adds support for generated previews. This means that app widget
providers can generate RemoteViews to use as the picker preview, instead
of a static resource.
Push API
Apps can provide generated previews through a push API. Apps can provide
previews at any point in their lifecycle, and don't receive an explicit request
from the host to provide previews. Previews are persisted in AppWidgetService,
and hosts can request them on-demand. The following example loads an XML widget
layout resource and sets it as the preview:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
The expected flow is:
- At any time, the widget provider calls
setWidgetPreview. The provided previews are persisted inAppWidgetServicewith other provider info. setWidgetPreviewnotifies hosts of an updated preview through theAppWidgetHost.onProvidersChangedcallback. In response, the widget host reloads all of its provider information.- When displaying a widget preview, the host checks
AppWidgetProviderInfo.generatedPreviewCategories, and if the chosen category is available, callsAppWidgetManager.getWidgetPreviewto return the saved preview for this provider.
When to call setWidgetPreview
Because there is no callback to provide previews, apps can choose to send previews at any point when they are running. How often to update the preview depends on the widget's use case.
The following list describes the two main categories of preview use cases:
- Providers that show real data in their widget previews, such as personalized or recent information. These providers can set the preview once the user has signed in or has done initial configuration in their app. After this, they can set up a periodic task to update the previews at their chosen cadence. Examples of this type of widget could be a photo, calendar, weather or news widget.
- Providers that show static information in previews or quick-action widgets that don't display any data. These providers can set previews once, when the app first launches. Examples of this type of widget include a drive quick actions widget or chrome shortcuts widget.
Some providers might show static previews on the hub mode picker, but real information on the homescreen picker. These providers should follow the guidance for both of these use cases to set previews.
Pencere İçinde Pencere
Android 15 introduces changes in Picture-in-Picture (PiP) ensuring an even smoother transition when entering into PiP mode. This will be beneficial for apps having UI elements overlaid on top of their main UI, which goes into PiP.
Developers use the onPictureInPictureModeChanged callback to define logic
that toggles the visibility of the overlaid UI elements. This callback is
triggered when the PiP enter or exit animation is completed. Beginning in
Android 15, the PictureInPictureUiState class includes another state.
With this UI state, apps targeting Android 15 (API level 35) will observe the
Activity#onPictureInPictureUiStateChanged callback being invoked with
isTransitioningToPip() as soon as the PiP animation starts. There are
many UI elements that are not relevant for the app when it is in PiP mode, for
example views or layout that include information such as suggestions, upcoming
video, ratings, and titles. When the app goes to PiP mode, use the
onPictureInPictureUiStateChanged callback to hide these UI elements. When the
app goes to full screen mode from the PiP window, use
onPictureInPictureModeChanged callback to unhide these elements, as shown in
the following examples:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
This quick visibility toggle of irrelevant UI elements (for a PiP window) helps ensure a smoother and flicker-free PiP enter animation.
İyileştirilmiş Rahatsız Etmeyin kuralları
AutomaticZenRule lets apps customize Attention
Management (Do Not Disturb) rules and decide when to activate or deactivate
them. Android 15 greatly enhances these rules with the goal of improving the
user experience. The following enhancements are included:
- Adding types to
AutomaticZenRule, allowing the system to apply special treatment to some rules. - Adding an icon to
AutomaticZenRule, helping to make the modes be more recognizable. - Adding a
triggerDescriptionstring toAutomaticZenRulethat describes the conditions on which the rule should become active for the user. - Added
ZenDeviceEffectstoAutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.
Bildirim kanalları için VibrationEffect ayarlama
Android 15, gelen bildirimler için zengin titreşimlerin ayarlanmasını
NotificationChannel.setVibrationEffect kullanıyor. Bu nedenle,
Kullanıcılarınız farklı bildirim türlerini birbirinden
cihazlarına bakması gerekmez.
Medya projeksiyonu durum çubuğu çipi ve otomatik durdurma
Medya yansıtma, kullanıcıların gizli bilgilerini açığa çıkarabilir. Yeni ve belirgin bir durum çubuğu çipi, devam eden ekran projeksiyonlarından kullanıcıları haberdar eder. Kullanıcılar ekran aktarmayı, paylaşımı veya kaydı durdurmak için çipe dokunabilir. Ayrıca, daha sezgisel bir kullanıcı deneyimi için devam eden ekran projeksiyonları artık cihaz ekranı kilitlendiğinde otomatik olarak durdurulur.
Büyük ekranlar ve form faktörleri
Android 15, uygulamalarınızın büyük ekranlar, çevrilebilir ve katlanabilir cihazlar gibi Android'in form faktörlerinden en iyi şekilde yararlanmasını sağlar.
Büyük ekranda çoklu görev deneyimi artık daha iyi
Android 15, kullanıcıların büyük ekranlı cihazlarda çoklu görev gerçekleştirmeleri için daha iyi yöntemler sunar. Örneğin, Örneğin, kullanıcılar en sevdikleri bölünmüş ekran uygulama kombinasyonlarını hızlı bir şekilde görev çubuğuna dokunup sabitleyerek uygulamalar arasında kolayca geçiş yapabilirsiniz. Bunun anlamı şudur: uygulamanızın uyarlanabilir olmasını sağlamanın hiç olmadığı kadar önemli olduğunu unutmayın.
Google I/O, Uyarlanabilir Android'i Geliştirme uygulamalar ve Material 3 ile Kullanıcı Arayüzü Oluşturma uyarlanabilir kitaplık yardımcı olabilir ve dokümanlarımızda büyük müşteri memnuniyeti için ekranları için de geçerlidir.
Kapak ekranı desteği
Uygulamanız, Application veya Activity'inizin desteklenen katlanabilir cihazların küçük kapak ekranlarında gösterilmesine izin vermek için Android 15'in kullandığı bir mülkü tanımlayabilir. Bu ekranlar, Android uygulamalarının çalışabileceği uyumlu hedefler olarak kabul edilemeyecek kadar küçüktür ancak uygulamanız bunları desteklemeyi etkinleştirerek daha fazla yerde kullanılabilir hale gelebilir.
Bağlantı
Android 15, platformu güncelleyerek uygulamanızın iletişim ve kablosuz teknolojilerdeki en son gelişmelere erişmesini sağlar.
Uydu desteği
Android 15, uydu bağlantısı için platform desteğini genişletmeye ve Kullanıcı deneyiminin tutarlı bir uydu bağlantısı durumu.
Uygulamalar, bir cihazın uyduya ne zaman bağlandığını algılamak için ServiceState.isUsingNonTerrestrialNetwork() kullanabilir. Bu sayede, tam ağ hizmetlerinin neden kullanılamayabileceği konusunda daha fazla bilgi sahibi olabilirler. Ayrıca Android 15, mesaj göndermek ve almak için uydu bağlantısını kullanmak üzere SMS ve MMS uygulamalarının yanı sıra önceden yüklenmiş RCS uygulamaları için destek sunar.
Daha sorunsuz NFC deneyimleri
Android 15, Android'in güçlü NFC uygulama ekosistemini desteklemeye devam ederken temassız ödeme deneyimini daha akıcı ve güvenilir hale getirmek için çalışıyor. Desteklenen cihazlarda uygulamalar, NfcAdapter'den gözlem moduna girmesini isteyebilir. Bu modda cihaz, NFC okuyucuları dinler ancak yanıt vermez. Uygulamanın NFC hizmeti, işleme alınacak PollingFrame
nesneleri gönderir. PollingFrame nesneleri, NFC okuyucuyla ilk iletişimden önce kimlik doğrulama yapmak için kullanılabilir. Bu sayede, birçok durumda tek dokunuşla işlem yapılabilir.
Ayrıca uygulamalar, desteklenen cihazlarda bir filtre kaydedebilir. Böylece, anket döngüsü etkinliği hakkında bildirim alabilir ve NFC'den haberdar olan birden fazla uygulamayla sorunsuz şekilde çalışabilir.
Cüzdan rolü
Android 15, kullanıcının tercih ettiği cüzdan uygulamasıyla daha sıkı entegrasyon sağlayan bir Cüzdan rolü sunar. Bu rol, NFC'nin varsayılan temassız ödeme ayarının yerini alır. Kullanıcılar, Ayarlar > Uygulamalar > Varsayılan Uygulamalar'a giderek Cüzdan rolü sahibini yönetebilir.
Cüzdan rolü, ödeme kategorisine kayıtlı AID'ler için NFC dokunma işlemlerini yönlendirirken kullanılır. Aynı AID için kayıtlı başka bir uygulama ön planda çalışmıyorsa dokunma işlemleri her zaman Cüzdan rol sahibine gider.
Bu rol, Cüzdan Hızlı Erişim kartının etkinleştirildiğinde nereye yerleştirileceğini belirlemek için de kullanılır. Rol "Yok" olarak ayarlandığında Hızlı Erişim kutusu kullanılamaz ve ödeme kategorisi NFC dokunuşları yalnızca ön plan uygulamasına gönderilir.
Güvenlik
Android 15, uygulamanızın güvenliğini artırmanıza, uygulamanızın verilerini korumanıza ve kullanıcılara verileri üzerinde daha fazla şeffaflık ve kontrol olanağı sunmanıza yardımcı olur. Kullanıcı korumalarını iyileştirmek ve uygulamanızı yeni tehditlere karşı korumak için yaptığımız diğer çalışmalar hakkında daha fazla bilgi edinmek isterseniz Google I/O'daki Android'de kullanıcı güvenliğini sağlama konuşmasına göz atın.
Kimlik Bilgisi Yöneticisi'ni otomatik doldurma ile entegre etme
Android 15'ten itibaren geliştiriciler kullanıcı adı veya şifre alanları gibi belirli görünümleri Kimlik Bilgisi Yöneticisi istekleriyle bağlayabilir. Bu sayede, oturum açma işlemi sırasında özelleştirilmiş bir kullanıcı deneyimi sunmak daha kolay hale gelir. Kullanıcı bu görünümlerden birine odaklandığında Kimlik Bilgisi Yöneticisi'ne ilgili bir istek gönderilir. Elde edilen kimlik bilgileri sağlayıcılar arasında toplanır ve satır içi öneriler veya açılır liste önerileri gibi otomatik doldurma yedek kullanıcı arayüzlerinde gösterilir. Jetpack androidx.credentials kitaplığı, geliştiricilerin tercih ettiği uç noktadır ve yakında Android 15 ve sonraki sürümlerde bu özelliği daha da geliştirmek için kullanıma sunulacaktır.
Tek dokunuşla kaydolma ve oturum açma özelliğini biyometrik istemlerle entegre etme
Kimlik Bilgisi Yöneticisi, biyometrik istemleri kimlik bilgisi oluşturmaya entegre eder ve oturum açma işlemlerini gerçekleştirdiğinden sağlayıcıların yönetim ihtiyacını biyometrik istemleri kullanabilir. Sonuç olarak, kimlik bilgisi sağlayıcıların yalnızca kimlik bilgisi oluşturma ve alma akışlarının sonuçlarına odaklanmaları ve bu sonuçları biyometrik akış sonucuyla tamamlamaları gerekir. Bu basitleştirilmiş süreç, daha verimli ve basit bir kimlik bilgisi oluşturma ve alma süreci oluşturur.
Uçtan uca şifreleme için anahtar yönetimi
Android 15'te, kriptografik açık anahtarların depolanması için işletim sistemi düzeyinde bir API sağlayarak Android uygulamalarınızda uçtan uca şifrelemeyi (E2EE) kolaylaştıran E2eeContactKeysManager'i kullanıma sunuyoruz.
E2eeContactKeysManager, kullanıcılara kişilerinin herkese açık anahtarlarını merkezi bir şekilde yönetme ve doğrulama olanağı sunmak için platformdaki kişiler uygulamasıyla entegre olacak şekilde tasarlanmıştır.
İçerik URI'lerinde izin denetimleri
Android 15, içerik URI'lerinde izin kontrolleri gerçekleştiren bir dizi API'yi kullanıma sunar:
Context.checkContentUriPermissionFull: Bu seçenek, içerik URI'lerinde tam izin kontrolü gerçekleştirir.Activitymanifest özelliğirequireContentUriPermissionFromCaller: Bu özellik, etkinlik başlatıldığında sağlanan içerik URI'lerinde belirtilen izinleri zorunlu kılar.Activityçağırıcıları içinComponentCallersınıfı: Bu, etkinliği başlatan uygulamayı temsil eder.
Erişilebilirlik
Android 15, kullanıcılar için erişilebilirliği artıran özellikler ekler.
Daha iyi Braille
Android 15'te TalkBack'in hem USB hem de güvenli Bluetooth üzerinden HID standardını kullanan Braille ekranları desteklemesini sağladık.
Fareler ve klavyeler tarafından kullanılana benzer bu standart, Android'in zaman içinde daha geniş bir Braille ekran yelpazesini desteklemesine yardımcı olacaktır.
Uluslararası hale getirme
Android 15, bir cihaz farklı dillerde kullanıldığında kullanıcı deneyimini tamamlayan özellikler ve işlevler ekler.
CJK değişken yazı tipi
Starting with Android 15, the font file for Chinese, Japanese, and Korean (CJK) languages, NotoSansCJK, is now a variable font. Variable fonts open up possibilities for creative typography in CJK languages. Designers can explore a broader range of styles and create visually striking layouts that were previously difficult or impossible to achieve.
Karakterler arası gerekçe
Starting with Android 15, text can be justified utilizing letter spacing by
using JUSTIFICATION_MODE_INTER_CHARACTER. Inter-word justification was
first introduced in Android 8.0 (API level 26), and inter-character
justification provides similar capabilities for languages that use the
whitespace character for segmentation, such as Chinese, Japanese, and others.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_CHARACTER.
JUSTIFICATION_MODE_INTER_CHARACTER.Otomatik satır sonu yapılandırması
Android, İngilizcede Japonca ve Korece için sıralı tabanlı satır sonlarını desteklemeye başladı.
Android 13 (API düzeyi 33). Ancak sıralı tabanlı satır sonları,
metinler okunaklı olduğundan, uzun metin satırlarında iyi performans göstermez.
Android 15'te uygulamalar, LINE_BREAK_WORD_STYLE_AUTO seçeneğini kullanarak ifade tabanlı satır aralarını yalnızca kısa metin satırları için uygulayabilir. Bu seçenek, metin için en iyi kelime stili seçeneğini belirler.
Kısa metin satırları için, aynı işlevi gören kelime öbeğine dayalı satır sonları kullanılır.
aşağıda gösterildiği gibi LINE_BREAK_WORD_STYLE_PHRASE olarak
şu resim:
LINE_BREAK_WORD_STYLE_AUTO
Metnin okunabilirliğini artırmak için sıralı satır sonları uygular.
Bu,
LINE_BREAK_WORD_STYLE_PHRASE.Daha uzun metin satırları için LINE_BREAK_WORD_STYLE_AUTO, hayır kullanır
aynı şekilde çalışan satır sonu kelime stili
LINE_BREAK_WORD_STYLE_NONE,
şu resim:
LINE_BREAK_WORD_STYLE_AUTO
Metnin okunabilirliğini artırmak için satır sonu kelime stili uygulamaz.
Bu,
LINE_BREAK_WORD_STYLE_NONE.Ek Japonca Hentaigana Yazı Tipi
Android 15'te eski Japonca Hiragana (Hentaigana olarak bilinir) yazı tipi dosyası varsayılan olarak paketlenmiştir. Hentaigana karakterlerinin benzersiz şekilleri sanat eseri veya tasarımda ayırt edici bir dokunuş katar ve aynı zamanda doğru hazineleri eski Japon belgelerinin iletimi ve anlaşılması.
VideoLAN cone Copyright (c) 1996-2010 VideoLAN. Bu logo veya değiştirilmiş bir sürümü, VideoLAN projesine ya da VideoLAN ekibi tarafından geliştirilen herhangi bir ürüne atıfta bulunmak için herkes tarafından kullanılabilir veya değiştirilebilir ancak proje tarafından onaylandığını göstermez.
Vulkan ve Vulkan logosu, Khronos Group Inc. şirketinin tescilli ticari markalarıdır.
OpenGL, tescilli bir ticari markadır ve OpenGL ES logosu, Khronos'un izniyle kullanılan Hewlett Packard Enterprise'ın ticari markasıdır.