Özelliklere ve API'lere Genel Bakış

Android 15, geliştiriciler için muhteşem yeni özellikler ve API'ler sunar. Aşağıdaki bölümlerde, ilgili API'leri kullanmaya başlamanıza yardımcı olmak için bu özellikler özetlenmiştir.

Yeni, değiştirilmiş ve kaldırılmış API'lerin ayrıntılı bir listesi için API fark raporunu okuyun. Yeni API'lerle ilgili ayrıntılar için Android API referansını ziyaret edin. Yeni API'ler görünürlük için vurgulanmaktadır. Ayrıca, platform değişikliklerinin uygulamalarınızı etkileyebileceği alanlar hakkında bilgi edinmek için Android 15'i hedefleyen uygulamaları etkileyen Android 15 davranış değişikliklerini ve targetSdkVersion'dan bağımsız olarak tüm uygulamaları etkileyen davranış değişikliklerini inceleyin.

Kamera ve medya

Android 15, kamera ve medya deneyimini iyileştiren, içerik üreticileri Android'de vizyonlarını hayata geçirmelerini destekleyen araçlara ve donanıma erişmenizi sağlayan çeşitli özellikler içerir.

Android medyası ve kameraya yönelik en yeni özellikler ve geliştirici çözümleri hakkında daha fazla bilgi edinmek için Google I/O'nun Modern Android medya ve kamera deneyimleri oluşturma konulu konuşmasını inceleyin.

Düşük Işık Artışı

Android 15'te, hem Kamera 2 hem de gece modu kamera uzantısı için kullanılabilen yeni bir otomatik pozlama modu olan Düşük Işık Artırma kullanıma sunuldu. Düşük Işık Artırma, düşük ışık koşullarında Önizleme akışının pozlamasını ayarlar. Bu, gece modu kamera uzantısının hareketsiz resimler oluşturmasından farklıdır, çünkü gece modu bir seri çekim fotoğrafı birleştirerek tek, geliştirilmiş bir resim oluşturur. Gece modu, hareketsiz resim oluşturmak için çok iyi çalışsa da kesintisiz bir kare akışı oluşturamaz ancak Düşük Işık Artırması bunu yapabilir. Bu sayede Düşük Işık Artışı, aşağıdakiler gibi yeni kamera özellikleri sağlar:

  • Kullanıcıların düşük ışıkta çekilmiş resimlerini daha iyi çerçevelemeleri için gelişmiş bir resim önizlemesi sağlama
  • QR kodları zayıf ışıkta taranıyor

Düşük Işık Artırma'yı etkinleştirirseniz düşük ışık seviyesi olduğunda otomatik olarak açılır ve daha fazla ışık olduğunda kapanır.

Uygulamalar, düşük ışık koşullarında Önizleme akışı dışında video kaydederek aydınlatılmış bir video kaydedebilir.

Daha fazla bilgi için Düşük Işık Artışı bölümüne bakın.

Uygulama içi kamera kontrolleri

Android 15, desteklenen cihazlardaki kamera donanımı ve algoritmaları üzerinde daha fazla kontrol sahibi olabilmeniz için yeni bir uzantı ekliyor:

  • Gelişmiş flaş gücü ayarlamaları, resim çekerken hem SINGLE hem de TORCH modlarında flaş yoğunluğunu hassas bir şekilde kontrol etmenizi sağlar.

HDR kafa odası kontrolü

Android 15 会选择适合底层设备功能和面板的位深的 HDR 余量。对于包含大量 SDR 内容的页面(例如显示单个 HDR 缩略图的即时通讯应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。Android 15 允许您使用 setDesiredHdrHeadroom 控制 HDR 余量,以在 SDR 和 HDR 内容之间取得平衡。

左侧屏幕上 SDR 界面元素的亮度似乎比右侧屏幕的亮度更均匀,这模拟了混合 HDR 和 SDR 内容时可能出现的余量问题。通过调整 HDR 余量,您可以在 SDR 和 HDR 内容之间更好地平衡。

Ses düzeyi kontrolü

Android 15 引入了对 CTA-2075 音量标准的支持,以帮助您避免音频音量不一致,并确保用户在切换内容时无需不断调整音量。系统利用输出设备(耳机和扬声器)的已知特征以及 AAC 音频内容中提供的音量元数据来智能地调整音频音量和动态范围压缩级别。

如需启用此功能,您需要确保 AAC 内容中有音量元数据,并在您的应用中启用平台功能。为此,您可以使用关联的 AudioTrack 中的音频会话 ID 调用其 create 工厂方法,从而实例化此对象;此方法会自动开始应用音频更新。LoudnessCodecController您可以传递 OnLoudnessCodecUpdateListener 以在将音量参数应用于 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 也将更新,以使用 LoudnessCodecController API 实现无缝应用集成。

Sanal MIDI 2.0 cihazları

Android 13, Evrensel MIDI Paketlerini (UMP) kullanarak iletişim kuran USB kullanan MIDI 2.0 cihazlarına bağlanma desteğini ekledi. Android 15, UMP desteğini sanal MIDI uygulamalarını da içerecek şekilde genişleterek beste uygulamalarının sentezleyici uygulamalarını bir USB MIDI 2.0 cihazında olduğu gibi sanal bir MIDI 2.0 cihazı olarak kontrol etmesini sağlar.

Daha etkili AV1 yazılım kod çözme

dav1d 徽标

dav1d(VideoLAN 中广受欢迎的 AV1 软件解码器)现已可用于在硬件中不支持 AV1 解码的 Android 设备。dav1d 的性能比旧版 AV1 软件解码器的性能高 3 倍,可让更多用户(包括一些中低层级的设备)播放高清 AV1 视频。

目前,您的应用需要通过调用 dav1d 名称 "c2.android.av1-dav1d.decoder" 来选择使用 dav1d。在后续更新中,dav1d 将成为默认的 AV1 软件解码器。这项支持已标准化,并向后移植到接收 Google Play 系统更新的 Android 11 设备。

Geliştirici verimliliği ve araçları

Üretkenliğinizi geliştirmeye yönelik çalışmalarımızın çoğu Android Studio, Jetpack Compose ve Android Jetpack kitaplıkları gibi araçlara odaklanıyor. Bununla birlikte, vizyonunuzu daha kolay şekilde gerçekleştirmenize yardımcı olacak yöntemleri her zaman platformda arıyoruz.

OpenJDK 17 güncellemeleri

Android 15 会继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致。

其中包含以下主要功能和改进:

这些 API 通过 Google Play 系统更新在超过 10 亿台搭载 Android 12(API 级别 31)及更高版本的设备上进行了更新,让您能够以最新的编程功能为目标平台。

PDF iyileştirmeleri

Android 15, PdfRenderer API'lerinde önemli iyileştirmeler içerir. Uygulamalar; şifre korumalı dosya oluşturma, ek açıklama oluşturma, form düzenleme, arama ve metinle seçim gibi gelişmiş özellikler içerebilir. Doğrusal PDF optimizasyonları, yerel PDF'lerin daha hızlı görüntülenmesini sağlamak ve kaynak kullanımını azaltmak için desteklenir.

PDF oluşturmayla ilgili son güncellemeler, yerleştirilmiş PDF dosyasında arama yapma gibi özellikleri içerir.

PdfRenderer, platform sürümünden bağımsız olarak Google Play sistem güncellemeleri kullanılarak güncellenebilen bir modüle taşındı. Android 11'e (API düzeyi 30) geri dönmek için bu değişiklikleri, API yüzeyinin PdfRendererPreV adı verilen uyumlu bir Android 15 öncesi sürümünü oluşturarak destekliyoruz.

PdfRenderer API yüzeyinde yaptığımız iyileştirmelerle ilgili geri bildirimleriniz bizim için önemlidir. Yakında çıkacak olan Android Jetpack kitaplığıyla bu API'leri uygulamanıza da dahil etmeyi daha da kolaylaştırmayı planlıyoruz.

Otomatik dil geçişinde yapılan ayrıntılandırmalar

Android 14 增加了设备端音频中的多语言识别功能,可在语言之间自动切换,但这可能会导致单词丢失,尤其是在语言切换时,两种话语之间的停顿较少时。Android 15 添加了额外的控件,可帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS 会将自动切换限制为仅在音频会话开始时进行,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES 则会在指定次数的切换后停用语言切换。如果您希望自动检测到会话期间只讲一种语言,这些选项特别有用。

Geliştirilmiş OpenType Değişken Yazı Tipi API'si

Android 15, OpenType değişken yazı tipinin kullanılabilirliğini iyileştirir. Artık buildVariableFamily API ile ağırlık eksenleri belirtmeden değişken yazı tipinden FontFamily örneği oluşturabilirsiniz. Metin oluşturucu, görüntülenen metinle eşleşmek için wght ekseninin değerini geçersiz kılar.

Bu işlem, yeni API'nin kullanılmasıyla Typeface oluşturmak için gereken kodu önemli ölçüde basitleştirir:

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();

Önceden, aynı Typeface öğesini oluşturmak için çok daha fazla koda ihtiyacınız vardı:

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();

Hem eski hem de yeni API'lerle oluşturulan bir Typeface örneğini aşağıda bulabilirsiniz:

Yeni ve eski API'ler kullanıldığında Yazı Tipi oluşturmanın farkına ilişkin bir örnek

Bu örnekte, eski API ile oluşturulan Typeface 350, 450, 550 ve 650 Font örnekleri için doğru yazı tipi ağırlıkları oluşturamadığından oluşturucu en yakın ağırlığa geri döner. Dolayısıyla bu örnekte, 350 yerine 300, 450 yerine 400 oluşturulur ve bu şekilde devam eder. Buna karşılık, yeni API'lerle oluşturulan Typeface belirli bir ağırlık için dinamik olarak bir Font örneği oluşturur. Böylece 350, 450, 550 ve 650 için de doğru ağırlıklar oluşturulur.

Ayrıntılı satır sonu kontrolleri

Android 15'ten itibaren TextView ve temel satır kesici, okunabilirliği artırmak için metnin belirli bir bölümünü aynı satırda koruyabilir. Dize kaynaklarında <nobreak> etiketini veya createNoBreakSpan etiketini kullanarak bu satır sonu özelleştirmesinden yararlanabilirsiniz. Benzer şekilde, <nohyphen> etiketini veya createNoHyphenationSpan etiketini kullanarak kelimeleri tirelemeden koruyabilirsiniz.

Örneğin, aşağıdaki dize kaynağı satır sonu içermez ve istenmeyen bir yerde kırılarak "Pixel 8 Pro" metniyle 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 saran ve satır sonlarını engelleyen <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çimlerindeki fark aşağıdaki resimlerde gösterilmektedir:

"Pixel 8 Pro" ifadesinin <nobreak> etiketi kullanılarak sarmalanmadığı bir metin satırının düzeni.
"Pixel 8 Pro." ifadesinin <nobreak> etiketi kullanılarak sarmalandığı aynı metin satırının düzeni.

Uygulama arşivleme

Android 和 Google Play 去年宣布支持应用归档,这让用户可以通过从 Google Play 上使用 Android App Bundle 发布的部分不常用的应用来释放空间。Android 15 现在包含对应用归档和取消归档的操作系统级支持,因此所有应用商店都可以更轻松地实现此功能。

具有 REQUEST_DELETE_PACKAGES 权限的应用可以调用 PackageInstaller requestArchive 方法来请求归档已安装的应用软件包,此操作会移除 APK 和所有缓存的文件,但会保留用户数据。已归档的应用会通过 LauncherApps API 作为可显示的应用返回;用户会看到界面处理方式,以突出显示这些应用已归档。如果用户点按已归档的应用,相关安装程序将收到将其取消归档的请求,并且可以通过 ACTION_PACKAGE_ADDED 广播监控恢复过程。

Grafik

Android 15, ANGLE ve Canvas grafik sistemine yapılan eklemeler de dahil en son grafik iyileştirmelerini sunar.

Android'in GPU erişimini modernleştirme

Vulkan 徽标

从早期开始,核心操作系统在单个 CPU 上运行,GPU 通过基于固定函数流水线的 API 进行访问,Android 硬件已经发生了很大变化。从 Android 7.0(API 级别 24)开始,NDK 中就已提供 Vulkan® 图形 API。它采用较低级别的抽象,可以更好地反映现代 GPU 硬件,能够更好地进行扩展以支持多个 CPU 核心,并可减少 CPU 驱动程序开销,从而提升应用性能。所有现代游戏引擎都支持 Vulkan。

Vulkan 是 Android 的 GPU 首选接口。因此,Android 15 包含 ANGLE 作为可选层,用于在 Vulkan 上运行 OpenGL® ES。迁移到 ANGLE 会将 Android OpenGL 实现标准化,以提高兼容性,在某些情况下还可提升性能。您可以使用 ANGLE 测试 OpenGL ES 应用的稳定性和性能,方法是在 Android 15 上依次点击设置 -> 系统 -> 开发者选项 -> 实验性功能:启用 ANGLE,启用开发者选项。

Vulkan 上的 Android ANGLE 路线图

Android GPU API 即将发生的变更的路线图。

作为简化 GPU 堆栈的一部分,今后我们将在更多新设备上以 GL 系统驱动程序的形式提供 ANGLE,预计未来将只能通过 ANGLE 使用 OpenGL/ES。不过,我们计划在所有设备上继续支持 OpenGL ES

建议的后续措施

使用开发者选项选择适用于 OpenGL ES 的 ANGLE 驱动程序并测试您的应用。对于新项目,我们强烈建议您使用适用于 C/C++ 的 Vulkan。

Canvas ile ilgili iyileştirmeler

Android 15, Android'in Canvas grafik sistemini yeni özelliklerle modernleştirmemize devam ediyor:

  • Matrix44, tuvali 3D olarak işlemek istediğinizde kullanılması gereken koordinatların dönüştürülmesi için bir 4x4 matrisi sağlar.
  • clipShader, geçerli klibi, belirtilen gölgelendiriciyle kesiştirir. clipOutShader ise klibi, geçerli klibin ve gölgelendiricinin farkına ayarlar. Her biri, gölgelendiriciyi bir alfa maskesi olarak değerlendirir. Bu, karmaşık şekillerin etkili bir şekilde çizilmesini destekler.

Performans ve pil

Android, uygulamalarınızın performansını ve kalitesini artırmanıza yardımcı olma odağını sürdürür. Android 15, uygulamanızdaki görevlerin daha verimli şekilde yürütülmesine, uygulama performansını optimize etmesine ve uygulamalarınız hakkında bilgi toplanmasına yardımcı olan yeni API'ler sunar.

Pil tasarrufu sağlayan en iyi uygulamalar, ağ ve güç kullanımında hata ayıklama, Android 15 ve Android'in son sürümlerinde arka plan çalışmasının pil verimliliğini nasıl iyileştirdiğimizle ilgili ayrıntılar için Google I/O'da Android'de arka plan çalışmasının pil verimliliğini artırma konulu konuşmayı inceleyin.

ApplicationStartInfo API'sı

在以前的 Android 版本中,应用启动有点神秘。在应用中确定应用是从冷状态、温状态还是热状态开始的过程很难确定。此外,我们也很难知道您的应用在不同发布阶段所用的时间:创建进程分支、调用 onCreate、绘制第一帧等。在实例化 Application 类时,您无法得知应用是从广播、content provider、作业、备份、启动完成、闹钟还是 Activity 启动的。

Android 15 上的 ApplicationStartInfo API 可提供所有这些功能以及更多其他功能。您甚至可以选择将自己的时间戳添加到流程中,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo 直接优化应用启动;例如,当应用因广播而启动时,您可以避免在 Application 类中实例化界面相关库的高成本。

Uygulama boyutuyla ilgili ayrıntılı bilgiler

Android 8.0'dan (API düzeyi 26) bu yana Android, bir uygulamanın yüklü boyutunu tek bir bayt sayısı olarak özetleyen StorageStats.getAppBytes API'sini içerir. Bu API; APK boyutunun, APK'dan çıkarılan dosyaların boyutu ve cihazda oluşturulan dosyaların (ör. önceden derlenen kod) toplamıdır. Bu sayı, uygulamanızın depolama alanını nasıl kullandığı açısından yeterince anlamlı değildir.

Android 15'te APK dosyası bölümleri, AOT ve hızlandırmayla ilgili kodlar, dex meta verileri, kitaplıklar ve açıklamalı profiller de dahil olmak üzere uygulamanızın tüm bu alanı nasıl kullandığına dair bilgi edinmenizi sağlayan StorageStats.getAppBytesByDataType([type]) API'si bulunur.

Uygulama tarafından yönetilen profil oluşturma

Android 15, uygulamanızın içinden profil oluşturma bilgilerini toplamanızı sağlayan yepyeni ProfilingManager sınıfını içerir. Bunu, profil oluşturma isteklerinin oluşturulmasını kolaylaştıracak bir Android Jetpack API ile sarmayı planlıyoruz. Ancak temel API; yığın dökümlerinin, yığın profillerinin, yığın örneklemenin ve daha fazlasının toplanmasına olanak tanıyacak. Uygulamanızın dosyalar dizinine yayınlanan çıkış dosyasını tanımlamak için sağlanan bir etiketle uygulamanıza bir geri çağırma sağlar. API, performans üzerindeki etkiyi en aza indirmek için hız sınırlaması uygular.

SQLite veritabanı iyileştirmeleri

Android 15, temel SQLite motorunun, uygulamalarda bildirilebilecek belirli performans sorunlarını hedefleyen gelişmiş özelliklerini sunan yeni SQLite API'lerini kullanıma sunuyor.

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ı ile ilgili en iyi uygulamalara başvurmalıdır.

  • Salt okunur ertelenmiş işlemler: Salt okunur (yazma ifadeleri eklemeyin) işlemleri yayınlarken salt okunur DEFERRED işlemleri yayınlamak için beginTransactionReadOnly() ve beginTransactionWithListenerReadOnly(SQLiteTransactionListener) özelliklerini kullanın. Bu tür işlemler birbirleriyle eşzamanlı olarak çalışabilir ve veritabanı WAL modundaysa IMMEDIATE veya EXCLUSIVE işlemleriyle eş zamanlı olarak çalıştırılabilir.
  • Satır sayıları ve kimlikleri: Değiştirilen satır sayısını veya ek sorgu yayınlamadan son eklenen satır kimliğini almak için yeni API'ler eklenmiştir. getLastChangedRowCount() geçerli işlemdeki en son SQL ifadesi tarafından eklenen, güncellenen veya silinen satır sayısını, getTotalChangedRowCount() ise geçerli bağlantıdaki sayıyı döndürür. getLastInsertRowId(), mevcut bağlantıda eklenecek son satırın rowid değerini döndürür.
  • Ham ifadeler: Kolay sarmalayıcıları ve karşılaşabilecekleri ek işlem ek yükünü atlayarak bir ham SQlite ifadesi yayınlayın.

Android Dinamik Performans Çerçevesi güncellemeleri

Android 15 继续投资开发 Android 动态性能框架 (ADPF),这是一组 API,可让游戏和性能密集型应用更直接地与 Android 设备的电源和散热系统进行互动。在受支持的设备上,Android 15 将添加新的 ADPF 功能:

  • 适用于提示会话的节能模式,用于指明其关联的线程应该优先考虑节能而非性能,非常适合长时间运行的后台工作负载。
  • 可以在提示会话中报告 GPU 和 CPU 的运行时长,从而使系统能够同时调整 CPU 和 GPU 频率,以便更好地满足工作负载需求。
  • 热余量阈值,用于根据余量预测来解释可能的热节流状态。

如需详细了解如何在应用和游戏中使用 ADPF,请参阅相关文档

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'te, uygulamaların kaydedildiğini algılamak için uygulama desteği sağlanır. Uygulama, bir ekran kaydı içinde görünür ve görünmez olmak arasında geçiş yaptığında bir geri çağırma çağrılır. Kayıt sürecinin UID'sine ait etkinlikler kaydediliyorsa uygulama görünür olarak kabul edilir. Bu şekilde, uygulamanız hassas bir işlem yapıyorsa kullanıcıyı bu işlemin kaydedildiği konusunda bilgilendirebilirsiniz.

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ı, engelleme veya hariç tutma kuralları dahil olmak üzere her birinin karşılanması gereken Intent eşleştirme kuralı grubunu oluşturan bir dizi UriRelativeFilter nesneden oluşan UriRelativeFilterGroup aracılığıyla daha hassas Intent çözünürlüğünü destekler.

Bu kurallar, AndroidManifest XML dosyasında yeni <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 yeni android:query ve android:fragment özelliklerini kullanan <data> etiketleri içerebilir.

AndroidManifest söz diziminin bir örneğini burada bulabilirsiniz:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:domain="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

Bir cihazdaki hassas uygulamaların gösterilmesi veya gizlenmesi için özel alanın kilidi açılabilir ve kilitlenebilir.

Özel alan, kullanıcıların cihazlarında ek bir kimlik doğrulama katmanıyla hassas uygulamaları meraklı gözlerden uzak tutabilecekleri ayrı bir alan oluşturmasına olanak tanır. Özel alanda ayrı bir kullanıcı profili kullanılır. Kullanıcı, özel alan için cihaz kilidini veya ayrı bir kilit faktörünü kullanmayı seçebilir.

Özel alandaki uygulamalar, başlatıcıda ayrı bir kapsayıcıda görünür ve özel alan kilitliyken son kullanılanlar görünümünden, bildirimlerden, ayarlardan ve diğer uygulamalardan gizlenir. Kullanıcı tarafından oluşturulan ve indirilen içerik (medya veya dosyalar gibi) ve hesaplar, özel alan ile ana alan arasında ayrı tutulur. Özel alanın kilidi açıldığında uygulamaların alanlardaki içeriklere erişmesine izin vermek için sistem paylaşım sayfası ve fotoğraf seçici kullanılabilir.

Kullanıcılar mevcut uygulamaları ve verilerini özel alana taşıyamaz. Bunun yerine, kullanıcılar istedikleri uygulama mağazasını kullanarak uygulama yüklemek için özel alanda bir yükleme seçeneği belirler. Özel alandaki uygulamalar, ana alandaki tüm uygulamalardan ayrı kopyalar (aynı uygulamanın yeni kopyaları) olarak yüklenir.

Kullanıcı özel alanı kilitlediğinde profil durdurulur. Profil durdurulduğunda özel alandaki uygulamalar artık etkin olmaz ve bildirimlerin gösterilmesi de dahil olmak üzere ön plandaki veya arka plandaki etkinlikleri gerçekleştiremez.

Özellikle uygulamanız aşağıdaki kategorilerden birine giriyorsa beklendiği gibi çalıştığından emin olmak için uygulamanızı özel alanla test etmenizi öneririz:

Seçili Fotoğraflar Erişimi için en son kullanıcı seçimini sorgula

Medya izinleri için kısmi erişim verildiğinde uygulamalar artık yalnızca en son seçilen fotoğrafları ve videoları vurgulayabilir. Bu özellik, fotoğraf ve videolara sıklıkla erişim isteğinde bulunan uygulamalar için kullanıcı deneyimini iyileştirebilir. Uygulamanızda bu özelliği kullanmak için ContentResolver üzerinden MediaStore sorgusu yapılırken QUERY_ARG_LATEST_SELECTION_ONLY bağımsız değişkenini etkinleştirin.

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 üzerinde Ö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 yeni teknolojiler geliştirme çalışmalarımızın bir parçasıdır. Başlamanıza yardımcı olacak Android geliştirici önizlemesi ve beta programları hakkında daha fazla bilgiyi özel korumalı alan sayfamızda bulabilirsiniz.

Health Connect

Android 15, uygulamalarla toplanan sağlık ve fitness verilerini yönetip paylaşmak için güvenli ve merkezi bir platform olan Android'den Health Connect ile ilgili en yeni uzantıları entegre eder. Bu güncellemeyle birlikte fitness, beslenme, cilt sıcaklığı, antrenman planları ve daha birçok konuda yeni veri türleri için destek eklendi.

Deri sıcaklığı takibi, kullanıcıların giyilebilir veya başka bir takip cihazından daha doğru sıcaklık verilerini kaydedip paylaşmasına olanak tanır.

Eğitim planları, kullanıcının fitness hedeflerine ulaşmasına yardımcı olmak için yapılandırılmış antrenman planlarıdır. Eğitim planları desteği çeşitli tamamlama ve performans hedeflerini içerir:

Google I/O'daki Android Health ile uyarlanabilir deneyimler oluşturma konuşmasını inceleyerek Android'deki Health Connect ile ilgili en son güncellemeler hakkında daha fazla bilgi edinin.

Kısmi ekran paylaşımı

Android 15 kısmi ekran paylaşımını destekler. Bu sayede kullanıcılar, cihazın ekranının tamamı yerine yalnızca bir uygulama penceresini paylaşabilir veya kaydedebilir. İlk olarak Android 14 QPR2'de etkinleştirilen bu özellik, uygulamanızın kısmi ekran paylaşımı deneyimini özelleştirmesine olanak tanıyan MediaProjection geri çağırma içerir. Android 14 (API düzeyi 34) veya sonraki sürümleri hedefleyen uygulamalarda her MediaProjection yakalama oturumu için kullanıcı izni gerektiğini 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ırmaları için daha fazla kontrol ve esneklik sunar.

Uygulamanızın kullanıcı deneyimini iyileştirmek üzere Android 15'teki son iyileştirmeleri nasıl kullanacağınız hakkında daha fazla bilgi edinmek için Google I/O'daki Android uygulamanızın kullanıcı deneyimini iyileştirme konulu makaleye göz atın.

Generated Previews API ile daha zengin widget önizlemeleri

Android 15'ten önce widget seçici önizlemeleri sağlamanın tek yolu statik bir resim veya düzen kaynağı belirtmekti. Bu önizlemeler, genellikle ana ekrana yerleştirildiklerinde gerçek widget'ın görünümünden önemli ölçüde farklıdır. Ayrıca, Jetpack Glance ile statik kaynaklar oluşturulamaz. Bu nedenle, bir Glance geliştiricisinin widget önizlemesi için widget'ının ekran görüntüsünü alması veya bir XML düzeni oluşturması gerekiyordu.

Android 15'te, oluşturulan önizlemeler için destek eklenir. Yani uygulama widget'ı sağlayıcıları, statik bir kaynak yerine seçici önizlemesi olarak kullanmak üzere RemoteViews oluşturabilir.

Uygulamalar, widget seçiciye uzaktan görüntüleme özelliği sağlayabilir. Böylece kullanıcılar, seçicideki içeriği kullanıcının göreceği içeriği daha iyi temsil edecek şekilde güncelleyebilir.

Push API'sı

Uygulamalar, oluşturulan önizlemeleri bir push API'sı aracılığıyla sağlayabilir. Uygulamalar yaşam döngülerinin herhangi bir noktasında önizleme sağlayabilir ve önizleme sağlaması için ana makineden açık bir istek almaz. Önizlemeler AppWidgetService ürününde kalıcıdır ve ana makineler isteğe bağlı olarak bunları isteyebilir. Aşağıdaki örnek, bir XML widget düzeni kaynağı yükler ve bunu önizleme olarak ayarlar:

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

Beklenen akış:

  1. Widget sağlayıcı herhangi bir zamanda setWidgetPreview numaralı telefonu çağırır. Sağlanan önizlemeler, diğer sağlayıcı bilgileriyle birlikte AppWidgetService üzerinde kalıcı olarak saklanır.
  2. setWidgetPreview, AppWidgetHost.onProvidersChanged geri çağırması yoluyla ana makineleri güncellenmiş önizleme hakkında bilgilendirir. Buna karşılık, widget ana makinesi tüm sağlayıcı bilgilerini yeniden yükler.
  3. Bir widget önizlemesi görüntülerken toplantı sahibi AppWidgetProviderInfo.generatedPreviewCategories seçeneğini kontrol eder ve seçilen kategori mevcutsa bu sağlayıcının kaydedilmiş önizlemesini döndürmek için AppWidgetManager.getWidgetPreview aracını çağırır.

setWidgetPreview ne zaman aranacak?

Önizleme sağlamak için geri çağırma olmadığından uygulamalar çalışırken herhangi bir noktada önizleme göndermeyi seçebilir. Önizlemenin güncellenme sıklığı, widget'ın kullanım alanına bağlıdır.

Aşağıdaki listede, önizleme kullanım alanlarının iki ana kategorisi açıklanmaktadır:

  • Widget önizlemelerinde kişiselleştirilmiş veya son bilgiler gibi gerçek veriler gösteren sağlayıcılar. Bu sağlayıcılar, kullanıcı oturum açtığında veya uygulamasında ilk yapılandırmayı tamamladıktan sonra önizlemeyi ayarlayabilir. Bunun ardından, önizlemeleri istedikleri sıklıkta güncellemek için periyodik bir görev oluşturabilirler. Bu tür widget'lara örnek olarak fotoğraf, takvim, hava durumu veya haber widget'ı verilebilir.
  • Önizlemelerde veya hızlı işlem widget'larında statik bilgiler gösteren ve veri göstermeyen sağlayıcılardır. Bu sağlayıcılar önizlemeleri bir kez, uygulama ilk kez başlatıldığında ayarlayabilirler. Bu tür widget'lara örnek olarak, harekete geçirme widget'ı veya Chrome kısayolları widget'ı verilebilir.

Bazı sağlayıcılar, hub modu seçicide statik önizlemeler, ana ekran seçicide ise gerçek bilgiler gösterebilir. Bu sağlayıcılar, önizlemeleri ayarlamak için bu kullanım alanlarının her ikisiyle ilgili yönergeleri izlemelidir.

Pencere İçinde Pencere

Android 15, Pencere İçinde Pencere (PiP) özelliğinde yapılan yeni değişikliklerle birlikte PiP moduna girerken daha akıcı bir geçiş sağlıyor. Bu, PiP'ye giden ana kullanıcı arayüzünün üzerine kullanıcı arayüzü öğeleri yerleştirilen uygulamalar için faydalı olacaktır.

Geliştiriciler, yer paylaşımlı kullanıcı arayüzü öğelerinin görünürlüğünü değiştiren mantığı tanımlamak için onPictureInPictureModeChanged geri çağırmasını kullanır. Bu geri çağırma, PiP giriş veya çıkış animasyonu tamamlandığında tetiklenir. Android 15'ten itibaren PictureInPictureUiState sınıfı yeni bir duruma sahiptir.

Bu yeni kullanıcı arayüzü durumuyla Android 15'i hedefleyen uygulamalar, PiP animasyonu başlar başlamaz isTransitioningToPip() ile çağrılan Activity#onPictureInPictureUiStateChanged geri çağırma işlemini gözlemler. PiP modundayken uygulama ile alakalı olmayan birçok kullanıcı arayüzü öğesi vardır. Örneğin; öneriler, yakında sunulacak video, puanlar ve başlıklar gibi bilgileri içeren görünümler veya düzen. Uygulama, PiP moduna geçtiğinde bu kullanıcı arayüzü öğelerini gizlemek için onPictureInPictureUiStateChanged geri çağırma işlevini kullanın. Uygulama, PiP penceresinden tam ekran moduna geçtiğinde bu öğeleri göstermek için aşağıdaki örneklerde gösterildiği gibi onPictureInPictureModeChanged geri çağırmasını kullanın:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

Alakasız kullanıcı arayüzü öğelerinin bu hızlı görünürlük ayarı (PIP penceresi için) sayesinde PiP'nin animasyona daha sorunsuz ve titremesiz bir şekilde girer.

İyileştirilmiş Rahatsız Etmeyin kuralları

AutomaticZenRule, uygulamaların Dikkat Yönetimi (Rahatsız Etmeyin) kurallarını özelleştirmesine ve bu kuralları ne zaman etkinleştireceğine veya devre dışı bırakacağına karar vermesine olanak tanır. Android 15, kullanıcı deneyimini iyileştirmek amacıyla bu kuralları büyük ölçüde geliştirir. Aşağıdaki geliştirmeler dahildir:

  • AutomaticZenRule öğesine türler ekleniyor. Böylece sistemin bazı kurallara özel işlem uygulayabilmesi sağlandı.
  • AutomaticZenRule öğesine bir simge ekleyerek modların daha tanınabilir hale gelmesini sağlayın.
  • AutomaticZenRule öğesine kuralın kullanıcı için etkin hale gelmesi gereken koşulları açıklayan bir triggerDescription dizesi ekleme.
  • ZenDeviceEffects, AutomaticZenRule sürümüne eklendi. Böylece kuralların gri tonlamalı görüntüleme, gece modu veya duvar kağıdının soluk renkte görünmesini tetiklemesi sağlandı.

Bildirim kanalları için TitreşimEfekti'ni ayarlama

Android 15, NotificationChannel.setVibrationEffect aracılığıyla gelen bildirimler için kanala göre zengin titreşimlerin ayarlanmasını destekler. Böylece kullanıcılarınız, cihazlarına bakmadan farklı bildirim türlerini birbirinden ayırt edebilir.

Büyük ekranlar ve form faktörleri

Android 15, uygulamalarınıza Android'in büyük ekranlar, çevrilebilir ve katlanabilirler gibi form faktörlerinden en iyi şekilde yararlanma desteği sunar.

Büyük ekranda gelişmiş çoklu görev

Android 15 为用户提供了更好的在大屏设备上进行多任务处理的方式。例如,用户可以保存他们喜欢的分屏应用组合以快速访问,还可以固定屏幕上的任务栏以在应用之间快速切换。这意味着,确保应用具有自适应能力比以往任何时候都更加重要。

Google I/O 大会举办了有关构建自适应 Android 应用使用 Material 3 自适应库构建界面的会议,这对您有所帮助。我们的文档中包含更多可以帮助您针对大屏幕进行设计的文档。

Kapak ekranı desteği

Uygulamanız, Android 15'in Application veya Activity cihazınızın desteklenen çevrilebilir cihazların küçük kapak ekranlarında gösterilmesine izin vermek için kullandığı bir özelliği beyan edebilir. Bu ekranlar, Android uygulamalarının çalışması için uyumlu hedefler olarak kabul edilemeyecek kadar küçük olsa da uygulamanız bu ekranları desteklemeyi tercih edebilir. Böylece uygulamanız daha fazla yerde kullanılabilir.

Bağlantı

Android 15, uygulamanızın iletişim ve kablosuz teknolojilerdeki en son gelişmelere erişebilmesi için platformu günceller.

Uydu desteği

Android 15, uydu bağlantısı için platform desteğini genişletmeye devam ediyor ve uydu bağlantı ortamı genelinde tutarlı bir kullanıcı deneyimi sağlamak için bazı kullanıcı arayüzü öğeleri içeriyor.

Uygulamalar bir cihazın uyduya bağlı olduğu zamanı algılamak için ServiceState.isUsingNonTerrestrialNetwork() özelliğini kullanabilir. Bu özellik, kullanıcılara tam ağ hizmetlerinin neden kullanılamayabileceği konusunda daha fazla bilgi verir. Ayrıca Android 15, mesaj gönderip almak için uydu bağlantısını kullanan, önceden yüklenmiş RCS uygulamalarının yanı sıra SMS ve MMS uygulamaları için de destek sunar.

Cihaz bir uyduya bağlandığında bir bildirim görüntülenir.

Daha akıcı NFC deneyimleri

Android 15, Android'in sağlam NFC uygulama ekosistemini desteklemeye devam ederken temassız ödeme deneyimini daha sorunsuz ve güvenilir hale getirmek için çalışıyor. Desteklenen cihazlarda uygulamalar gözlem moduna girmek için NfcAdapter iznini isteyebilir. Bu modda cihaz, NFC okuyucuları dinler ancak NFC okuyuculara yanıt vermez ve uygulamanın NFC hizmetini PollingFrame nesneleri işlemesi için gönderir. PollingFrame nesneleri, NFC okuyucuyla ilk iletişimden önce kimlik doğrulaması yapmak için kullanılabilir. Böylece çoğu durumda tek dokunuşla işlem yapılabilir.

Ayrıca uygulamalar artık desteklenen cihazlarda filtre kaydedebilir. Böylece, NFC duyarlı birden çok uygulamayla sorunsuz bir şekilde çalışmaya olanak tanıyan yoklama döngüsü etkinliği hakkında bildirim alabilirler.

Cüzdan rolü

Android 15 引入了一个新的钱包角色,可让您与用户首选的钱包应用更紧密地集成。此角色取代了 NFC 默认的感应式付款设置。用户可以通过导航到设置 > 应用 > 默认应用来管理 Google 钱包角色持有者。

在为付款类别中注册的 AID 路由 NFC 触碰时,可使用“钱包”角色。除非已在前台运行为同一 AID 注册的另一个应用,否则点按操作会始终转到钱包角色持有者。

此角色还可用于确定钱包“快速访问”功能块在启用后应转到的位置。当角色设置为“无”时,“快速访问”功能块不可用,并且付款类别 NFC 触碰仅会传送到前台应用。

Güvenlik

Android 15, uygulamanızın güvenliğini artırmanıza ve uygulamanızın verilerini korumanıza yardımcı olur. Ayrıca, kullanıcılara verileri üzerinde daha fazla şeffaflık ve kontrol sunar. Kullanıcı teminatlarını iyileştirmek ve uygulamanızı yeni tehditlere karşı korumak için yaptıklarımızla ilgili daha fazla bilgiyi Google I/O'da Android'de kullanıcı güvenliğini koruma konulu konuşmada bulabilirsiniz.

Kimlik Bilgisi Yöneticisi'ni otomatik doldurma özelliğiyle entegre etme

Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.

Tek dokunuşla kaydolma ve oturum açma işlemlerini biyometrik istemlerle entegre etme

Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.

Uçtan uca şifreleme için anahtar yönetimi

Şifreleme ortak anahtarlarını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 Android 15'te kullanıma sunuyoruz.

E2eeContactKeysManager, kullanıcılara kişilerinin ortak anahtarlarını yönetmeleri ve doğrulamaları için merkezi bir yol sunmak amacıyla, platform kişileri uygulamasıyla entegre olacak şekilde tasarlanmıştır.

İçerik URI'lerindeki izin kontrolleri

Android 15 引入了一组可对内容 URI 执行权限检查的新 API:

Erişilebilirlik

Android 15, kullanıcılar için erişilebilirliği iyileştiren ö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 mümkün hale getirdik.

Fareler ve klavyeler tarafından kullanılana çok benzeyen bu standart, Android'in zaman içinde daha geniş bir Braille ekran aralığını desteklemesine yardımcı olacaktır.

Uluslararası hale getirme

Android 15, cihazlar farklı dillerde kullanıldığında kullanıcı deneyimini tamamlayan özellikler ve işlevler ekler.

CJK değişken yazı tipi

Android 15'ten başlayarak Çince, Japonca ve Korece (CJK) dilleri için yazı tipi dosyası, NotoSansCJK artık değişken bir yazı tipi oldu. Değişken yazı tipleri, CJK dillerinde reklam öğesi tipografisi için yeni olanaklar yaratır. Tasarımcılar, daha geniş bir stil yelpazesini keşfedip önceden zor ya da imkansız olan görsel olarak çarpıcı düzenler oluşturabilir.

Çince, Japonca ve Korece (CJK) dilleri için değişken yazı tipinin farklı yazı tipi genişlikleriyle nasıl göründüğü.

Karakterler arası iki yana yaslama

从 Android 15 开始,可以使用 JUSTIFICATION_MODE_INTER_CHARACTER 利用字母间距将文本两端对齐。Android 8.0(API 级别 26)中首次引入了字词间对齐,而字符间对齐可为使用空格字符进行分割的语言(例如中文、日语等)提供类似的功能。

使用 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, Android 13'te (API düzeyi 33) Japonca ve Korece için ifade tabanlı satır sonlarını desteklemeye başladı. Ancak, kelime öbeğine dayalı satır sonları kısa metin satırlarının okunabilirliğini artırsa da uzun metin satırlarında iyi sonuç vermez. Android 15'te uygulamalar artık LINE_BREAK_WORD_STYLE_AUTO seçeneğini kullanarak yalnızca kısa metin satırlarında ifadeye dayalı satır sonları uygulayabilir. Bu seçenek metin için en uygun kelime stili seçeneğini belirler.

Kısa metin satırları için aşağıdaki resimde gösterildiği gibi LINE_BREAK_WORD_STYLE_PHRASE ile aynı şekilde çalışan kelime öbeği tabanlı satır sonları kullanılır:

LINE_BREAK_WORD_STYLE_AUTO, kısa metin satırlarında metnin okunabilirliğini iyileştirmek için ifadeye dayalı satır sonları uygular. Bu, LINE_BREAK_WORD_STYLE_PHRASE uygulamakla aynıdır.

Daha uzun metin satırları için LINE_BREAK_WORD_STYLE_AUTO, aşağıdaki resimde gösterildiği gibi LINE_BREAK_WORD_STYLE_NONE ile aynı şekilde çalışan satır sonu olmayan bir kelime stili kullanır:

Uzun metin satırları için, LINE_BREAK_WORD_STYLE_AUTO metnin okunabilirliğini iyileştirmek için satır sonu kelime stili uygulamaz. Bu, LINE_BREAK_WORD_STYLE_NONE uygulamakla aynıdır.

Yeni Japon Hentaigana Yazı Tipi

Android 15'te, eski Japon Hiragana'sı (Hentaigana olarak bilinir) için yeni bir yazı tipi dosyası varsayılan olarak paket hâline getirilir. Hentaigana karakterlerinin benzersiz şekilleri, sanat eseri veya tasarıma ayırt edici bir görünüm katarken, antik Japon belgelerinin doğru iletilmeye ve anlaşılmasına da yardımcı olmaktadır.

Japon Hentaigana yazı tipi için karakter ve metin stili.

VideoLAN koni Telif Hakkı (c) 1996-2010 VideoLAN. Bu logo veya değiştirilmiş sürümü, herhangi bir kişi tarafından VideoLAN projesine veya VideoLAN ekibi tarafından geliştirilen herhangi bir ürüne atıfta bulunmak için kullanılabilir ya da değiştirilebilir ancak projenin desteklediği anlamına gelmez.

Vulkan ve Vulkan logosu, Khronos Group Inc.in tescilli ticari markalarıdır.

OpenGL tescilli bir ticari markadır ve OpenGL ES logosu, Hewlett Packard Enterprise'ın ticari markasıdır ve Khronos'un izniyle kullanılmıştır.