Android 15 wprowadza świetne funkcje i interfejsy API dla deweloperów. W kolejnych sekcjach znajdziesz podsumowanie tych funkcji, które pomoże Ci rozpocząć korzystanie z powiązanych interfejsów API.
Szczegółową listę dodanych, zmodyfikowanych i usuniętych interfejsów API znajdziesz w raporcie o różnicach w interfejsach API. Szczegółowe informacje o dodanych interfejsach API znajdziesz w dokumentacji interfejsu Android API. W przypadku Androida 15 poszukaj interfejsów API dodanych na poziomie 35. Aby dowiedzieć się więcej o obszarach, w których zmiany na platformie mogą mieć wpływ na Twoje aplikacje, zapoznaj się ze zmianami w Androidzie 15 w przypadku aplikacji kierowanych na Androida 15 i w przypadku wszystkich aplikacji.
Aparat i multimedia
Android 15 zawiera wiele funkcji, które poprawiają działanie aparatu i multimediów oraz zapewniają dostęp do narzędzi i sprzętu, które pomagają twórcom realizować ich wizje na Androidzie.
Więcej informacji o najnowszych funkcjach i rozwiązaniach dla deweloperów dotyczących multimediów i aparatu na Androida znajdziesz w prezentacji Tworzenie nowoczesnych aplikacji multimedialnych i do obsługi aparatu na Androida z Google I/O.
Doświetlanie w słabym oświetleniu
Android 15 引入了弱光增强功能,这是一种自动曝光模式,适用于 Camera 2 和夜间模式相机扩展。“弱光增强”功能可在光线昏暗的环境下调整预览画面的曝光度。这与夜间模式相机扩展程序创建静态图片的方式不同,因为夜间模式会将一系列照片组合起来,以创建一张经过增强的单张图片。虽然夜间模式非常适合拍摄静态图片,但无法创建连续的帧流,而“低光增强”功能可以。因此,弱光增强功能可启用相机功能,例如:
- 提供增强型图片预览,以便用户更好地取景拍摄低光照片
- 在光线不足的情况下扫描二维码
如果您启用“弱光增强”功能,该功能会在光线较弱时自动开启,在光线较强时关闭。
应用可以在光线昏暗的环境下录制预览画面,以保存经过亮度提升的视频。
如需了解详情,请参阅弱光增强。
Sterowanie kamerą w aplikacji
Android 15 dodaje rozszerzenie, które zapewnia większą kontrolę nad sprzętem aparatu i jego algorytmami na obsługiwanych urządzeniach:
- Zaawansowane ustawienia siły błysku umożliwiające precyzyjne sterowanie natężeniem błysku w trybach
SINGLE
iTORCH
podczas fotografowania.
Kontrola zakresu dynamicznego HDR
Android 15 wybiera zakres HDR odpowiedni dla możliwości urządzenia i głębi bitowej panelu. W przypadku stron zawierających dużo treści SDR, takich jak aplikacja do obsługi wiadomości wyświetlająca pojedynczą miniaturę HDR, takie działanie może negatywnie wpływać na postrzeganą jasność treści SDR. Android 15 umożliwia kontrolowanie marginesu HDR za pomocą setDesiredHdrHeadroom
, aby zachować równowagę między treściami SDR a HDR.

Regulacja głośności
Android 15 obsługuje standard głośności CTA-2075, który pomaga uniknąć niespójności głośności dźwięku i zapewnia, że użytkownicy nie muszą ciągle dostosowywać głośności podczas przełączania się między treściami. System wykorzystuje znane cechy urządzeń wyjściowych (słuchawek i głośników) oraz metadane dotyczące głośności dostępne w treściach audio AAC, aby inteligentnie dostosowywać głośność dźwięku i poziom kompresji zakresu dynamicznego.
Aby włączyć tę funkcję, musisz się upewnić, że metadane dotyczące głośności są dostępne w:
swoich treści AAC i włącz tę funkcję w aplikacji. Do tego:
utwórz instancję obiektu LoudnessCodecController
według
Wywołuje metodę fabryczną create z dźwiękiem.
identyfikator sesji z powiązanego konta AudioTrack
; w tym
automatycznie rozpocznie stosowanie aktualizacji audio. Możesz przekazać parametr OnLoudnessCodecUpdateListener
, aby zmodyfikować lub odfiltrować parametry głośności, zanim zostaną one zastosowane w 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
}
Zostanie też zaktualizowany odtwarzacz AndroidX media3 ExoPlayer,
Interfejsy API LoudnessCodecController
umożliwiające płynną integrację aplikacji.
Wirtualne urządzenia MIDI 2.0
W Androidzie 13 dodano obsługę łączenia się z urządzeniami MIDI 2.0 przez USB, które komunikują się za pomocą pakietów Universal MIDI (UMP). Android 15 rozszerza obsługę UMP na wirtualne aplikacje MIDI, umożliwiając aplikacjom do komponowania sterowanie syntezatorami jako wirtualnym urządzeniem MIDI 2.0, tak jak w przypadku urządzenia USB MIDI 2.0.
wydajniejsze dekodowanie oprogramowania AV1,
dav1d, popularny dekoder oprogramowania AV1 firmy VideoLAN, jest dostępny na urządzeniach z Androidem, które nie obsługują dekodowania AV1 na poziomie sprzętowym. dav1d jest nawet 3 razy wydajniejszy niż starszy dekoder oprogramowania AV1, co umożliwia odtwarzanie treści AV1 w jakości HD przez więcej użytkowników, w tym na niektórych urządzeniach niskiego i średniego poziomu.
Aplikacja musi wyrazić zgodę na korzystanie z dav1d, wywołując go po imieniu "c2.android.av1-dav1d.decoder"
. W kolejnej aktualizacji dav1d stanie się domyślnym dekoderem AV1. Ta obsługa jest ujednolicona i wstecznie przenoszona na urządzenia z Androidem 11, które otrzymują aktualizacje systemowe Google Play.
Wydajność i narzędzia dla programistów
Większość naszych działań na rzecz zwiększenia produktywności koncentruje się na narzędziach takich jak Android Studio, Jetpack Compose i biblioteki Android Jetpack. Zawsze jednak szukamy sposobów, aby ułatwić Ci realizację Twojej wizji na platformie.
Aktualizacje OpenJDK 17
Android 15 kontynuuje odświeżanie podstawowych bibliotek Androida, aby dostosować je do funkcji w najnowszych wersjach OpenJDK LTS.
Zawiera on te najważniejsze funkcje i ulepszenia:
- Ulepszenia dotyczące buforów NIO
- Transmisje
- Dodatkowe metody
math
istrictmath
util
aktualizacje pakietu, w tym sekwencyjnecollection
,map
iset
ByteBuffer
wDeflater
- Aktualizacje zabezpieczeń, takie jak
X500PrivateCredential
i aktualizacje klucza zabezpieczeń
Te interfejsy API są aktualizowane na ponad miliardzie urządzeń z Androidem 12 (poziom interfejsu API 31) lub nowszym w ramach aktualizacji systemu Google Play, dzięki czemu możesz kierować reklamy na najnowsze funkcje programistyczne.
Ulepszenia plików PDF
Android 15 对 PdfRenderer
API 进行了重大改进。应用可以整合呈现等高级功能
受密码保护的文件、注释、表单编辑、
searching,而 selection 则包含副本。支持线性化 PDF 优化,此功能可加快本地 PDF 查看速度并减少资源使用量。Jetpack PDF 库使用这些 API 来简化 PDF 的添加
查看功能。

PdfRenderer
已移至一个可使用 Google
Play 系统更新独立于平台版本,并且我们支持
将这些变更还原到 Android 11(API 级别 30),方法是创建兼容的
Android 15 之前版本的 API Surface,称为
PdfRendererPreV
。
Ulepszenia automatycznego przełączania języka
Android 14 dodał na urządzeniu rozpoznawanie wielu języków w dźwięku z automatycznym przełączaniem się między językami, ale może to powodować pomijanie słów, zwłaszcza gdy języki przełączają się z mniejszą przerwą między dwoma wypowiedziami. Android 15 wprowadza dodatkowe opcje, które pomagają aplikacjom dostosować przełączanie do ich przypadku użycia.
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
ogranicza automatyczne przełączanie do początku sesji audio, podczas gdy EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
dezaktywuje przełączanie języka po określonej liczbie przełączeń. Te opcje są szczególnie przydatne, jeśli spodziewasz się, że w trakcie sesji będzie używany tylko jeden język, który powinien być automatycznie wykrywany.
Ulepszony interfejs OpenType Variable Font API
W Androidzie 15 łatwiejsza obsługa czcionki zmiennej OpenType. Za pomocą interfejsu API buildVariableFamily
możesz utworzyć instancję FontFamily
z czcionki zmiennej bez określania osi wag. W celu dopasowania wyświetlanego tekstu render tekstu zastępuje wartość osi wght
.
Korzystanie z interfejsu API znacznie upraszcza kod potrzebny do utworzenia Typeface
:
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();
Wcześniej, aby utworzyć ten sam Typeface
, potrzeba więcej więcej kodu:
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();
Oto przykład renderowania Typeface
utworzonego za pomocą starego i nowego interfejsu API:
W tym przykładzie Typeface
utworzony za pomocą starego interfejsu API nie ma możliwości tworzenia dokładnych wartości wagi czcionki dla instancji 350, 450, 550 i 650Font
, więc renderowanie wraca do wartości najbliższej. W tym przypadku zamiast 350 wyświetlana jest wartość 300, zamiast 450 – 400 itd. Natomiast interfejs Typeface
utworzony przy użyciu nowych interfejsów API dynamicznie tworzy
wystąpienie Font
dla danej wagi, więc dokładne wagi są renderowane dla 350,
450, 550 i 650.
Szczegółowe ustawienia podziału wiersza
从 Android 15 开始,TextView
和底层行断开符可以将给定部分文本保留在同一行中,以提高可读性。您可以通过在字符串资源或 createNoBreakSpan
中使用 <nobreak>
标记来充分利用此换行符自定义功能。同样,您可以使用 <nohyphen>
标记或 createNoHyphenationSpan
来防止对字词进行分词。
例如,以下字符串资源不包含换行符,在呈现时,文本“Pixel 8 Pro”会在不合适的位置换行:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
相比之下,此字符串资源包含 <nobreak>
标记,该标记会将字词“Pixel 8 Pro”换行,并防止换行:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
以下图片展示了这些字符串呈现方式的差异:

<nobreak>
标记换行。
<nobreak>
标记封装“Pixel 8 Pro.”短语的同一行文本的布局。Archiwizacja aplikacji
Android 和 Google Play 宣布支持最后的应用归档功能 年,这让用户可以通过移除部分内容来释放空间 通过 Android 应用发布的设备中不常用的应用 前往 Google Play 下载套装。Android 15 在操作系统级别支持应用归档和解压缩,让所有应用商店都能更轻松地实现归档和解压缩。
具有 REQUEST_DELETE_PACKAGES
权限的应用可以调用
PackageInstaller
requestArchive
方法请求归档
已安装的应用软件包,这会移除 APK 和所有缓存的文件,但会保留
用户数据已归档的应用会通过 LauncherApps
API 作为可显示的应用返回;用户会看到一个界面处理,以突出显示这些应用已归档。如果用户点按已归档的应用,负责安装的应用会收到解除归档请求,并且可以通过 ACTION_PACKAGE_ADDED
广播监控恢复过程。
Włączanie trybu 16 KB na urządzeniu za pomocą opcji programisty

Włącz opcję programisty Uruchom ze stroną 16 KB, aby uruchomić urządzenie w trybie 16 KB.
Od Androida 15 QPR1 możesz użyć opcji programisty dostępnej na niektórych urządzeniach, aby uruchomić urządzenie w trybie 16 KB i przeprowadzić testowanie na urządzeniu. Zanim skorzystasz z opcji programisty, otwórz Ustawienia > System > Aktualizacje oprogramowania i zastosuj dostępne aktualizacje.
Ta opcja dla programistów jest dostępna na tych urządzeniach:
Pixel 8 i 8 Pro (z Androidem 15 QPR1 lub nowszym)
Pixel 8a (z Androidem 15 QPR1 lub nowszym)
Pixel 9, 9 Pro i 9 Pro XL (z Androidem 15 QPR2 Beta 2 lub nowszym)
Grafika
Android 15 wprowadza najnowsze ulepszenia grafiki, w tym ANGLE i dodatki do systemu graficznego Canvas.
Modernizacja dostępu do GPU w Androidzie
与早期相比,Android 硬件已经有了很大的进步。早期,核心操作系统在单个 CPU 上运行,并且使用基于固定功能流水线的 API 访问 GPU。从 Android 7.0(API 级别 24)开始,NDK 中就提供了 Vulkan® 图形 API,其较低级别的抽象更好地反映了现代 GPU 硬件,可更好地扩缩以支持多个 CPU 核心,并可降低 CPU 驱动程序开销,从而提升应用性能。所有现代游戏引擎都支持 Vulkan。
Vulkan 是 Android 与 GPU 的首选接口。因此,Android 15 包含 ANGLE 作为可选层,用于在 Vulkan 基础上运行 OpenGL® ES。改用 ANGLE 将标准化 Android OpenGL 实现,提高兼容性,在某些情况下还有助于提升性能。在 Android 15 中,您可以依次前往设置 -> 系统 -> 开发者选项 -> 实验性功能:启用 ANGLE,启用开发者选项,以便通过 ANGLE 测试 OpenGL ES 应用的稳定性和性能。
Android ANGLE on Vulkan 路线图

为了简化 GPU 堆栈,我们今后将在更多新设备上将 ANGLE 作为 GL 系统驱动程序提供,未来 OpenGL/ES 将只能通过 ANGLE 获得支持。尽管如此,我们计划继续在所有设备上支持 OpenGL ES。
建议的后续措施
使用开发者选项为 OpenGL ES 选择 ANGLE 驱动程序,然后测试您的应用。对于新项目,我们强烈建议您为 C/C++ 使用 Vulkan。
Ulepszenia Canvas
Android 15 继续对 Android 的 Canvas 图形系统进行现代化改造,并新增了以下功能:
Matrix44
提供一个 4x4 矩阵来转换坐标,当您想在 3D 中操控画布时,应使用此矩阵。clipShader
会将当前剪裁区域与指定的着色器相交,而clipOutShader
会将剪裁区域设为当前剪裁区域与着色器的差值,每个操作都会将着色器视为一个 Alpha 遮罩。这支持高效地绘制复杂形状。
Wydajność i bateria
Android nadal koncentruje się na pomaganiu w poprawianiu wydajności i jakości aplikacji. Android 15 wprowadza interfejsy API, które pomagają wydajniej wykonywać zadania w aplikacji, optymalizować jej działanie i zbierać o niej statystyki.
Aby poznać sprawdzone metody oszczędzania baterii, debugowania sieci i zużycia energii oraz dowiedzieć się więcej o tym, jak zwiększamy wydajność baterii w przypadku pracy w tle w Androidzie 15 i nowszych wersjach Androida, obejrzyj prezentację Zwiększanie wydajności baterii w przypadku pracy w tle na Androidzie z konferencji Google I/O.
ApplicationStartInfo API
W poprzednich wersjach Androida uruchamianie aplikacji było trochę tajemnicze. Trudno było określić, czy aplikacja została uruchomiona „na zimno”, „na ciepło” czy z pamięci. Trudno też było ustalić, ile czasu aplikacja spędziła w różnych fazach uruchamiania: dzielenia procesu, wywoływania funkcji onCreate
, rysowania pierwszego kadru itp. Gdy instancja klasy Application
została utworzona, nie było sposobu na ustalenie, czy aplikacja została uruchomiona przez transmisję, dostawcę treści, zadanie, kopię zapasową, uruchomienie, alarm czy Activity
.
Interfejs API ApplicationStartInfo
w Androidzie 15 zapewnia wszystkie te funkcje i wiele więcej. Możesz nawet dodać do przepływu własne sygnały czasu, aby zbierać dane o czasie w jednym miejscu. Oprócz zbierania danych możesz używać ApplicationStartInfo
do bezpośredniej optymalizacji uruchamiania aplikacji. Możesz na przykład wyeliminować kosztowne instancjonowanie bibliotek związanych z interfejsem użytkownika w klasie Application
, gdy aplikacja uruchamia się z powodu transmisji.
Szczegółowe informacje o rozmiarze aplikacji
Od Androida 8.0 (poziom interfejsu API 26) Android zawiera interfejs API StorageStats.getAppBytes
, który podsumowuje rozmiar zainstalowanej aplikacji jako pojedynczą liczbę bajtów będącą sumą rozmiaru pliku APK, rozmiaru plików wyodrębnionych z pliku APK oraz plików wygenerowanych na urządzeniu, takich jak kod skompilowany z wyprzedzeniem (AOT). Ta liczba nie dostarcza zbyt wielu informacji o tym, jak aplikacja wykorzystuje miejsce na dane.
Android 15 dodaje interfejs API StorageStats.getAppBytesByDataType([type])
, który pozwala uzyskać informacje o tym, jak aplikacja wykorzystuje całą dostępną przestrzeń, w tym podziały pliku APK, kod AOT i kod związany z przyspieszeniem, metadane dex, biblioteki i profilowanie kierunkowe.
Profilowanie zarządzane przez aplikację
Android 15 zawiera klasę ProfilingManager
, która umożliwia zbieranie informacji o profilowaniu z aplikacji, takich jak zrzuty stosu, profile stosu, próbkowanie stosu itp. Wywołuje ona Twoją aplikację z dołączonym tagiem, aby zidentyfikować plik wyjściowy, który jest dostarczany do katalogu plików aplikacji. Interfejs API stosuje ograniczanie szybkości, aby zminimalizować wpływ na wydajność.
Aby uprościć tworzenie żądań profilowania w aplikacji, zalecamy użycie odpowiedniego interfejsu AndroidX API Profiling
, dostępnego w wersji Core 1.15.0-rc01 lub nowszej.
Ulepszenia bazy danych SQLite
Android 15 引入了 SQLite API,这些 API 可公开底层 SQLite 引擎的高级功能,以解决可能在应用中出现的特定性能问题。将 SQLite 更新到版本 3.44.3。
开发者应参阅 SQLite 性能最佳实践 以便充分利用其 SQLite 数据库,尤其是在处理大型 或运行对延迟敏感的查询时
- 只读延迟事务:在发出
只读(不包括写入语句),请使用
beginTransactionReadOnly()
和beginTransactionWithListenerReadOnly(SQLiteTransactionListener)
发出只读的DEFERRED
事务。此类事务 如果数据库处于 WAL 模式 与IMMEDIATE
或EXCLUSIVE
事务并发运行。 - 行数和 ID:添加了 API 以检索已更改的行数和 ID
行或最后插入的行 ID 而不发出额外的查询。
getLastChangedRowCount()
会返回当前事务中最近的 SQL 语句插入、更新或删除的行数,而getTotalChangedRowCount()
会返回当前连接的计数。getLastInsertRowId()
返回最后一行的rowid
以便在当前连接中插入 - 原始语句:发出原始 SQlite 语句,从而绕过便利 及其可能产生的任何额外处理开销。
Aktualizacje Android Dynamic Performance Framework
Android 15 继续投资于 Android 动态性能框架 (ADPF),这是一组 API,可让游戏和性能密集型应用更为直接地与 Android 设备的电源和散热系统进行互动。在受支持的设备上,Android 15 添加了 ADPF 功能:
- 针对提示会话的节能模式,用于指明其关联的线程应优先节能而非性能,非常适合长时间运行的后台工作负载。
- 系统可以在提示会话中报告 GPU 和 CPU 工作时长,以便同时调整 CPU 和 GPU 频率,以最佳方式满足工作负载需求。
- 热余量阈值,用于根据余量预测来解读可能的热节流状态。
如需详细了解如何在应用和游戏中使用 ADPF,请参阅相关文档。
Prywatność
Android 15 zawiera różne funkcje, które pomagają programistom aplikacji chronić prywatność użytkowników.
Wykrywanie nagrywania ekranu
Android 15 obsługuje aplikacje, aby wykrywać w trakcie nagrywania. Funkcja wywołania zwrotnego jest wywoływana, gdy aplikacja przechodzi z widocznego stanu do niewidocznego w nagraniu ekranu. Aplikacja jest są uznawane za widoczne, jeśli działania należące do identyfikatora UID procesu rejestracji są nie są zapisywane. Dzięki temu, jeśli aplikacja wykonuje działanie związane z poufnymi danymi, możesz poinformować użytkownika, że jest nagrywany.
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)
}
Rozszerzone możliwości IntentFilter
Android 15 通过 UriRelativeFilterGroup
支持更精确的 Intent
解析,UriRelativeFilterGroup
包含一组 UriRelativeFilter
对象,这些对象构成一组必须满足的 Intent
匹配规则,包括网址查询参数、网址片段以及屏蔽或排除规则。
您可以在 AndroidManifest
XML 文件中使用 <uri-relative-filter-group>
标记来定义这些规则,该标记可以包含 android:allow
标记。这些代码可以包含使用现有数据代码属性以及 android:query
和 android:fragment
属性的 <data>
代码。
下面是一个 AndroidManifest
语法示例:
<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>
Przestrzeń prywatna
借助私密空间,用户可以在设备上创建一个单独的空间,在额外的身份验证层保护下,防止敏感应用遭到窥探。私密空间使用单独的用户个人资料。用户可以选择使用设备锁定方式或为私密空间使用单独的锁定方式。
私密空间中的应用会显示在启动器的单独容器中,并且当私密空间处于锁定状态时,这些应用不会显示在“最近用过”视图、通知、“设置”和其他应用中。用户生成的内容和下载的内容(例如媒体内容或文件)以及账号在私密空间和主空间之间是分开的。在私密空间处于解锁状态时,您可以使用系统 Sharesheet 和照片选择器向应用授予对各个空间中内容的访问权限。
用户无法将现有应用及其数据移至私密空间。相反,用户可以在私密空间中选择安装选项,以便使用他们偏好的任意应用商店安装应用。私密空间中的应用会作为主空间中任何应用的单独副本进行安装(同一应用的新副本)。
当用户锁定私密空间时,系统会停止该个人资料。在个人资料停止运行时,私密空间中的应用将不再处于活动状态,无法执行前台或后台活动,包括显示通知。
我们建议您使用私密空间测试应用,以确保应用能按预期运行,尤其是当您的应用属于以下某一类别时:
- 具有工作资料逻辑的应用:假定其应用的任何已安装副本(不在主资料中)均位于工作资料中。
- 医疗应用
- 启动器应用
- 应用商店应用
Sprawdzanie najnowszych wyborów użytkownika w przypadku dostępu do wybranych zdjęć
Aplikacje mogą teraz wyróżniać tylko ostatnio wybrane zdjęcia i filmy, gdy użytkownik przyzna uprawnienia do multimediów w ramach dostępu częściowego. Ta funkcja może poprawić wyniki
aplikacji, które często proszą o dostęp do zdjęć,
filmy. Aby korzystać z tej funkcji w aplikacji, włącz argument QUERY_ARG_LATEST_SELECTION_ONLY
podczas wysyłania zapytania MediaStore
za pomocą interfejsu 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) });
Piaskownica prywatności na Androida
Android 15 zawiera najnowsze rozszerzenia Usług reklamowych Androida, które obejmują najnowszą wersję Piaskownicy prywatności na Androidzie. Ta funkcja jest częścią naszych działań mających na celu opracowanie technologii, które poprawią prywatność użytkowników oraz umożliwią skuteczne, spersonalizowane reklamy w aplikacjach mobilnych. Na stronie Piaskownicy prywatności znajdziesz więcej informacji o Piaskownicy prywatności w wersji dla deweloperów i w programach beta na Androida, które pomogą Ci zacząć.
Health Connect
Android 15 łączy najnowsze rozszerzenia Health Connect by Android – bezpieczne i scentralizowane platforma, która pozwala zarządzać zbieranymi przez aplikacje danymi o zdrowiu i aktywności fizycznej oraz je udostępniać. Ta aktualizacja obsługa dodatkowych typów danych dotyczących fitnessu, odżywianie, temperatura skóry, plany treningów itp.
Śledzenie temperatury skóry umożliwia użytkownikom przechowywanie i udostępnianie dokładniejszych danych o temperaturze z urządzenia do noszenia lub innego urządzenia śledzącego.
Plany treningowe to usystematyzowane plany treningowe, które pomagają użytkownikom osiągnąć cele fitnessowe. Plany treningowe obejmują różne cele dotyczące ukończenia i wyników:
- Cele dotyczące ukończenia treningu związane z spalaniem kalorii, dystansem, czasem trwania, powtórzeniem i liczbą kroków.
- Docelowa skuteczność w okolicach jak najwięcej powtórzeń (AMRAP), kadencja, tętno, moc, ostrzegalne tempo wysiłku oraz prędkości.
Więcej informacji o najnowszych aktualizacjach Health Connect na Androidzie znajdziesz w prezencie Tworzenie dostosowanych usług z Androidem Health z Google I/O.
Udostępnianie ekranu aplikacji
Android 15 obsługuje udostępnianie ekranu aplikacji, dzięki czemu użytkownicy mogą udostępniać lub nagrywać tylko okno aplikacji, a nie cały ekran urządzenia. Ta funkcja, która została po raz pierwszy włączona w Androidzie 14 QPR2, obejmuje wywołania MediaProjection
, które umożliwiają aplikacji dostosowywanie udostępniania ekranu. Pamiętaj, że w przypadku aplikacji kierowanych na Androida 14 (poziom API 34) lub nowszego wymagana jest zgoda użytkownika na każdą sesję rejestrowania MediaProjection
.
Interfejs użytkownika i systemu
Android 15 zapewnia deweloperom aplikacji i użytkownikom większą kontrolę i elastyczność w konfigurowaniu urządzenia pod kątem swoich potrzeb.
Więcej informacji o tym, jak wykorzystać najnowsze ulepszenia w Androidzie 15, aby zwiększyć wygodę korzystania z aplikacji, znajdziesz w prezentacji Ulepszanie wrażeń użytkowników aplikacji na Androida z Google I/O.
Bogatsze podglądy widżetów dzięki interfejsowi Generated Previews API
Przed Androidem 15 jedynym sposobem wyświetlania podglądów selektora widżetów było określenie statycznych zasobów obrazów lub układu. Te podglądy często znacznie różnią się od wyglądu widżetu na ekranie głównym. Ponadto za pomocą Jetpack Glance nie można tworzyć zasobów statycznych, więc deweloper Glance musiał zrobić zrzut ekranu z widżetem lub utworzyć układ XML, aby wyświetlić jego podgląd.
Android 15 obsługuje wygenerowane podglądy. Oznacza to, że dostawcy widżetów aplikacji mogą generować RemoteViews
, aby używać go jako podglądu selektora zamiast zasobu statycznego.

Interfejs API usługi Push
Aplikacje mogą udostępniać wygenerowane podglądy za pomocą interfejsu API push. Aplikacje mogą udostępniać podglądy w dowolnym momencie ich cyklu życia i nie muszą otrzymać wyraźnej prośby od gospodarza. Podglądy są przechowywane w AppWidgetService
, a gospodarze mogą je żądać na żądanie. W tym przykładzie wczytujemy zasób układu widżetu XML i ustawiamy go jako podgląd:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
Oczekiwany przebieg:
- W dowolnym momencie dostawca widżetu może wywołać funkcję
setWidgetPreview
. Udostępnione podglądy są przechowywane wAppWidgetService
wraz z innymi informacjami o dostawcy. setWidgetPreview
informuje hostów o zaktualizowanym podglądzie za pomocą wywołania zwrotnegoAppWidgetHost.onProvidersChanged
. W odpowiedzi host widżetu ponownie wczytuje wszystkie informacje dostawcy.- Podczas wyświetlania podglądu widżetu host sprawdza, czy
AppWidgetProviderInfo.generatedPreviewCategories
jest dostępna, a jeśli tak, wywołuje funkcjęAppWidgetManager.getWidgetPreview
, aby zwrócić zapisany podgląd dla tego dostawcy.
Kiedy zadzwonić do: setWidgetPreview
Ponieważ nie ma wywołania zwrotnego, które umożliwia wyświetlanie podglądów, aplikacje mogą wysyłać podglądy w dowolnym momencie, gdy są uruchomione. Częstotliwość aktualizacji podglądu zależy od przypadku użycia widżetu.
Na liście poniżej znajdziesz 2 główne kategorie przypadków użycia podglądu:
- Dostawcy, którzy wyświetlają prawdziwe dane w podglądzie widżetów, np. informacje spersonalizowane lub najnowsze informacje. Ci dostawcy mogą ustawić podgląd po zalogowaniu się użytkownika lub po wykonaniu wstępnej konfiguracji w aplikacji. Następnie mogą skonfigurować zadanie okresowe, aby aktualizować podgląd w wybranym interwale. Przykładami tego typu widżetów są widżety ze zdjęciami, kalendarza, pogody lub wiadomościami.
- Dostawcy, którzy wyświetlają w podglądach informacje statyczne lub widżety szybkich działań, które nie wyświetlają żadnych danych. Ci dostawcy mogą ustawić podgląd tylko raz przy pierwszym uruchomieniu aplikacji. Przykładami tego typu widżetów są widżet Szybkie działania na Dysku lub widżet skrótów w Chrome.
Niektórzy dostawcy mogą wyświetlać podgląd statyczny w selektorze trybu centrali, ale w selektorze na ekranie głównym mogą wyświetlać prawdziwe informacje. Podczas ustawiania podglądów dostawcy ci powinni postępować zgodnie ze wskazówkami dotyczącymi obu tych przypadków użycia.
Obraz w obrazie
Android 15 wprowadza zmiany w trybie obrazu w obrazie (PIP), które zapewniają jeszcze płynniejsze przejście do tego trybu. Jest to korzystne w przypadku aplikacji, które mają elementy UI nałożone na główny interfejs użytkownika i przechodzą do trybu PiP.
Deweloperzy używają wywołania zwrotnego onPictureInPictureModeChanged
do definiowania logiki
który przełącza widoczność nakładanych elementów interfejsu. Ten wywołanie zwrotne jest wywoływane po zakończeniu animacji otwierania lub zamykania okna PiP. Początek za
Androida 15, klasa PictureInPictureUiState
zawiera kolejny stan.
W takim stanie interfejsu aplikacje kierowane na Androida 15 (poziom interfejsu API 35) odnotowują
Wywołanie zwrotne Activity#onPictureInPictureUiStateChanged
z
isTransitioningToPip()
od razu po rozpoczęciu animacji funkcji obraz w obrazie. Istnieją
wiele elementów interfejsu, które nie są istotne dla aplikacji w trybie Obraz w obrazie,
przykładowe widoki lub układ strony z informacjami, takimi jak sugestie,
filmów, ocen i tytułów. Gdy aplikacja przejdzie do trybu Picture-in-Picture, użyj wywołania zwrotnego onPictureInPictureUiStateChanged
, aby ukryć te elementy interfejsu. Gdy
przejdzie do trybu pełnoekranowego z okna funkcji obraz w obrazie, użyj
Wywołanie zwrotne onPictureInPictureModeChanged
do odkrycia tych elementów, jak w tym przykładzie
w tych przykładach:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
Ten szybki przełącznik widoczności nieistotnych elementów interfejsu (dla okna PIP) pomaga aby uzyskać płynniejszą i wolną od migotania animacja PIP.
Ulepszone reguły trybu Nie przeszkadzać
AutomaticZenRule
允许应用自定义注意力机制
管理(勿扰)规则,并确定何时启用或停用
。Android 15 极大地增强了这些规则,旨在提高
用户体验。其中包含以下增强功能:
- 向
AutomaticZenRule
添加类型,让系统能够应用特殊类型 对某些规则的处理 - 向
AutomaticZenRule
添加图标,使模式更加丰富 易于识别。 - 将
triggerDescription
字符串添加到AutomaticZenRule
,用于描述 规则应当对用户生效的条件。 - 已添加
ZenDeviceEffects
更改为AutomaticZenRule
,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。
Ustawianie VibrationEffect dla kanałów powiadomień
Android 15 支持为传入的通知设置丰富的振动,方法是
频道使用的是NotificationChannel.setVibrationEffect
,因此
您的用户可以区分不同类型的通知
不需要看他们的设备
Element na pasku stanu wyświetlania multimediów i automatyczne zatrzymywanie
Projekcja multimediów może ujawnić prywatne informacje o użytkowniku. Nowy, dobrze widoczny element na pasku stanu informuje użytkowników o działającej projekcji ekranu. Użytkownicy mogą kliknąć chip, aby zatrzymać udostępnianie, przesyłanie lub nagrywanie ekranu. Aby zapewnić użytkownikom bardziej intuicyjną obsługę, wyświetlanie na ekranie w trakcie jest teraz automatycznie wstrzymywane, gdy ekran urządzenia jest zablokowany.

Duże ekrany i formaty
Android 15 zapewnia aplikacjom obsługę, która pozwala w pełni wykorzystać możliwości różnych form urządzeń z Androidem, w tym dużych ekranów, urządzeń składanych i z klapką.
Ulepszona wielozadaniowość na dużym ekranie
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
Obsługa ekranu zewnętrznego
您的应用可以声明一个属性,Android 15 会使用该属性来允许您的 Application
或 Activity
显示在受支持的可翻转设备的小封面屏幕上。这些屏幕太小,无法被视为适合运行 Android 应用的兼容目标平台,但您的应用可以选择支持它们,从而让您的应用在更多平台上可用。
Łączność
Android 15 aktualizuje platformę, aby zapewnić Twojej aplikacji dostęp do najnowszych osiągnięć w zakresie technologii komunikacyjnych i bezprzewodowych.
Obsługa satelitarna
Android 15 rozszerza obsługę platformy w zakresie łączności satelitarnej, zawiera kilka elementów UI, by zapewnić spójność połączenia satelitarnego.
Aplikacje mogą używać ServiceState.isUsingNonTerrestrialNetwork()
do wykrywania, kiedy urządzenie jest połączone z satelitą, dzięki czemu użytkownicy lepiej rozumieją, dlaczego pełne usługi sieciowe mogą być niedostępne. Android 15 obsługuje też aplikacje SMS i MMS oraz wstępnie zainstalowane aplikacje RCS, które umożliwiają korzystanie z łączności satelitarnej do wysyłania i odbierania wiadomości.

Płynniejsze działanie NFC
Android 15 czyni korzystanie z płatności zbliżeniowych wygodniejszym i bardziej niezawodnym, a jednocześnie nadal obsługuje solidny ekosystem aplikacji NFC. Na obsługiwanych urządzeniach aplikacje mogą prosić NfcAdapter
o wejście w tryb obserwacji, w którym urządzenie nasłuchuje, ale nie reaguje na czytniki NFC, wysyłając PollingFrame
obiekty usługi NFC aplikacji do przetwarzania. Obiekty PollingFrame
mogą być używane do uwierzytelniania przed pierwszym nawiązaniem komunikacji z czytnikiem NFC, co w wielu przypadkach umożliwia transakcję jednym kliknięciem.
Aplikacje mogą też zarejestrować filtr na obsługiwanych urządzeniach, aby otrzymywać powiadomienia o aktywności pętli zapytań, co umożliwia płynne działanie z wieloma aplikacjami obsługującymi NFC.
Rola w portfelu
Android 15 introduces a Wallet role that allows tighter integration with the user's preferred wallet app. This role replaces the NFC default contactless payment setting. Users can manage the Wallet role holder by navigating to Settings > Apps > Default Apps.
The Wallet role is used when routing NFC taps for AIDs registered in the payment category. Taps always go to the Wallet role holder unless another app that is registered for the same AID is running in the foreground.
This role is also used to determine where the Wallet Quick Access tile should go when activated. When the role is set to "None", the Quick Access tile isn't available and payment category NFC taps are only delivered to the foreground app.
Bezpieczeństwo
Android 15 pomaga zwiększyć bezpieczeństwo aplikacji, chronić jej dane oraz zapewnia użytkownikom większą przejrzystość i kontrolę nad ich danymi. Więcej informacji o tym, co robimy, aby ulepszać zabezpieczenia użytkowników i chronić Twoją aplikację przed nowymi zagrożeniami, znajdziesz w prezentacji Safeguarding user security on Android (Zapewnianie bezpieczeństwa użytkowników na Androidzie) z konferencji Google I/O.
Integracja Credential Managera z autouzupełnianiem
Począwszy od Androida 15 deweloperzy mogą połączyć określone widoki, takie jak pola nazwy użytkownika lub hasła, z żądaniami menedżera danych uwierzytelniających, co ułatwia dostosowanie interfejsu do potrzeb użytkownika podczas procesu logowania. Gdy użytkownik skupi się na jednym z tych widoków, do Menedżera danych logowania zostanie wysłane odpowiednie żądanie. Uzyskane dane są agregowane w ramach dostawców i wyświetlane w interfejsach autouzupełniania, takich jak sugestie w polu tekstowym lub sugestie w menu. Biblioteka Jetpack androidx.credentials to preferowany punkt końcowy dla deweloperów. Wkrótce będzie ona dostępna w celu dalszego ulepszania tej funkcji w Androidzie 15 i nowszych.
Integracja rejestracji i logowania jednym dotknięciem z prośbami o uwierzytelnianie biometryczne
Credential Manager将生物识别提示集成到凭据创建过程中 和登录流程,这样提供商就无需管理 生物识别提示。因此,凭据提供程序只需专注于创建和获取流程的结果,并辅以生物识别流程结果。这一简化的流程创建了更高效、更精简的凭据 创建和检索过程。
Zarządzanie kluczami w przypadku pełnego szyfrowania
我们将在 Android 15 中引入 E2eeContactKeysManager
,它通过提供用于存储加密公钥的操作系统级 API,有助于在 Android 应用中实现端到端加密 (E2EE)。
E2eeContactKeysManager
旨在与平台通讯录应用集成,以便用户集中管理和验证通讯录联系人的公钥。
Sprawdzanie uprawnień dotyczących identyfikatorów URI treści
Android 15 引入了一组用于对内容 URI 执行权限检查的 API:
Context.checkContentUriPermissionFull
:此选项会对内容 URI 执行完整权限检查。Activity
清单属性requireContentUriPermissionFromCaller
:此属性会在 activity 启动时对提供的内容 URI 强制执行指定权限。Activity
调用方的ComponentCaller
类:此类表示启动 activity 的应用。
Ułatwienia dostępu
Android 15 zawiera funkcje, które zwiększają dostępność dla użytkowników.
Better Braille
W Androidzie 15 umożliwiliśmy TalkBackowi obsługę monitorów brajlowskich, które korzystają ze standardu HID przez USB i bezpieczny Bluetooth.
Ten standard, podobnie jak standardy używane przez myszy i klawiatury, pomoże Androidowi z czasem obsługiwać szerszą gamę monitorów brajlowskich.
Internacjonalizacja
Android 15 zawiera funkcje i możliwości, które uzupełniają wygodę korzystania z urządzenia w różnych językach.
Czcionka zmienna CJK
从 Android 15 开始,面向中文、日文和韩文 (CJK) 语言的字体文件 NotoSansCJK 现在是可变字体。可变字体为中日韩语言的创意排版提供了更多可能性。设计师可以探索更多样式的排版,并制作出以前难以实现或根本无法实现的视觉效果出色的布局。

Justowanie między znakami
从 Android 15 开始,可以通过
使用 JUSTIFICATION_MODE_INTER_CHARACTER
。“字词间的理由”原为
最初是在 Android 8.0(API 级别 26)中引入的,
Justifications 功能为使用
例如中文、日语等。

JUSTIFICATION_MODE_NONE
的日语文本布局。
JUSTIFICATION_MODE_NONE
的英语文本布局。
JUSTIFICATION_MODE_INTER_WORD
的日语文本布局。
JUSTIFICATION_MODE_INTER_WORD
的英语文本布局。
JUSTIFICATION_MODE_INTER_CHARACTER
的日语文本布局。
JUSTIFICATION_MODE_INTER_CHARACTER
的英语文本布局。Konfiguracja automatycznego podziału wiersza
Android zaczął obsługiwać podziały wierszy oparte na wyrażenia w języku japońskim i koreańskim od
Android 13 (poziom API 33). Mimo że podziały wierszy oparte na wyrażeniach poprawiają
czytelność krótkich wierszy tekstu, dlatego nie sprawdzają się w przypadku długich wierszy.
Na Androidzie 15 aplikacje mogą stosować podziały wierszy oparte na wyrażeniach tylko w przypadku krótkich wierszy
tekstu, za pomocą funkcji LINE_BREAK_WORD_STYLE_AUTO
. Ta opcja powoduje wybranie najlepszej opcji stylu tekstu dla tekstu.
W przypadku krótkich wierszy tekstu stosuje się znaki końca wiersza oparte na frazie, które działają tak samo jak LINE_BREAK_WORD_STYLE_PHRASE
, jak pokazano na poniższym obrazie:

LINE_BREAK_WORD_STYLE_AUTO
stosuje podziały wierszy oparte na wyrażeniach, aby poprawić czytelność tekstu.
Ta metoda działa tak samo jak stosowana
LINE_BREAK_WORD_STYLE_PHRASE
.W przypadku dłuższych wierszy tekstu LINE_BREAK_WORD_STYLE_AUTO
używa operatora nie
stylu słów podziału wiersza, który działa tak samo jak
LINE_BREAK_WORD_STYLE_NONE
, jak widać w tabeli
ten obraz:

LINE_BREAK_WORD_STYLE_AUTO
nie stosuje się stylu łamania wiersza, aby poprawić czytelność tekstu.
Ta metoda działa tak samo jak stosowana
LINE_BREAK_WORD_STYLE_NONE
.Dodatkowa czcionka japońska Hentaigana
在 Android 15 中,旧版日语平假名(也称为 Hentaigana)字体文件 捆绑在一起半形人物的独特形状可以增加 风格或设计独特的风格 传播和理解古代日本文件的能力。

VideoLAN cone Copyright (c) 1996-2010 VideoLAN. To logo lub jego zmodyfikowana wersja może być używane lub modyfikowane przez dowolną osobę w odniesieniu do projektu VideoLAN lub dowolnego produktu opracowanego przez zespół VideoLAN, ale nie oznacza poparcia przez projekt.
Vulkan i logo Vulkan są zastrzeżonymi znakami towarowymi Khronos Group Inc.
OpenGL jest zastrzeżonym znakiem towarowym, a logo OpenGL ES jest znakiem towarowym firmy Hewlett Packard Enterprise używanym za zgodą Khronos.