অ্যান্ড্রয়েড 9 (এপিআই লেভেল 28) অ্যান্ড্রয়েড সিস্টেমে অনেক পরিবর্তন এনেছে। নিম্নলিখিত আচরণ পরিবর্তনগুলি শুধুমাত্র API স্তর 28 বা উচ্চতরকে লক্ষ্য করে এমন অ্যাপগুলিতে প্রযোজ্য। যে অ্যাপগুলি targetSdkVersion
এ API লেভেল 28 বা উচ্চতর সেট করে তাদের অবশ্যই এই আচরণগুলিকে সঠিকভাবে সমর্থন করার জন্য তাদের অ্যাপগুলিকে সংশোধন করতে হবে, যেখানে অ্যাপের ক্ষেত্রে প্রযোজ্য।
Android 9-এ চলমান সমস্ত অ্যাপকে প্রভাবিত করে এমন পরিবর্তনের জন্য, তারা যে API স্তরকে লক্ষ্য করে তা নির্বিশেষে, আচরণের পরিবর্তনগুলি দেখুন: সমস্ত অ্যাপ ।
ফোরগ্রাউন্ড পরিষেবা
যে অ্যাপগুলি Android 9 বা উচ্চতরকে লক্ষ্য করে এবং ফোরগ্রাউন্ড পরিষেবাগুলি ব্যবহার করে সেগুলিকে অবশ্যই FOREGROUND_SERVICE
অনুমতির অনুরোধ করতে হবে৷ এটি একটি স্বাভাবিক অনুমতি , তাই সিস্টেম স্বয়ংক্রিয়ভাবে অনুরোধকারী অ্যাপে এটি মঞ্জুর করে।
যদি Android 9 বা উচ্চতরকে লক্ষ্য করে এমন কোনো অ্যাপ FOREGROUND_SERVICE
অনুরোধ না করেই একটি ফোরগ্রাউন্ড পরিষেবা তৈরি করার চেষ্টা করে, তাহলে সিস্টেমটি একটি SecurityException
নিক্ষেপ করে৷
গোপনীয়তা পরিবর্তন
যদি আপনার অ্যাপটি Android 9 কে লক্ষ্য করে, তাহলে আপনাকে নিম্নলিখিত আচরণের পরিবর্তনগুলি মনে রাখতে হবে। ডিভাইস সিরিয়াল এবং DNS তথ্যের এই আপডেটগুলি ব্যবহারকারীর গোপনীয়তা বাড়ায়।
ক্রমিক নম্বর অবচয় তৈরি করুন
অ্যান্ড্রয়েড 9-এ, ব্যবহারকারীদের গোপনীয়তা রক্ষা করতে Build.SERIAL
সর্বদা "UNKNOWN"
এ সেট করা থাকে।
আপনার অ্যাপের যদি কোনো ডিভাইসের হার্ডওয়্যার সিরিয়াল নম্বর অ্যাক্সেস করতে হয়, তাহলে আপনার পরিবর্তে READ_PHONE_STATE
অনুমতির অনুরোধ করা উচিত, তারপর getSerial()
কল করুন।
DNS গোপনীয়তা
অ্যান্ড্রয়েড 9 টার্গেট করা অ্যাপগুলিকে প্রাইভেট ডিএনএস এপিআইকে সম্মান করা উচিত। বিশেষ করে, অ্যাপগুলিকে নিশ্চিত করা উচিত যে, যদি সিস্টেম সমাধানকারী DNS-ওভার-TLS করছে, যেকোন বিল্ট-ইন DNS ক্লায়েন্ট হয় সিস্টেমের মতো একই হোস্টনামে এনক্রিপ্ট করা DNS ব্যবহার করে, অথবা সিস্টেম সমাধানকারীর পক্ষে অক্ষম করা হয়।
ফ্রেমওয়ার্ক নিরাপত্তা পরিবর্তন
অ্যান্ড্রয়েড 9-এ বেশ কিছু আচরণের পরিবর্তন রয়েছে যা আপনার অ্যাপের নিরাপত্তা উন্নত করে, কিন্তু এই পরিবর্তনগুলি তখনই কার্যকর হয় যখন আপনার অ্যাপটি API স্তর 28 বা তার বেশি লক্ষ্য করে।
নেটওয়ার্ক TLS ডিফল্টরূপে সক্রিয়
যদি আপনার অ্যাপটি Android 9 বা উচ্চতরকে লক্ষ্য করে, isCleartextTrafficPermitted()
পদ্ধতিটি ডিফল্টরূপে false
ফেরত দেয়। আপনার অ্যাপের যদি নির্দিষ্ট ডোমেনের জন্য ক্লিয়ারটেক্সট সক্ষম করার প্রয়োজন হয়, তাহলে আপনার অ্যাপের নেটওয়ার্ক নিরাপত্তা কনফিগারেশনে সেই ডোমেনের জন্য true
cleartextTrafficPermitted
সেট করতে হবে।
প্রক্রিয়া দ্বারা পৃথক করা ওয়েব-ভিত্তিক ডেটা ডিরেক্টরি
Android 9-এ অ্যাপের স্থায়িত্ব এবং ডেটা অখণ্ডতা উন্নত করার জন্য, অ্যাপগুলি একাধিক প্রক্রিয়ার মধ্যে একটি একক WebView
ডেটা ডিরেক্টরি শেয়ার করতে পারে না। সাধারণত, এই ধরনের ডেটা ডিরেক্টরি কুকি, HTTP ক্যাশে এবং ওয়েব ব্রাউজিং সম্পর্কিত অন্যান্য স্থায়ী এবং অস্থায়ী স্টোরেজ সংরক্ষণ করে।
বেশিরভাগ ক্ষেত্রে, আপনার অ্যাপটি শুধুমাত্র একটি প্রক্রিয়ায় android.webkit
প্যাকেজ যেমন WebView
এবং CookieManager
থেকে ক্লাস ব্যবহার করা উচিত। উদাহরণ স্বরূপ, WebView
ব্যবহার করে এমন সমস্ত Activity
অবজেক্টকে একই প্রক্রিয়ায় সরানো উচিত। আপনি আপনার অ্যাপের অন্যান্য প্রক্রিয়াগুলিতে disableWebView()
কল করে "শুধুমাত্র একটি প্রক্রিয়া" নিয়ম আরও কঠোরভাবে প্রয়োগ করতে পারেন৷ এই কলটি WebView
ভুলবশত সেই অন্যান্য প্রক্রিয়াগুলিতে আরম্ভ হতে বাধা দেয়, এমনকি যদি এটি একটি নির্ভরশীল লাইব্রেরি থেকে কল করা হয়।
যদি আপনার অ্যাপকে একাধিক প্রক্রিয়ায় WebView
এর দৃষ্টান্ত ব্যবহার করতে হয়, তাহলে সেই প্রক্রিয়ায় WebView
এর একটি প্রদত্ত উদাহরণ ব্যবহার করার আগে আপনাকে অবশ্যই WebView.setDataDirectorySuffix()
পদ্ধতি ব্যবহার করে প্রতিটি প্রক্রিয়ার জন্য একটি অনন্য ডেটা ডিরেক্টরি প্রত্যয় বরাদ্দ করতে হবে। এই পদ্ধতিটি আপনার অ্যাপের ডেটা ডিরেক্টরির মধ্যে প্রতিটি প্রক্রিয়ার নিজস্ব ডিরেক্টরিতে ওয়েব ডেটা রাখে।
প্রতি-অ্যাপ SELinux ডোমেন
যে অ্যাপগুলি Android 9 বা তার বেশির দিকে লক্ষ্য করে সেগুলি বিশ্ব-অভিগম্য ইউনিক্স অনুমতিগুলি ব্যবহার করে অন্য অ্যাপগুলির সাথে ডেটা ভাগ করতে পারে না। এই পরিবর্তনটি Android অ্যাপ্লিকেশান স্যান্ডবক্সের অখণ্ডতাকে উন্নত করে, বিশেষ করে একটি অ্যাপের ব্যক্তিগত ডেটা শুধুমাত্র সেই অ্যাপের মাধ্যমে অ্যাক্সেসযোগ্য।
অন্যান্য অ্যাপের সাথে ফাইল শেয়ার করতে, একটি বিষয়বস্তু প্রদানকারী ব্যবহার করুন।
সংযোগ পরিবর্তন
সংযোগ তথ্য গণনা এবং মাল্টিপাথ
অ্যান্ড্রয়েড 9 বা উচ্চতরকে লক্ষ্য করে এমন অ্যাপ্লিকেশানগুলির মধ্যে, সিস্টেমটি নেটওয়ার্কগুলিতে নেটওয়ার্ক ট্র্যাফিক গণনা করে যেগুলি বর্তমান ডিফল্ট নয়—যেমন সেল ট্র্যাফিক যখন ডিভাইসটি Wi-Fi চালু থাকে—এবং সেই ট্র্যাফিকের জন্য অনুসন্ধান করার জন্য NetworkStatsManager
ক্লাসে পদ্ধতিগুলি সরবরাহ করে৷
বিশেষ করে, getMultipathPreference()
এখন পূর্বোক্ত নেটওয়ার্ক ট্রাফিকের উপর ভিত্তি করে একটি মান প্রদান করে। অ্যান্ড্রয়েড 9 থেকে শুরু করে, পদ্ধতিটি সেল ডেটার জন্য true
ফেরত দেয়, কিন্তু যখন একটি দিনে একটি নির্দিষ্ট পরিমাণের বেশি ট্রাফিক জমা হয়, তখন এটি false
হতে শুরু করে। অ্যান্ড্রয়েড 9 এ চলমান অ্যাপগুলিকে অবশ্যই পদ্ধতিটি কল করতে হবে এবং এই ইঙ্গিতটিকে সম্মান করতে হবে।
ConnectivityManager.NetworkCallback
ক্লাস এখন অ্যাপগুলিতে VPN সম্পর্কে তথ্য পাঠায়। সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস কলগুলি মিশ্রিত না করে এবং সীমিত API ব্যবহার না করেই এই পরিবর্তনটি অ্যাপগুলির জন্য সংযোগের ইভেন্টগুলি শুনতে আরও সহজ করে তোলে৷ অতিরিক্তভাবে, এর অর্থ হল তথ্য স্থানান্তর প্রত্যাশিতভাবে কাজ করে যখন একটি ডিভাইস একাধিক Wi-Fi নেটওয়ার্ক বা একাধিক সেল নেটওয়ার্কের সাথে একযোগে সংযুক্ত থাকে।
Apache HTTP ক্লায়েন্ট অবচয়
Android 6.0 এর সাথে, আমরা Apache HTTP ক্লায়েন্টের জন্য সমর্থন সরিয়ে দিয়েছি । অ্যান্ড্রয়েড 9 দিয়ে শুরু করে, সেই লাইব্রেরিটি বুটক্লাসপথ থেকে সরানো হয়েছে এবং ডিফল্টরূপে অ্যাপগুলিতে উপলব্ধ নয়।
Apache HTTP ক্লায়েন্ট ব্যবহার চালিয়ে যেতে, যে অ্যাপগুলি Android 9 এবং তার উপরে লক্ষ্য করে তাদের AndroidManifest.xml
এ নিম্নলিখিতগুলি যোগ করতে পারে:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
রানটাইম Apache লাইব্রেরি ব্যবহার করার বিকল্প হিসেবে, অ্যাপগুলি তাদের APK-এ org.apache.http
লাইব্রেরির নিজস্ব সংস্করণ বান্ডিল করতে পারে। আপনি যদি এটি করেন, তাহলে রানটাইমে প্রদত্ত ক্লাসের সাথে ক্লাস সামঞ্জস্যের সমস্যা এড়াতে আপনাকে অবশ্যই লাইব্রেরিটি পুনরায় প্যাকেজ করতে হবে ( Jar Jar এর মতো একটি ইউটিলিটি সহ)।
UI পরিবর্তন
ফোকাস দেখুন
0 এলাকা সহ ভিউ (প্রস্থ বা উচ্চতা 0) আর ফোকাসযোগ্য নয়।
উপরন্তু, ক্রিয়াকলাপগুলি আর স্পর্শ-মোডে প্রাথমিক ফোকাস নিহিত করে না। পরিবর্তে, যদি ইচ্ছা হয় তবে প্রাথমিক ফোকাসের জন্য স্পষ্টভাবে অনুরোধ করা আপনার উপর নির্ভর করে।
CSS RGBA হেক্স ভ্যালু হ্যান্ডলিং
যে অ্যাপগুলি Android 9 বা উচ্চতরকে লক্ষ্য করে তাদের অবশ্যই 4 এবং 8 হেক্স ডিজিটের CSS রঙগুলি পরিচালনার জন্য খসড়া CSS কালার মডিউল লেভেল 4 আচরণ সক্রিয় করতে হবে।
সিএসএস কালার মডিউল লেভেল 4 52 প্রকাশের পর থেকে ক্রোম দ্বারা সমর্থিত, কিন্তু ওয়েবভিউ বর্তমানে বৈশিষ্ট্যটিকে অক্ষম করে কারণ বিদ্যমান অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিতে অ্যান্ড্রয়েড অর্ডারিং (এআরজিবি) তে 32 বিট হেক্স রঙ রয়েছে, যা রেন্ডারিং ত্রুটির কারণ হতে পারে।
উদাহরণস্বরূপ, 27 বা তার নিচের API স্তরগুলিকে টার্গেট করা অ্যাপগুলির জন্য রঙ #80ff8080
বর্তমানে ওয়েবভিউতে অস্বচ্ছ হালকা লাল ( #ff8080
) হিসাবে রেন্ডার করা হয়েছে৷ লিডিং কম্পোনেন্ট (যাকে অ্যানড্রয়েড আলফা কম্পোনেন্ট হিসেবে ব্যাখ্যা করবে) বর্তমানে উপেক্ষা করা হয়েছে। যদি একটি অ্যাপ এপিআই লেভেল 28 বা তার বেশি লক্ষ্য করে, #80ff8080
50% স্বচ্ছ হালকা সবুজ ( #80ff80
) হিসাবে ব্যাখ্যা করা হয়।
ফাইলের জন্য MIME প্রকার স্নিফিং: URIs
Android 9 এর আগের Android সংস্করণগুলি ফাইলের বিষয়বস্তু থেকে MIME প্রকারগুলি অনুমান করতে পারে। Android 9 (API লেভেল 28) দিয়ে শুরু করে file:
একটি WebView- এ URIs।
MIME প্রকার অনুমান করার জন্য ফাইলের বিষয়বস্তু ব্যবহার করা নিরাপত্তা বাগগুলির একটি উৎস হতে পারে, এবং এটি সাধারণত আধুনিক ব্রাউজার দ্বারা অনুমোদিত নয়।
যদি একটি ফাইলের একটি স্বীকৃত ফাইল এক্সটেনশন থাকে যেমন .html
, .txt
, .js
, বা .css
MIME প্রকারটি এক্সটেনশন দ্বারা নির্ধারিত হবে৷ যদি কোনো ফাইলের কোনো এক্সটেনশন না থাকে বা কোনো অচেনা হয়, তাহলে MIME টাইপ হবে প্লেইন টেক্সট।
উদাহরণস্বরূপ, file:///sdcard/test.html
এর মতো একটি URI HTML হিসাবে রেন্ডার করা হবে, কিন্তু file:///sdcard/test
এর মতো একটি URI প্লেইন টেক্সট হিসাবে রেন্ডার হবে, ফাইলটিতে HTML ডেটা থাকলেও।
নথি স্ক্রোলিং উপাদান
Android 9 সঠিকভাবে কেস পরিচালনা করে যেখানে একটি নথির মূল উপাদান হল স্ক্রলিং উপাদান। আগের সংস্করণে, বডি এলিমেন্টে স্ক্রলিং পজিশন সেট করা হয়েছিল এবং রুট এলিমেন্টের স্ক্রোল মান শূন্য ছিল। Android 9 মান-সম্মত আচরণ সক্ষম করে যেখানে স্ক্রলিং উপাদান হল মূল উপাদান।
উপরন্তু, সরাসরি document.body.scrollTop
, document.body.scrollLeft
, document.documentElement.scrollTop
বা document.documentElement.scrollLeft
অ্যাক্সেস করা টার্গেট SDK এর উপর নির্ভর করে ভিন্নভাবে আচরণ করবে। ভিউপোর্ট স্ক্রোল মান অ্যাক্সেস করতে, ব্যবহার করুন document.scrollingElement
, যদি উপলব্ধ থাকে।
স্থগিত অ্যাপ থেকে বিজ্ঞপ্তি
অ্যান্ড্রয়েড 9-এর আগে, সাসপেন্ড করা অ্যাপগুলির বিজ্ঞপ্তিগুলি বাতিল করা হয়েছিল। অ্যান্ড্রয়েড 9 থেকে শুরু করে, অ্যাপটি পুনরায় চালু না হওয়া পর্যন্ত স্থগিত অ্যাপের বিজ্ঞপ্তিগুলি লুকানো থাকে।