অ্যান্ড্রয়েড 14 প্ল্যাটফর্মে এমন আচরণের পরিবর্তন রয়েছে যা আপনার অ্যাপকে প্রভাবিত করতে পারে। নিম্নলিখিত আচরণের পরিবর্তনগুলি সমস্ত অ্যাপের ক্ষেত্রে প্রযোজ্য যখন সেগুলি Android 14 এ চলে, targetSdkVersion
নির্বিশেষে। আপনার অ্যাপটি পরীক্ষা করা উচিত এবং তারপরে যেখানে প্রযোজ্য সেখানে সঠিকভাবে সমর্থন করার জন্য প্রয়োজন অনুসারে এটি সংশোধন করা উচিত।
মূল কার্যকারিতা
সঠিক অ্যালার্মের সময়সূচী ডিফল্টরূপে অস্বীকার করা হয়
精确的闹钟适用于用户指定的通知,或是在确切时间需要执行的操作。从 Android 14 开始,系统不再向以 Android 13 及更高版本为目标平台的大多数新安装应用预先授予 SCHEDULE_EXACT_ALARM
权限,该权限默认处于拒绝状态。
详细了解安排精确闹钟的权限变化。
প্রসঙ্গ-নিবন্ধিত সম্প্রচারগুলি সারিবদ্ধ থাকে যখন অ্যাপগুলি ক্যাশে থাকে৷
Android 14-এ, অ্যাপটি ক্যাশে থাকা অবস্থায় সিস্টেমটি প্রসঙ্গ-নিবন্ধিত সম্প্রচারগুলিকে একটি সারিতে রাখতে পারে৷ এটি অ্যাসিঙ্ক বাইন্ডার লেনদেনের জন্য Android 12 (API স্তর 31) চালু করা সারিবদ্ধ আচরণের অনুরূপ। ম্যানিফেস্ট-ঘোষিত সম্প্রচারগুলি সারিবদ্ধ নয় এবং সম্প্রচার বিতরণের জন্য অ্যাপগুলিকে ক্যাশে করা অবস্থা থেকে সরানো হয়৷
যখন অ্যাপটি ক্যাশে করা অবস্থা ছেড়ে চলে যায়, যেমন ফোরগ্রাউন্ডে ফিরে আসা, সিস্টেমটি যেকোনো সারিবদ্ধ সম্প্রচার সরবরাহ করে। নির্দিষ্ট সম্প্রচারের একাধিক দৃষ্টান্ত একটি সম্প্রচারে একত্রিত হতে পারে। সিস্টেমের স্বাস্থ্যের মতো অন্যান্য কারণের উপর নির্ভর করে, অ্যাপগুলি ক্যাশে করা অবস্থা থেকে সরানো হতে পারে এবং পূর্বে সারিবদ্ধ কোনো সম্প্রচার বিতরণ করা হয়।
অ্যাপগুলি শুধুমাত্র তাদের নিজস্ব ব্যাকগ্রাউন্ড প্রসেস মেরে ফেলতে পারে
অ্যান্ড্রয়েড 14 থেকে শুরু করে, যখন আপনার অ্যাপ killBackgroundProcesses()
কল করে, তখন API শুধুমাত্র আপনার নিজের অ্যাপের ব্যাকগ্রাউন্ড প্রসেসগুলিকে মেরে ফেলতে পারে।
আপনি যদি অন্য অ্যাপের প্যাকেজ নামে পাস করেন, এই পদ্ধতিটি সেই অ্যাপের ব্যাকগ্রাউন্ড প্রসেসগুলিতে কোনও প্রভাব ফেলবে না এবং নিম্নলিখিত বার্তাটি Logcat-এ উপস্থিত হবে:
Invalid packageName: com.example.anotherapp
আপনার অ্যাপটি killBackgroundProcesses()
API ব্যবহার করা উচিত নয় বা অন্যথায় অন্যান্য অ্যাপের প্রক্রিয়া জীবনচক্রকে প্রভাবিত করার চেষ্টা করা উচিত নয়, এমনকি পুরানো OS সংস্করণেও। অ্যান্ড্রয়েডকে ক্যাশে করা অ্যাপগুলিকে পটভূমিতে রাখার জন্য ডিজাইন করা হয়েছে এবং সিস্টেমের মেমরির প্রয়োজন হলে সেগুলিকে স্বয়ংক্রিয়ভাবে মেরে ফেলার জন্য৷ আপনার অ্যাপ যদি অপ্রয়োজনীয়ভাবে অন্য অ্যাপগুলিকে মেরে ফেলে, তাহলে এটি সিস্টেমের কার্যক্ষমতা কমাতে পারে এবং পরে সেই অ্যাপগুলির সম্পূর্ণ রিস্টার্টের প্রয়োজন করে ব্যাটারি খরচ বাড়াতে পারে, যা একটি বিদ্যমান ক্যাশে করা অ্যাপ পুনরায় চালু করার চেয়ে উল্লেখযোগ্যভাবে বেশি সংস্থান নেয়।
প্রথম GATT ক্লায়েন্ট একটি MTU অনুরোধ করার জন্য MTU 517 এ সেট করা হয়েছে
অ্যান্ড্রয়েড 14 থেকে শুরু করে, অ্যান্ড্রয়েড ব্লুটুথ স্ট্যাকটি ব্লুটুথ কোর স্পেসিফিকেশনের সংস্করণ 5.2কে আরও কঠোরভাবে মেনে চলে এবং যখন প্রথম GATT ক্লায়েন্ট BluetoothGatt#requestMtu(int)
API ব্যবহার করে একটি MTU অনুরোধ করে তখন BLE ATT MTU-কে 517 বাইটে অনুরোধ করে এবং সমস্ত কিছু উপেক্ষা করে। সেই ACL সংযোগে পরবর্তী MTU অনুরোধ।
এই পরিবর্তনটি মোকাবেলা করতে এবং আপনার অ্যাপকে আরও শক্তিশালী করতে, নিম্নলিখিত বিকল্পগুলি বিবেচনা করুন:
- আপনার পেরিফেরাল ডিভাইসটি অ্যান্ড্রয়েড ডিভাইসের এমটিইউ অনুরোধে একটি যুক্তিসঙ্গত মান সহ সাড়া দেবে যা পেরিফেরাল দ্বারা মিটমাট করা যেতে পারে। চূড়ান্ত আলোচনার মানটি হবে ন্যূনতম Android অনুরোধ করা মান এবং দূরবর্তী প্রদত্ত মান (উদাহরণস্বরূপ,
min(517, remoteMtu)
)- এই ফিক্সটি বাস্তবায়নের জন্য পেরিফেরালের জন্য একটি ফার্মওয়্যার আপডেটের প্রয়োজন হতে পারে
- বিকল্পভাবে, আপনার পেরিফেরালের পরিচিত সমর্থিত মান এবং প্রাপ্ত MTU পরিবর্তনের মধ্যে ন্যূনতমের উপর ভিত্তি করে আপনার GATT বৈশিষ্ট্যের লেখাগুলিকে সীমাবদ্ধ করুন
- একটি অনুস্মারক যে আপনাকে হেডারগুলির জন্য সমর্থিত আকার থেকে 5 বাইট কমাতে হবে
- যেমন:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
একটি অ্যাপকে সীমাবদ্ধ স্ট্যান্ডবাই বালতিতে রাখার নতুন কারণ
Android 14 একটি অ্যাপকে সীমাবদ্ধ স্ট্যান্ডবাই বাকেটের মধ্যে স্থাপন করার একটি নতুন কারণ উপস্থাপন করেছে৷ onStartJob
, onStopJob
, বা onBind
পদ্ধতির সময়সীমার কারণে অ্যাপের কাজগুলি একাধিকবার ANR ত্রুটিগুলিকে ট্রিগার করে৷ ( onStartJob
এবং onStopJob
এ পরিবর্তনের জন্য JobScheduler কলব্যাক এবং নেটওয়ার্ক আচরণকে শক্তিশালী করে দেখুন।)
অ্যাপটি সীমাবদ্ধ স্ট্যান্ডবাই বালতিতে প্রবেশ করেছে কিনা তা ট্র্যাক করতে, আমরা কাজ সম্পাদনে API UsageStatsManager.getAppStandbyBucket()
অথবা অ্যাপ স্টার্টআপে UsageStatsManager.queryEventsForSelf()
দিয়ে লগ করার পরামর্শ দিই।
mlock 64 KB পর্যন্ত সীমাবদ্ধ
অ্যান্ড্রয়েড 14 (এপিআই লেভেল 34) এবং উচ্চতর, প্ল্যাটফর্মটি সর্বাধিক মেমরি কমিয়ে দেয় যা mlock()
ব্যবহার করে লক করা যায় প্রতি প্রক্রিয়ায় 64 KB। পূর্ববর্তী সংস্করণগুলিতে, সীমাটি প্রতি প্রক্রিয়ায় 64 MB ছিল। এই সীমাবদ্ধতাটি অ্যাপ এবং সিস্টেম জুড়ে আরও ভাল মেমরি পরিচালনার প্রচার করে। ডিভাইস জুড়ে আরও ধারাবাহিকতা প্রদান করতে, Android 14 সামঞ্জস্যপূর্ণ ডিভাইসগুলিতে নতুন mlock()
সীমার জন্য একটি নতুন CTS পরীক্ষা যোগ করে।
সিস্টেম ক্যাশে-অ্যাপ রিসোর্স ব্যবহার প্রয়োগ করে
By design, an app's process is in a cached state when it's moved to the
background and no other app process components are running. Such an app process
is subject to being killed due to system memory pressure. Any work that
Activity
instances perform after the onStop()
method has been called and
returned, while in this state, is unreliable and strongly discouraged.
Android 14 introduces consistency and enforcement to this design. Shortly after an app process enters a cached state, background work is disallowed, until a process component re-enters an active state of the lifecycle.
Apps that use typical framework-supported lifecycle APIs – such as
services, JobScheduler
, and Jetpack WorkManager – shouldn't be
impacted by these changes.
ব্যবহারকারীর অভিজ্ঞতা
ব্যবহারকারীরা যেভাবে বাতিলযোগ্য বিজ্ঞপ্তিগুলি অনুভব করেন তার পরিবর্তন৷
যদি আপনার অ্যাপ ব্যবহারকারীদের কাছে অ-খারিজ ফোরগ্রাউন্ড বিজ্ঞপ্তি দেখায়, তাহলে Android 14 ব্যবহারকারীদের এই ধরনের বিজ্ঞপ্তি খারিজ করার অনুমতি দেওয়ার জন্য আচরণ পরিবর্তন করেছে।
এই পরিবর্তনটি এমন অ্যাপের ক্ষেত্রে প্রযোজ্য যা ব্যবহারকারীদের Notification.FLAG_ONGOING_EVENT
এর মাধ্যমে Notification.Builder#setOngoing(true)
বা NotificationCompat.Builder#setOngoing(true)
সেট করে ফোরগ্রাউন্ড বিজ্ঞপ্তি খারিজ করা থেকে বাধা দেয়। FLAG_ONGOING_EVENT
এর আচরণ পরিবর্তিত হয়েছে যাতে ব্যবহারকারীর দ্বারা এই ধরনের বিজ্ঞপ্তিগুলিকে খারিজ করা যায়৷
নিম্নলিখিত শর্তে এই ধরনের বিজ্ঞপ্তিগুলি এখনও খারিজযোগ্য নয়:
- ফোন লক হয়ে গেলে
- যদি ব্যবহারকারী একটি ক্লিয়ার অল নোটিফিকেশন অ্যাকশন নির্বাচন করে (যা দুর্ঘটনাজনিত বরখাস্তের ক্ষেত্রে সাহায্য করে)
এছাড়াও, এই নতুন আচরণ নিম্নলিখিত ব্যবহারের ক্ষেত্রে বিজ্ঞপ্তিগুলিতে প্রযোজ্য নয়:
-
CallStyle
বিজ্ঞপ্তি - এন্টারপ্রাইজের জন্য ডিভাইস পলিসি কন্ট্রোলার (ডিপিসি) এবং সমর্থনকারী প্যাকেজ
- মিডিয়া বিজ্ঞপ্তি
- ডিফল্ট অনুসন্ধান নির্বাচক প্যাকেজ
তথ্য নিরাপত্তা তথ্য আরো দৃশ্যমান হয়
为了加强用户隐私保护,Android 14 增加了系统显示您在 Play 管理中心表单中声明的信息的位置数量。目前,用户可以在 Google Play 中的应用详情的数据安全部分查看此信息。
我们建议您查看应用的位置数据分享政策,并花一点时间对应用的 Google Play“数据安全”部分进行任何适用的更新。
如需了解详情,请参阅有关如何在 Android 14 上以更显眼的方式显示数据安全信息的指南。
অ্যাক্সেসযোগ্যতা
নন-লিনিয়ার ফন্ট স্কেলিং 200%
Starting in Android 14, the system supports font scaling up to 200%, providing low-vision users with additional accessibility options that align with Web Content Accessibility Guidelines (WCAG).
If you already use scaled pixels (sp) units to define text sizing, then this change probably won't have a high impact on your app. However, you should perform UI testing with the maximum font size enabled (200%) to ensure that your app can accommodate larger font sizes without impacting usability.
নিরাপত্তা
ন্যূনতম ইনস্টলযোগ্য লক্ষ্য API স্তর
从 Android 14 开始,targetSdkVersion
低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安全性和隐私性。
恶意软件通常会以较旧的 API 级别为目标平台,以绕过在较新版本 Android 中引入的安全和隐私保护机制。例如,有些恶意软件应用使用 targetSdkVersion
22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 14 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示以下消息:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
在升级到 Android 14 的设备上,targetSdkVersion
低于 23 的所有应用都将继续保持安装状态。
如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:
adb install --bypass-low-target-sdk-block FILENAME.apk
মিডিয়া মালিকের প্যাকেজের নাম সংশোধন করা হতে পারে
媒体库支持查询 OWNER_PACKAGE_NAME
列,该列表示存储特定媒体文件的应用。从 Android 14 开始,除非满足以下条件之一,否则系统会隐去此值:
- 存储媒体文件的应用有一个软件包名称始终对其他应用可见。
查询媒体库的应用会请求
QUERY_ALL_PACKAGES
权限。
详细了解 Android 如何出于隐私保护目的而过滤软件包可见性。