اندروید 15 ویژگی ها و API های عالی را برای توسعه دهندگان معرفی می کند. بخشهای زیر این ویژگیها را خلاصه میکنند تا به شما در شروع کار با APIهای مرتبط کمک کنند.
برای فهرست دقیق APIهای اضافه شده، اصلاح شده و حذف شده، گزارش تفاوت API را بخوانید. برای جزئیات بیشتر در مورد APIهای اضافه شده به مرجع Android API مراجعه کنید — برای Android 15، به دنبال APIهایی باشید که در سطح API 35 اضافه شده اند. برای اطلاع از مناطقی که تغییرات پلت فرم ممکن است بر برنامه های شما تأثیر بگذارد، حتماً تغییرات رفتار Android 15 را برای برنامه هایی که اندروید 15 و برای همه برنامه ها را هدف قرار دهید.
دوربین و رسانه
اندروید 15 شامل ویژگیهای مختلفی است که تجربه دوربین و رسانه را بهبود میبخشد و به شما امکان میدهد به ابزارها و سختافزارهایی برای حمایت از سازندگان برای زنده کردن دیدگاهشان در اندروید دسترسی داشته باشید.
برای اطلاعات بیشتر در مورد جدیدترین ویژگیها و راهحلهای برنامهنویس برای رسانه و دوربین Android، به بحث ساخت رسانهها و تجربههای دوربین مدرن Android از Google I/O مراجعه کنید.
تقویت نور کم
اندروید 15 کم نور ، حالت نوردهی خودکار را معرفی می کند که هم برای دوربین 2 و هم برای پسوند دوربین حالت شب در دسترس است. Low Light Boost نوردهی جریان پیش نمایش را در شرایط کم نور تنظیم می کند. این با نحوه ایجاد تصاویر ثابت توسط پسوند دوربین حالت شب متفاوت است، زیرا حالت شب مجموعه ای از عکس ها را برای ایجاد یک تصویر واحد و پیشرفته ترکیب می کند. در حالی که حالت شب برای ایجاد یک تصویر ثابت بسیار خوب عمل می کند، نمی تواند یک جریان مداوم از فریم ها ایجاد کند، اما Low Light Boost می تواند. بنابراین، Low Light Boost قابلیت های دوربین را فعال می کند، مانند:
- ارائه یک پیشنمایش تصویر پیشرفته، بنابراین کاربران بهتر میتوانند عکسهای خود را در نور کم قاب کنند
- اسکن کدهای QR در نور کم
اگر Low Light Boost را فعال کنید، هنگامی که سطح نور کم باشد به طور خودکار روشن می شود و زمانی که نور بیشتر باشد خاموش می شود.
برنامهها میتوانند جریان پیشنمایش را در شرایط کمنور ضبط کنند تا یک ویدیوی روشن را ذخیره کنند.
برای اطلاعات بیشتر، Low Light Boost را ببینید.
کنترل های دوربین درون برنامه ای
اندروید 15 یک افزونه برای کنترل بیشتر بر سخت افزار دوربین و الگوریتم های آن در دستگاه های پشتیبانی شده اضافه می کند:
- تنظیمات پیشرفته قدرت فلاش که امکان کنترل دقیق شدت فلاش را در هر دو حالت
SINGLE
وTORCH
در هنگام ثبت تصاویر فراهم می کند.
کنترل فضای سر HDR
Android 15 会选择适合底层设备功能和面板的位深的 HDR 余量。对于包含大量 SDR 内容的页面(例如显示单个 HDR 缩略图的即时通讯应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。Android 15 允许您使用 setDesiredHdrHeadroom
控制 HDR 余量,以在 SDR 和 HDR 内容之间取得平衡。
کنترل بلندی صدا
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,可实现无缝应用集成。
دستگاه های مجازی MIDI 2.0
Android 13 برای اتصال به دستگاههای MIDI 2.0 با استفاده از USB ، که با استفاده از بستههای جهانی MIDI (UMP) ارتباط برقرار میکنند، پشتیبانی اضافه کرد. Android 15 پشتیبانی UMP را به برنامههای MIDI مجازی گسترش میدهد، و برنامههای ترکیب را قادر میسازد تا برنامههای سینتیسایزر را بهعنوان یک دستگاه مجازی MIDI 2.0 مانند دستگاههای USB MIDI 2.0 کنترل کنند.
رمزگشایی نرم افزار AV1 کارآمدتر
dav1d(VideoLAN 中广受欢迎的 AV1 软件解码器)现已可用于在硬件中不支持 AV1 解码的 Android 设备。dav1d 的性能比旧版 AV1 软件解码器的性能高 3 倍,可让更多用户(包括一些中低层级的设备)播放高清 AV1 视频。
目前,您的应用需要通过调用 dav1d 名称 "c2.android.av1-dav1d.decoder"
来选择使用 dav1d。在后续更新中,dav1d 将成为默认的 AV1 软件解码器。这项支持已标准化,并向后移植到接收 Google Play 系统更新的 Android 11 设备。
بهره وری توسعه دهندگان و ابزار
در حالی که بیشتر کار ما برای بهبود بهرهوری شما حول ابزارهایی مانند Android Studio ، Jetpack Compose ، و کتابخانههای Android Jetpack متمرکز است، ما همیشه به دنبال راههایی در این پلتفرم هستیم تا به شما کمک کند راحتتر به دیدگاه خود پی ببرید.
به روز رسانی OpenJDK 17
Android 15 会继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致。
其中包含以下主要功能和改进:
- 改进了 NIO 缓冲区的使用寿命
- 信息流
- 其他
math
和strictmath
方法 util
软件包更新,包括有序的collection
、map
和set
Deflater
中的ByteBuffer
支持- 安全更新,例如
X500PrivateCredential
和安全密钥更新
这些 API 通过 Google Play 系统更新在超过 10 亿台搭载 Android 12(API 级别 31)及更高版本的设备上进行了更新,让您能够以最新的编程功能为目标平台。
پیشرفت های 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
。
اصلاحات تغییر خودکار زبان
Android 14 增加了设备端音频中的多语言识别功能,可在语言之间自动切换,但这可能会导致单词丢失,尤其是在语言切换时,两种话语之间的停顿较少时。Android 15 添加了额外的控件,可帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
会将自动切换限制为仅在音频会话开始时进行,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
则会在指定次数的切换后停用语言切换。如果您希望自动检测到会话期间只讲一种语言,这些选项特别有用。
API فونت متغیر OpenType بهبود یافته است
اندروید 15 قابلیت استفاده از فونت متغیر OpenType را بهبود می بخشد. شما می توانید یک نمونه FontFamily
از یک فونت متغیر بدون تعیین محورهای وزنی با API buildVariableFamily
ایجاد کنید. ارائهدهنده متن، مقدار محور wght
را لغو میکند تا با متن نمایش داده شده مطابقت داشته باشد.
استفاده از API کد ایجاد Typeface
را به میزان قابل توجهی ساده می کند:
کاتلین
val newTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build()
جاوا
Typeface newTypeface = Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build();
قبلاً، برای ایجاد همان Typeface
، به کد بسیار بیشتری نیاز داشتید:
کاتلین
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()
جاوا
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();
در اینجا مثالی از نحوه رندر یک Typeface
ایجاد شده با APIهای قدیمی و جدید آورده شده است:
در این مثال، Typeface
ایجاد شده با API قدیمی توانایی ایجاد وزن فونت های دقیق برای نمونه های Font
350، 450، 550 و 650 را ندارد، بنابراین رندر به نزدیک ترین وزن باز می گردد. بنابراین در این حالت به جای 350 عدد 300 و به جای 450 عدد 400 و به همین ترتیب رندر می شود. در مقابل، Typeface
ایجاد شده با APIهای جدید به صورت پویا یک نمونه Font
برای وزن مشخص ایجاد می کند، بنابراین وزن های دقیق برای 350، 450، 550 و 650 نیز ارائه می شود.
کنترل های شکست خط دانه ای
با شروع در اندروید 15، یک TextView
و خط شکن زیرین میتوانند بخش داده شده از متن را در همان خط حفظ کنند تا خوانایی را بهبود بخشند. شما می توانید با استفاده از تگ <nobreak>
در منابع رشته یا createNoBreakSpan
از این سفارشی سازی خط شکن استفاده کنید. به طور مشابه، میتوانید با استفاده از تگ <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>
تفاوت در نحوه رندر شدن این رشته ها در تصاویر زیر نشان داده شده است:
بایگانی برنامه
Android 和 Google Play 宣布支持最后的应用归档功能 年,这让用户可以通过移除部分内容来释放空间 通过 Android 应用发布的设备中不常用的应用 前往 Google Play 下载套装。Android 15 在操作系统级别支持应用归档和解压缩,让所有应用商店都能更轻松地实现归档和解压缩。
具有 REQUEST_DELETE_PACKAGES
权限的应用可以调用
PackageInstaller
requestArchive
方法请求归档
已安装的应用软件包,这会移除 APK 和所有缓存的文件,但会保留
用户数据已归档的应用会通过 LauncherApps
API 作为可显示的应用返回;用户会看到一个界面处理,以突出显示这些应用已归档。如果用户点按已归档的应用,负责安装的应用会收到解除归档请求,并且可以通过 ACTION_PACKAGE_ADDED
广播监控恢复过程。
使用开发者选项在设备上启用 16 KB 模式
从 Android 15 QPR1 开始,您可以使用某些设备上提供的开发者选项,以 16 KB 模式启动设备并执行设备端测试。
此开发者选项适用于以下设备:
- Pixel 8 和 Pixel 8 Pro(搭载 Android 15 QPR1 或更高版本)
- Pixel 8a(搭载 Android 15 QPR1 或更高版本)
گرافیک
اندروید 15 جدیدترین پیشرفتهای گرافیکی، از جمله ANGLE و اضافهشدهها به سیستم گرافیکی Canvas را به ارمغان میآورد.
مدرن کردن دسترسی به پردازنده گرافیکی اندروید
从早期开始,核心操作系统在单个 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 路线图
作为简化 GPU 堆栈的一部分,今后我们将在更多新设备上以 GL 系统驱动程序的形式提供 ANGLE,预计未来将只能通过 ANGLE 使用 OpenGL/ES。不过,我们计划在所有设备上继续支持 OpenGL ES。
建议的后续措施
使用开发者选项选择适用于 OpenGL ES 的 ANGLE 驱动程序并测试您的应用。对于新项目,我们强烈建议您使用适用于 C/C++ 的 Vulkan。
بهبودهایی برای بوم
Android 15 继续对 Android 的 Canvas 图形系统进行现代化改造,并增添了新功能:
Matrix44
提供了一个用于转换坐标的 4x4 矩阵,当您想要处理 3D 画布时,应使用此矩阵。clipShader
将当前裁剪与指定着色器相交,而clipOutShader
会将裁剪设置为当前裁剪和着色器的差异,其中各自将着色器视为 Alpha 蒙版。这有助于高效绘制复杂形状。
عملکرد و باتری
Android به تمرکز خود بر کمک به شما در بهبود عملکرد و کیفیت برنامههایتان ادامه میدهد. Android 15 API هایی را معرفی می کند که به کارآمدتر کردن وظایف در برنامه شما برای اجرا، بهینه سازی عملکرد برنامه و جمع آوری اطلاعات بینش در مورد برنامه های شما کمک می کند.
برای بهترین روشهای کارآمد باتری، اشکالزدایی شبکه و مصرف انرژی، و جزئیات نحوه بهبود کارایی باتری در کار پسزمینه در Android 15 و نسخههای اخیر Android، به بهبود کارایی باتری کار پسزمینه در بحث Android از Google I/ مراجعه کنید. O.
API ApplicationStartInfo
在以前的 Android 版本中,应用启动有点神秘。在应用中确定应用是从冷状态、温状态还是热状态开始的过程很难确定。此外,我们也很难知道您的应用在不同发布阶段所用的时间:创建进程分支、调用 onCreate
、绘制第一帧等。在实例化 Application
类时,您无法得知应用是从广播、content provider、作业、备份、启动完成、闹钟还是 Activity
启动的。
Android 15 上的 ApplicationStartInfo
API 可提供所有这些功能以及更多其他功能。您甚至可以选择将自己的时间戳添加到流程中,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo
直接优化应用启动;例如,当应用因广播而启动时,您可以避免在 Application
类中实例化界面相关库的高成本。
اطلاعات دقیق اندازه برنامه
از Android 8.0 (سطح API 26)، Android دارای StorageStats.getAppBytes
API است که اندازه نصب شده یک برنامه را به صورت یک تعداد بایت خلاصه می کند، که مجموع اندازه APK، اندازه فایل های استخراج شده از APK است. و فایل هایی که روی دستگاه تولید شده اند مانند کدهای کامپایل شده پیش از زمان (AOT). این عدد از نظر نحوه استفاده برنامه شما از فضای ذخیرهسازی خیلی روشنکننده نیست.
Android 15 API StorageStats.getAppBytesByDataType([type])
را اضافه می کند، که به شما امکان می دهد بینشی در مورد نحوه استفاده برنامه شما از این فضا، از جمله تقسیم فایل های APK، AOT و کدهای مربوط به سرعت بخشیدن، داده های dex، کتابخانه ها و نمایه های هدایت شونده داشته باشید.
پروفایل مدیریت شده توسط برنامه
Android 15 شامل کلاس ProfilingManager
است که به شما امکان میدهد اطلاعات پروفایل را از داخل برنامه خود جمعآوری کنید، مانند heap dumps، heap profiles، stack sampling و موارد دیگر. این یک تگ ارائه شده برای شناسایی فایل خروجی که به دایرکتوری فایل های برنامه شما تحویل داده می شود، به برنامه شما پاسخ تماس می دهد. API برای به حداقل رساندن تأثیر عملکرد، نرخ را محدود می کند.
برای سادهسازی درخواستهای نمایهسازی در برنامهتان، توصیه میکنیم از Profiling
AndroidX API مربوطه، موجود در Core 1.15.0-rc01 یا بالاتر استفاده کنید.
بهبود پایگاه داده 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 语句,从而绕过便利 及其可能产生的任何额外处理开销。
بهروزرسانیهای چارچوب عملکرد پویا اندروید
Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاههای پشتیبانیشده، Android 15 قابلیتهای ADPF را اضافه میکند:
- یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
- مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
- آستانههای دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیشبینی فضای سر.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از ADPF در برنامه ها و بازی های خود، به مستندات مراجعه کنید .
،Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاههای پشتیبانیشده، Android 15 قابلیتهای ADPF را اضافه میکند:
- یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
- مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
- آستانههای دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیشبینی فضای سر.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از ADPF در برنامه ها و بازی های خود، به مستندات مراجعه کنید .
،Android 15 به سرمایه گذاری ما در Android Dynamic Performance Framework (ADPF) ادامه می دهد، مجموعه ای از API ها که به بازی ها و برنامه های فشرده عملکرد اجازه می دهد تا به طور مستقیم با سیستم های قدرت و حرارت دستگاه های Android ارتباط برقرار کنند. در دستگاههای پشتیبانیشده، Android 15 قابلیتهای ADPF را اضافه میکند:
- یک حالت بهره وری انرژی برای جلسات راهنمایی که نشان می دهد رشته های مرتبط آنها باید صرفه جویی در مصرف انرژی را به عملکرد ترجیح دهند، که برای بارهای کاری پس زمینه طولانی مدت عالی است.
- مدت زمان کار GPU و CPU را می توان هر دو در جلسات راهنمایی گزارش کرد و به سیستم اجازه می دهد فرکانس های CPU و GPU را با هم تنظیم کند تا به بهترین شکل نیازهای بار کاری را برآورده کند.
- آستانههای دمایی برای تفسیر وضعیت احتمالی درگیری حرارتی بر اساس پیشبینی فضای سر.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از ADPF در برنامه ها و بازی های خود، به مستندات مراجعه کنید .
حریم خصوصی
اندروید 15 دارای ویژگی های مختلفی است که به توسعه دهندگان اپلیکیشن کمک می کند تا از حریم خصوصی کاربران محافظت کنند.
تشخیص ضبط صفحه
Android 15 增加了对应用的支持,以检测 正在录制。每当应用转换时,系统都会调用回调 在屏幕录制内容中处于可见与隐藏状态之间。如果正在记录注册进程的 UID 拥有的 activity,则系统会将应用视为可见。这样一来,如果您的应用执行敏感操作,您就可以告知用户正在录制他们的操作。
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)
}
قابلیت های IntentFilter گسترش یافته است
Android 15 通过 UriRelativeFilterGroup
支持更精确的 Intent
解析,UriRelativeFilterGroup
包含一组 UriRelativeFilter
对象,这些对象构成一组必须满足的 Intent
匹配规则,包括网址查询参数、网址片段以及屏蔽或排除规则。
您可以在 AndroidManifest
XML 文件中使用 <uri-relative-filter-group>
标记来定义这些规则,该标记可以包含 android:allow
标记。这些代码可以包含使用现有数据代码属性以及 android:query
和 android:fragment
属性的 <data>
代码。
下面是一个 AndroidManifest
语法示例:
<intent-filter>
<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: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>
فضای خصوصی
私密空间可让用户在设备上创建单独的空间 保护敏感应用免遭窥探, 身份验证。私密空间使用单独的用户个人资料。用户可以 选择为私密空间使用设备锁定或单独的锁定因素。
私密空间中的应用显示在启动器中的单独容器中,并且 不会显示在“最近用过”视图、通知、设置和其他应用中 在私密空间处于锁定状态时显示通知用户生成的内容(例如 媒体或文件),而账号会在私密空间和 主空间系统 Sharesheet 和 照片选择器:用于授权应用访问内容
用户无法将现有应用及其数据移至私密空间。相反, 用户在私密空间中选择安装选项,以便使用 无论他们喜欢哪家应用商店私密空间中的应用会以下列身份安装: 来自主空间中任何应用的单独副本(同一应用的新副本)。
当用户锁定私密空间后,系统会停用相应个人资料。而配置文件 已停止,私密空间中的应用不再有效,无法执行 前台或后台 activity,包括显示通知。
我们建议您使用私密空间测试您的应用,以确保您的应用 按预期运行,尤其是当应用属于以下某种情况时 类别:
- 具有工作资料逻辑的应用(假定任何 不在主资料中的已安装应用副本 工作资料。
- 医疗应用
- 启动器应用
- 应用商店中的应用
آخرین انتخاب کاربر را برای دسترسی به عکسهای انتخابی جستجو کنید
برنامهها اکنون میتوانند تنها عکسها و ویدیوهایی را که اخیراً انتخاب شدهاند، در صورت اعطای دسترسی جزئی به مجوزهای رسانه، برجسته کنند. این ویژگی میتواند تجربه کاربری را برای برنامههایی که اغلب درخواست دسترسی به عکسها و ویدیوها را دارند، بهبود بخشد. برای استفاده از این ویژگی در برنامه خود، هنگام درخواست MediaStore
از طریق ContentResolver
آرگومان QUERY_ARG_LATEST_SELECTION_ONLY
را فعال کنید.
کاتلین
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() ) )
جاوا
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 15 شامل جدیدترین برنامههای افزودنی Android Ad Services است که جدیدترین نسخه جعبه ایمنی حریم خصوصی در Android را در خود جای داده است. این افزوده بخشی از کار ما برای توسعه فناوریهایی است که حریم خصوصی کاربر را بهبود میبخشد و تجربههای تبلیغاتی شخصی و مؤثر را برای برنامههای تلفن همراه امکانپذیر میسازد. صفحه جعبه ایمنی حریم خصوصی ما اطلاعات بیشتری درباره Privacy Sandbox در برنامههای پیشنمایش برنامهنویس Android و بتا دارد تا به شما در شروع کار کمک کند.
Health Connect
Android 15 جدیدترین برنامههای افزودنی پیرامون Health Connect توسط Android را یکپارچه میکند، یک پلتفرم امن و متمرکز برای مدیریت و اشتراکگذاری دادههای سلامت و تناسب اندام جمعآوریشده توسط برنامه. این بهروزرسانی از انواع دادههای اضافی در تناسب اندام ، تغذیه ، دمای پوست، برنامههای تمرینی و موارد دیگر پشتیبانی میکند.
ردیابی دمای پوست به کاربران این امکان را می دهد که داده های دمایی دقیق تری را از یک دستگاه پوشیدنی یا دستگاه ردیابی دیگر ذخیره و به اشتراک بگذارند.
برنامه های تمرینی برنامه های تمرینی ساختاری برای کمک به کاربر برای دستیابی به اهداف تناسب اندام خود هستند. پشتیبانی برنامه های آموزشی شامل انواع اهداف تکمیل و عملکرد است:
- اهداف تکمیل در مورد کالری سوزانده شده ، مسافت ، مدت زمان ، تکرار ، و مراحل .
- اهداف عملکردی حول هرچه بیشتر تکرارها (AMRAP) ، آهنگ ، ضربان قلب ، قدرت ، میزان تلاش درک شده و سرعت .
درباره آخرین بهروزرسانیهای Health Connect در Android در تجربههای سازگار با Android Health از Google I/O در ساختمان، بیشتر بیاموزید.
،Android 15 جدیدترین برنامههای افزودنی پیرامون Health Connect توسط Android را یکپارچه میکند، یک پلتفرم امن و متمرکز برای مدیریت و اشتراکگذاری دادههای سلامت و تناسب اندام جمعآوریشده توسط برنامه. این بهروزرسانی از انواع دادههای اضافی در تناسب اندام ، تغذیه ، دمای پوست، برنامههای تمرینی و موارد دیگر پشتیبانی میکند.
ردیابی دمای پوست به کاربران این امکان را می دهد که داده های دمایی دقیق تری را از یک دستگاه پوشیدنی یا دستگاه ردیابی دیگر ذخیره و به اشتراک بگذارند.
برنامه های تمرینی برنامه های تمرینی ساختاری برای کمک به کاربر برای دستیابی به اهداف تناسب اندام خود هستند. پشتیبانی برنامه های آموزشی شامل انواع اهداف تکمیل و عملکرد است:
- اهداف تکمیل در مورد کالری سوزانده شده ، مسافت ، مدت زمان ، تکرار ، و مراحل .
- اهداف عملکردی حول هرچه بیشتر تکرارها (AMRAP) ، آهنگ ، ضربان قلب ، قدرت ، میزان تلاش درک شده و سرعت .
درباره آخرین بهروزرسانیهای Health Connect در Android در تجربههای سازگار با Android Health از Google I/O در ساختمان، بیشتر بیاموزید.
اشتراک گذاری صفحه نمایش برنامه
Android 15 支持应用屏幕共享,因此用户可以仅共享或录制应用窗口,而不是整个设备屏幕。此功能首次在 Android 14 QPR2 中启用,包含 MediaProjection
回调,可让您的应用自定义应用屏幕共享体验。请注意,对于以 Android 14(API 级别 34)或更高版本为目标平台的应用,每个 MediaProjection
捕获会话都需要征得用户同意。
تجربه کاربری و رابط کاربری سیستم
اندروید 15 به توسعه دهندگان و کاربران برنامه کنترل و انعطاف بیشتری را برای پیکربندی دستگاه خود مطابق با نیازهایشان می دهد.
برای کسب اطلاعات بیشتر در مورد نحوه استفاده از آخرین پیشرفتها در Android 15 برای بهبود تجربه کاربری برنامه، به بحث بهبود تجربه کاربری برنامه Android خود از Google I/O مراجعه کنید.
پیشنمایشهای غنیتر ویجت با Generated Previews API
在 Android 15 之前,提供微件选择器预览的唯一方法是指定静态图片或布局资源。这些预览通常与放置在主屏幕上的实际 widget 的外观大不相同。此外,由于无法使用 Jetpack Glance 创建静态资源,因此“资讯一览” 开发者必须为其微件截屏或创建 XML 布局, 微件预览。
Android 15 添加了对生成的预览的支持。这意味着,应用微件提供程序可以生成 RemoteViews
以用作选择器预览,而不是静态资源。
推送 API
应用可以通过推送 API 提供生成的预览。应用可以提供
预览,并且不会收到明确的请求,
以提供预览。预览会保留在 AppWidgetService
中,并且主持人可以按需请求预览。以下示例加载了一个 XML 微件
并将其设置为预览:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
预期的流程如下:
- 任何时候,widget 提供程序都会调用
setWidgetPreview
。提供的预览会与其他提供方信息一起保留在AppWidgetService
中。 setWidgetPreview
会通过AppWidgetHost.onProvidersChanged
回调。作为回应,微件宿主会重新加载其所有提供方信息。- 显示微件预览时,主机会检查
AppWidgetProviderInfo.generatedPreviewCategories
,如果所选类别可用,则调用AppWidgetManager.getWidgetPreview
以返回此提供程序的已保存预览。
何时调用 setWidgetPreview
由于没有用于提供预览的回调,因此应用可以选择在运行期间的任何时间发送预览。预览的更新频率取决于微件的用例。
以下列表介绍了两大类预览用例:
- 在 widget 预览中显示真实数据(例如个性化数据)的提供程序 或最新信息。这些提供商可以设置预览 已登录 Google 账号或已在其应用中完成初始配置。之后 可以设置一项定期任务,按照所选的节奏更新预览。 此类 widget 的示例包括照片、日历、天气或新闻 widget。
- 在预览中显示静态信息或不显示任何数据的快捷操作 widget 的提供程序。这些提供程序可以在应用首次启动时设置预览一次。例如,快速开车便是此类微件的示例 操作 widget 或 Chrome 快捷方式 widget。
某些提供商可能会在基座接入模式选择器上显示静态预览,但真实的 信息。这些提供商应遵循指南 设置预览
تصویر در تصویر
Android 15 对画中画 (PiP) 模式进行了更改,确保在进入画中画模式时实现更流畅的转换。对于在主界面上叠加界面元素的应用,这将非常有用,因为这些元素会进入 PiP。
开发者使用 onPictureInPictureModeChanged
回调来定义用于切换叠加界面元素可见性的逻辑。当 PiP 进入或退出动画完成时,系统会触发此回调。从 Android 15 开始,PictureInPictureUiState
类包含另一种状态。
在这种界面状态下,以 Android 15(API 级别 35)为目标平台的应用会在画中画动画开始后立即观察到使用 isTransitioningToPip()
调用的 Activity#onPictureInPictureUiStateChanged
回调。在 PiP 模式下,许多界面元素与应用无关,例如包含建议、即将播放的视频、评分和标题等信息的视图或布局。当应用进入画中画模式时,请使用 onPictureInPictureUiStateChanged
回调隐藏这些界面元素。当应用从画中画窗口进入全屏模式时,请使用 onPictureInPictureModeChanged
回调取消隐藏这些元素,如以下示例所示:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
不相关界面元素(适用于画中画窗口)的这种快速可见性切换有助于确保画中画进入动画更流畅、不闪烁。
قوانین مزاحم نشوید بهبود یافته است
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
triggerDescription
string toAutomaticZenRule
that describes the conditions on which the rule should become active for the user. - Added
ZenDeviceEffects
toAutomaticZenRule
, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.
VibrationEffect را برای کانال های اعلان تنظیم کنید
Android 15 支持为传入的通知设置丰富的振动,方法是
频道使用的是NotificationChannel.setVibrationEffect
,因此
您的用户可以区分不同类型的通知
不需要看他们的设备
تراشه نوار وضعیت نمایش رسانه و توقف خودکار
媒体投影可能会泄露用户的私密信息。一个醒目的新状态栏条状标签可让用户了解任何正在进行的屏幕投影。用户可以点按该条状标签停止投屏、共享或录制屏幕。此外,为了提供更直观的用户体验,当设备屏幕锁定后,所有正在进行的屏幕投影都会自动停止。
صفحه نمایش بزرگ و عوامل شکل
Android 15 به برنامههای شما پشتیبانی میکند تا از فاکتورهای فرم اندروید، از جمله صفحهنمایشهای بزرگ، قابلیتهای تاشو، و تاشو نهایت استفاده را ببرند.
چندوظیفه ای با صفحه نمایش بزرگ بهبود یافته است
اندروید 15 راه های بهتری را برای چندوظیفگی در دستگاه های صفحه نمایش بزرگ به کاربران ارائه می دهد. برای مثال، کاربران میتوانند ترکیبهای برنامههای تقسیمشده مورد علاقه خود را برای دسترسی سریع ذخیره کنند و نوار وظیفه را روی صفحه پین کنند تا به سرعت بین برنامهها جابجا شوند. این بدان معنی است که اطمینان از تطبیق بودن برنامه شما مهمتر از همیشه است.
Google I/O جلساتی در مورد ساخت برنامههای Android تطبیقی و Building UI با کتابخانه تطبیقی Material 3 دارد که میتواند به شما کمک کند، و اسناد ما بیشتر برای کمک به طراحی برای صفحههای بزرگ به شما کمک میکند.
پشتیبانی از صفحه نمایش پوششی
برنامه شما میتواند ویژگیای را اعلام کند که Android 15 از آن استفاده میکند تا به Application
یا Activity
شما اجازه دهد روی صفحهنمایشهای کوچک روی جلد دستگاههای قابل انعطاف پشتیبانیشده ارائه شود. این صفحهها بسیار کوچک هستند و نمیتوان آنها را بهعنوان اهداف سازگار برای اجرای برنامههای Android در نظر گرفت، اما برنامه شما میتواند از آنها پشتیبانی کند و برنامه شما را در مکانهای بیشتری در دسترس قرار دهد.
قابلیت اتصال
Android 15 پلتفرم را به روز می کند تا برنامه شما به آخرین پیشرفت ها در زمینه ارتباطات و فناوری های بی سیم دسترسی داشته باشد.
پشتیبانی ماهواره ای
Android 15 继续扩大对卫星连接的平台支持,并包含一些界面元素,以确保在整个卫星连接环境中提供一致的用户体验。
应用可以使用 ServiceState.isUsingNonTerrestrialNetwork()
执行以下操作:
检测设备是否连接到卫星,让他们更清楚地了解
可能会导致完全网络服务不可用的原因此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接发送和接收消息。
تجربه های روان تر NFC
Android 15 در تلاش است تا تجربه پرداخت یکپارچهتر و قابلاطمینانتر را ایجاد کند و در عین حال به پشتیبانی از اکوسیستم قدرتمند برنامه NFC اندروید ادامه دهد. در دستگاههای پشتیبانیشده، برنامهها میتوانند از NfcAdapter
درخواست کنند تا وارد حالت مشاهده شود، جایی که دستگاه گوش میدهد اما به خوانندههای NFC پاسخ نمیدهد و اشیاء PollingFrame
سرویس NFC برنامه را برای پردازش ارسال میکند. اشیاء PollingFrame
را می توان برای احراز هویت قبل از اولین ارتباط با خواننده NFC استفاده کرد که در بسیاری از موارد امکان تراکنش با یک ضربه را فراهم می کند.
علاوه بر این، برنامهها میتوانند فیلتری را روی دستگاههای پشتیبانیشده ثبت کنند تا بتوانند از فعالیت حلقه نظرسنجی مطلع شوند، که امکان عملکرد روان با چندین برنامه کاربردی NFC آگاه را فراهم میکند.
نقش کیف پول
Android 15 引入了一个新的钱包角色,可让您与用户首选的钱包应用更紧密地集成。此角色取代了 NFC 默认的感应式付款设置。用户可以通过导航到设置 > 应用 > 默认应用来管理 Google 钱包角色持有者。
在为付款类别中注册的 AID 路由 NFC 触碰时,可使用“钱包”角色。除非已在前台运行为同一 AID 注册的另一个应用,否则点按操作会始终转到钱包角色持有者。
此角色还可用于确定钱包“快速访问”功能块在启用后应转到的位置。当角色设置为“无”时,“快速访问”功能块不可用,并且付款类别 NFC 触碰仅会传送到前台应用。
امنیت
Android 15 به شما کمک می کند امنیت برنامه خود را افزایش دهید، از داده های برنامه خود محافظت کنید، و به کاربران شفافیت و کنترل بیشتری بر روی داده های خود می دهد. برای اطلاعات بیشتر در مورد کارهایی که برای بهبود ایمنی کاربر و محافظت از برنامه شما در برابر تهدیدات جدید انجام می دهیم، گفتگوی حفاظت از امنیت کاربر در Android را از Google I/O ببینید.
مدیریت اعتبار را با تکمیل خودکار ادغام کنید
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.
ثبتنام و ورود با یک ضربه را با اعلانهای بیومتریک ادغام کنید
Credential Manager将生物识别提示集成到凭据创建过程中 和登录流程,这样提供商就无需管理 生物识别提示。因此,凭据提供程序只需专注于创建和获取流程的结果,并辅以生物识别流程结果。这一简化的流程创建了更高效、更精简的凭据 创建和检索过程。
مدیریت کلید برای رمزگذاری سرتاسر
ما E2eeContactKeysManager
را در اندروید 15 معرفی می کنیم که رمزگذاری سرتاسر (E2EE) را در برنامه های اندرویدی شما با ارائه یک API در سطح سیستم عامل برای ذخیره کلیدهای عمومی رمزنگاری تسهیل می کند.
E2eeContactKeysManager
برای ادغام با برنامه مخاطبین پلتفرم طراحی شده است تا به کاربران راهی متمرکز برای مدیریت و تأیید کلیدهای عمومی مخاطبینشان بدهد.
مجوزهای URI محتوا را بررسی می کند
Android 15 引入了一组可对内容 URI 执行权限检查的新 API:
Context.checkContentUriPermissionFull
:这会对内容 URI 执行完整的权限检查。Activity
清单属性requireContentUriPermissionFromCaller
:这会在 activity 启动时,对提供的内容 URI 强制执行指定权限。Activity
调用方的ComponentCaller
类:这表示启动 activity 的应用。
قابلیت دسترسی
اندروید 15 ویژگی هایی را اضافه می کند که دسترسی کاربران را بهبود می بخشد.
خط بریل بهتر
در Android 15، ما این امکان را برای TalkBack فراهم کردهایم که از نمایشگرهای بریل که از استاندارد HID از طریق USB و بلوتوث ایمن استفاده میکنند، پشتیبانی کند.
این استاندارد، دقیقاً مشابه استانداردی که توسط ماوس ها و صفحه کلیدها استفاده می شود، به اندروید کمک می کند تا در طول زمان از طیف وسیع تری از نمایشگرهای بریل پشتیبانی کند.
بین المللی شدن
اندروید 15 ویژگیها و قابلیتهایی را اضافه میکند که تجربه کاربر را در هنگام استفاده از دستگاه به زبانهای مختلف تکمیل میکند.
فونت متغیر CJK
با شروع Android 15، فایل فونت برای زبان های چینی، ژاپنی و کره ای (CJK)، NotoSansCJK، اکنون یک فونت متغیر است. فونت های متغیر فرصت هایی را برای تایپوگرافی خلاقانه در زبان های CJK باز می کنند. طراحان میتوانند طیف وسیعتری از سبکها را بررسی کنند و طرحبندیهای بصری چشمگیری ایجاد کنند که قبلاً دستیابی به آنها دشوار یا غیرممکن بود.
توجیه بین شخصیتی
从 Android 15 开始,可以通过
使用 JUSTIFICATION_MODE_INTER_CHARACTER
。“字词间的理由”原为
最初是在 Android 8.0(API 级别 26)中引入的,
Justifications 功能为使用
例如中文、日语等。
پیکربندی خودکار شکست خط
Android 从以下语言开始支持基于短语的日语和韩语换行:
Android 13(API 级别 33)。不过,虽然基于短语的行分隔符可以提高短文本行的可读性,但对于长文本行,效果并不理想。在 Android 15 中,应用只能使用 LINE_BREAK_WORD_STYLE_AUTO
选项,针对短文本行应用基于短语的行分隔符。此选项会为文本选择最佳字词样式选项。
对于短文本行,则使用基于短语的换行符,功能相同
为 LINE_BREAK_WORD_STYLE_PHRASE
,如
以下图片:
对于较长的文本行,LINE_BREAK_WORD_STYLE_AUTO
会使用 no
换行字词样式,
LINE_BREAK_WORD_STYLE_NONE
,如
以下图片:
فونت ژاپنی Hentaigana اضافی
در اندروید 15، یک فایل فونت برای هیراگانای ژاپنی قدیمی (معروف به Hentaigana) به طور پیش فرض همراه است. اشکال منحصربهفرد شخصیتهای هنتایگانا میتواند استعدادی متمایز به آثار هنری یا طراحی اضافه کند و در عین حال به حفظ انتقال دقیق و درک اسناد باستانی ژاپنی کمک کند.
مخروط VideoLAN حق چاپ (ج) 1996-2010 VideoLAN. این لوگو یا نسخه اصلاح شده ممکن است توسط هر کسی برای ارجاع به پروژه VideoLAN یا هر محصولی که توسط تیم VideoLAN توسعه داده شده است استفاده یا اصلاح شود، اما نشان دهنده تایید پروژه نیست.
Vulkan و لوگوی Vulkan علائم تجاری ثبت شده شرکت Khronos Group هستند.
OpenGL یک علامت تجاری ثبت شده است و لوگوی OpenGL ES یک علامت تجاری Hewlett Packard Enterprise است که با مجوز Khronos استفاده می شود.