আধুনিক অ্যান্ড্রয়েড ডেভেলপমেন্টে, একটি ছোট, দ্রুত এবং সুরক্ষিত অ্যাপ্লিকেশন সরবরাহ করা ব্যবহারকারীদের একটি মৌলিক প্রত্যাশা। এটি অর্জনের জন্য অ্যান্ড্রয়েড বিল্ড সিস্টেমের প্রধান টুল হলো R8 অপটিমাইজার, যা একটি কম্পাইলার এবং এটি ফাইলের আকার কমানোর জন্য ডেড কোড ও রিসোর্স অপসারণ, কোডের নাম পরিবর্তন বা মিনিফিকেশন এবং অ্যাপ অপটিমাইজেশনের কাজ করে।
একটি অ্যাপ প্রকাশের জন্য প্রস্তুত করার ক্ষেত্রে R8 সক্রিয় করা একটি অত্যন্ত গুরুত্বপূর্ণ পদক্ষেপ, কিন্তু এর জন্য ডেভেলপারদের "কিপ রুলস" (Keep Rules) আকারে নির্দেশনা প্রদান করতে হয়।
এই নিবন্ধটি পড়ার পর, ইউটিউবে R8 অপটিমাইজার সক্রিয় করা, ডিবাগ করা এবং সমস্যা সমাধান করার বিষয়ে পারফরম্যান্স স্পটলাইট উইক ভিডিওটি দেখে নিন।
কেন নিয়ম রাখা প্রয়োজন
Keep Rules লেখার প্রয়োজনীয়তা একটি মূল দ্বন্দ্ব থেকে উদ্ভূত হয়: R8 একটি স্ট্যাটিক অ্যানালাইসিস টুল, কিন্তু অ্যান্ড্রয়েড অ্যাপগুলো প্রায়শই রিফ্লেকশন অথবা JNI (জাভা নেটিভ ইন্টারফেস) ব্যবহার করে নেটিভ কোডের ভেতরে ও বাইরে কল করার মতো ডাইনামিক এক্সিকিউশন প্যাটার্নের উপর নির্ভর করে।
R8 সরাসরি কলগুলো বিশ্লেষণ করে ব্যবহৃত কোডের একটি গ্রাফ তৈরি করে। যখন কোনো কোড ডাইনামিক পদ্ধতিতে অ্যাক্সেস করা হয়, তখন R8-এর স্ট্যাটিক বিশ্লেষণ তা অনুমান করতে পারে না এবং সেই কোডটিকে অব্যবহৃত হিসেবে চিহ্নিত করে মুছে ফেলে, যার ফলে রানটাইম ক্র্যাশ হয়।
একটি 'কিপ রুল' হলো R8 কম্পাইলারের জন্য একটি সুস্পষ্ট নির্দেশ, যেখানে বলা থাকে: "এই নির্দিষ্ট ক্লাস, মেথড বা ফিল্ডটি একটি এন্ট্রি পয়েন্ট যা রানটাইমে ডাইনামিকভাবে অ্যাক্সেস করা হবে। আপনাকে অবশ্যই এটি রাখতে হবে, এমনকি যদি আপনি এর কোনো সরাসরি রেফারেন্স খুঁজে না পান।"
Keep-এর নিয়মাবলী সম্পর্কে আরও বিস্তারিত জানতে অফিসিয়াল গাইড দেখুন।
কোথায় লিখতে হবে নিয়মকানুন রাখুন
একটি অ্যাপ্লিকেশনের জন্য কাস্টম Keep Rules একটি টেক্সট ফাইলে লেখা হয়। প্রচলিত নিয়ম অনুযায়ী, এই ফাইলটির নাম proguard-rules.pro হয় এবং এটি অ্যাপ বা লাইব্রেরি মডিউলের রুটে অবস্থিত থাকে। এরপর আপনার মডিউলের build.gradle.kts ফাইলের release বিল্ড টাইপে এই ফাইলটি নির্দিষ্ট করে দেওয়া হয়।
release {
isShrinkResources = true
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
}
সঠিক ডিফল্ট ফাইল ব্যবহার করুন
getDefaultProguardFile মেথডটি অ্যান্ড্রয়েড এসডিকে দ্বারা প্রদত্ত ডিফল্ট নিয়মাবলীর একটি সেট ইম্পোর্ট করে। ভুল ফাইল ব্যবহার করলে আপনার অ্যাপটি অপটিমাইজড নাও হতে পারে। proguard-android-optimize.txt ফাইলটি ব্যবহার করা নিশ্চিত করুন। এই ফাইলটি স্ট্যান্ডার্ড অ্যান্ড্রয়েড কম্পোনেন্টগুলোর জন্য ডিফল্ট Keep Rules প্রদান করে এবং R8-এর কোড অপটিমাইজেশন সক্রিয় করে । পুরোনো proguard-android.txt ফাইলটি শুধুমাত্র Keep Rules প্রদান করে, কিন্তু R8-এর অপটিমাইজেশন সক্রিয় করে না ।

যেহেতু এটি একটি গুরুতর পারফরম্যান্স সমস্যা, তাই আমরা Android Studio Narwhal 3 Feature Drop থেকে ডেভেলপারদের ভুল ফাইল ব্যবহার করার বিষয়ে সতর্ক করা শুরু করছি। এবং Android Gradle Plugin ভার্সন 9.0 থেকে আমরা পুরোনো proguard-android.txt ফাইলটি আর সাপোর্ট করছি না। তাই নিশ্চিত করুন যে আপনি অপ্টিমাইজ করা ভার্সনে আপগ্রেড করেছেন।
Keep Rules কীভাবে লিখতে হয়
একটি কিপ রুল তিনটি প্রধান অংশ নিয়ে গঠিত:
-
-keepবা-keepclassmembersমতো একটি বিকল্প - ঐচ্ছিক সংশোধক যেমন
allowshrinking - একটি ক্লাস স্পেসিফিকেশন যা মেলানোর জন্য কোডকে সংজ্ঞায়িত করে।
সম্পূর্ণ সিনট্যাক্স এবং উদাহরণের জন্য, Keep Rules যোগ করার নির্দেশিকাটি দেখুন।
নিয়ম বিরোধী প্যাটার্ন রাখুন
সেরা অনুশীলনগুলো সম্পর্কে জানার পাশাপাশি অ্যান্টি-প্যাটার্নগুলো সম্পর্কেও জানা জরুরি। এই অ্যান্টি-প্যাটার্নগুলো প্রায়শই ভুল বোঝাবুঝি বা সমস্যা সমাধানের শর্টকাট থেকে উদ্ভূত হয় এবং একটি প্রোডাকশন বিল্ডের পারফরম্যান্সের জন্য মারাত্মক হতে পারে।
বৈশ্বিক বিকল্পগুলি
এই ফ্ল্যাগগুলো হলো গ্লোবাল টগল, যা রিলিজ বিল্ডে কখনোই ব্যবহার করা উচিত নয়। এগুলো শুধুমাত্র কোনো সমস্যা চিহ্নিত করার জন্য সাময়িক ডিবাগিংয়ের উদ্দেশ্যে ব্যবহৃত হয়।
-dontotptimize ব্যবহার করলে R8-এর পারফরম্যান্স অপটিমাইজেশন কার্যকরভাবে নিষ্ক্রিয় হয়ে যায়, যার ফলে অ্যাপটি ধীরগতির হয়ে পড়ে।
-dontobfuscate ব্যবহার করলে সমস্ত নাম পরিবর্তন বন্ধ হয়ে যায় এবং -dontshrink ব্যবহার করলে ডেড কোড অপসারণ বন্ধ হয়ে যায়। এই দুটি গ্লোবাল রুলই অ্যাপের আকার বাড়িয়ে দেয়।
অ্যাপের উন্নত পারফরম্যান্স ও ব্যবহারকারীর অভিজ্ঞতার জন্য, প্রোডাকশন এনভায়রনমেন্টে যথাসম্ভব এই গ্লোবাল ফ্ল্যাগগুলো ব্যবহার করা এড়িয়ে চলুন।
অতিরিক্ত বিস্তৃত রাখার নিয়ম
R8-এর সুবিধাগুলো নষ্ট করার সবচেয়ে সহজ উপায় হলো অতিরিক্ত ব্যাপক Keep Rules লেখা । নিচেরটির মতো Keep Rules, R8 অপটিমাইজারকে এই প্যাকেজ বা এর কোনো সাব-প্যাকেজের কোনো ক্লাসকে শ্রিন্ক (shrink), অবফাস্কেট (obfuscate) বা অপটিমাইজ (optimize) না করার নির্দেশ দেয়। এটি সেই পুরো প্যাকেজটির জন্য R8-এর সুবিধাগুলো সম্পূর্ণরূপে নষ্ট করে দেয়। এর পরিবর্তে সংকীর্ণ এবং সুনির্দিষ্ট Keep Rules লেখার চেষ্টা করুন।
-keep class com.example.package.** { *;} // WIDE KEEP RULES CAUSE PROBLEMS
বিপরীতকরণ অপারেটর (!)
ইনভার্সন অপারেটর (!) কোনো নিয়ম থেকে একটি প্যাকেজ বাদ দেওয়ার একটি শক্তিশালী উপায় বলে মনে হতে পারে। কিন্তু ব্যাপারটা এত সহজ নয়। এই উদাহরণটি দেখুন:
-keep class !com.example.my_package.** { *; } // USE WITH CAUTION
আপনি হয়তো ভাবতে পারেন যে এই নিয়মটির অর্থ হলো " com.example.package এ ক্লাস রাখবেন না ।" কিন্তু এর আসল অর্থ হলো " প্রতিটি ক্লাস, মেথড এবং প্রপার্টি রাখুন।" " সম্পূর্ণ অ্যাপ্লিকেশনটিতে যা com.example.package এর মধ্যে নেই।" যদি এটি আপনার কাছে আশ্চর্যজনক মনে হয়, তবে আপনার R8 কনফিগারেশনে কোনো নেগেশন আছে কিনা তা পরীক্ষা করে দেখা ভালো।
অ্যান্ড্রয়েড উপাদানগুলির জন্য অপ্রয়োজনীয় নিয়ম
আরেকটি সাধারণ ভুল হলো আপনার অ্যাপের Activities , Services , বা BroadcastReceivers জন্য ম্যানুয়ালি Keep Rules যোগ করা। এটি অপ্রয়োজনীয় । ডিফল্ট proguard-android-optimize.txt ফাইলটিতে এই স্ট্যান্ডার্ড অ্যান্ড্রয়েড কম্পোনেন্টগুলোর জন্য প্রয়োজনীয় নিয়মগুলো আগে থেকেই অন্তর্ভুক্ত থাকে, যার ফলে এগুলো কোনো কনফিগারেশন ছাড়াই কাজ করে।
এছাড়াও অনেক লাইব্রেরি তাদের নিজস্ব Keep Rules নিয়ে আসে। তাই এগুলোর জন্য আপনার নিজের নিয়ম লেখার প্রয়োজন হবে না। যদি আপনার ব্যবহৃত কোনো লাইব্রেরির Keep Rules-এ কোনো সমস্যা হয়, তবে সমস্যাটি কী তা জানতে লাইব্রেরির লেখকের সাথে যোগাযোগ করাই শ্রেয়।
নিয়ম মেনে চলার সর্বোত্তম অনুশীলন
এখন যেহেতু আপনি জানেন কী করা উচিত নয়, চলুন সর্বোত্তম পন্থাগুলো নিয়ে আলোচনা করা যাক।
সংকীর্ণ নিয়ম রাখুন
ভালো কিপ রুলস যতটা সম্ভব সংকীর্ণ এবং সুনির্দিষ্ট হওয়া উচিত। এগুলো কেবল প্রয়োজনীয় বিষয়গুলোই সংরক্ষণ করবে, যাতে R8 বাকি সবকিছু অপটিমাইজ করতে পারে।
| নিয়ম | গুণমান |
|---|---|
| নিম্ন: সম্পূর্ণ প্যাকেজ এবং এর উপ-প্যাকেজগুলো রাখে |
| নিম্ন: এমন একটি সম্পূর্ণ শ্রেণী রাখে যা সম্ভবত এখনও অনেক বেশি বিস্তৃত |
| উচ্চ: একটি নির্দিষ্ট ক্লাস থেকে শুধুমাত্র প্রাসঙ্গিক মেথড এবং প্রোপার্টিগুলো রাখা হয় |
সাধারণ পূর্বপুরুষদের ব্যবহার করুন
একাধিক ভিন্ন ডেটা মডেলের জন্য আলাদা Keep Rule লেখার পরিবর্তে, একটিমাত্র নিয়ম লিখুন যা একটি সাধারণ বেস ক্লাস বা ইন্টারফেসকে লক্ষ্য করে। নিচের নিয়মটি R8-কে সেইসব ক্লাসের মেম্বারদের রাখতে বলে যারা এই ইন্টারফেসটি ইমপ্লিমেন্ট করে এবং এটি অত্যন্ত স্কেলেবল।
# Keep all fields of any class that implements SerializableModel
-keepclassmembers class * implements com.example.models.SerializableModel {
<fields>;
}
একাধিক ক্লাসকে টার্গেট করতে অ্যানোটেশন ব্যবহার করুন
একটি কাস্টম অ্যানোটেশন (যেমন, @Serialize ) তৈরি করুন এবং যে ক্লাসগুলোর ফিল্ড সংরক্ষিত রাখা প্রয়োজন, সেগুলোকে "ট্যাগ" করতে এটি ব্যবহার করুন। এটি আরেকটি পরিচ্ছন্ন, ডিক্লারেটিভ এবং অত্যন্ত স্কেলেবল প্যাটার্ন। আপনি আপনার ব্যবহৃত ফ্রেমওয়ার্কগুলোর বিদ্যমান অ্যানোটেশনগুলোর জন্যও Keep Rules তৈরি করতে পারেন।
# Keep all fields of any class annotated with @Serialize
-keepclassmembers class * {
@com.example.annotations.Serialize <fields>;
}
সঠিক রাখার বিকল্পটি বেছে নিন
‘কিপ অপশন’ হলো নিয়মটির সবচেয়ে গুরুত্বপূর্ণ অংশ। ভুলটি বেছে নিলে অকারণে অপটিমাইজেশন নিষ্ক্রিয় হয়ে যেতে পারে।
| বিকল্প রাখুন | এটি যা করে |
-keep | ঘোষণাপত্রে উল্লিখিত ক্লাস এবং সদস্যদের অপসারণ বা নাম পরিবর্তন করা থেকে বিরত রাখে। |
-keepclassmembers | নির্দিষ্ট সদস্যদের অপসারণ বা নাম পরিবর্তন করা থেকে বিরত রাখে, কিন্তু ক্লাসটিকে নিজে অপসারণ করার অনুমতি দেয়, তবে শুধুমাত্র সেইসব ক্লাসের ক্ষেত্রে যেগুলো অন্য কোনো কারণে অপসারণ করা হয়নি। |
-keepclasseswithmembers | সংমিশ্রণ: ক্লাস এবং এর মেম্বারসমূহকে রাখে, শুধুমাত্র যদি নির্দিষ্ট সকল মেম্বার উপস্থিত থাকে। |
আপনি আমাদের 'কিপ অপশন' সংক্রান্ত ডকুমেন্টেশনে 'কিপ অপশন' সম্পর্কে আরও জানতে পারবেন।
মডিফায়ার ব্যবহার করে অপ্টিমাইজেশনের অনুমতি দিন
allowshrinking এবং allowobfuscation মতো মডিফায়ারগুলো একটি ব্যাপক -keep নিয়মকে শিথিল করে, যা R8-কে অপটিমাইজেশনের ক্ষমতা ফিরিয়ে দেয়। উদাহরণস্বরূপ, যদি কোনো লিগ্যাসি লাইব্রেরি আপনাকে একটি সম্পূর্ণ ক্লাসে -keep ব্যবহার করতে বাধ্য করে, তাহলে আপনি shrinking এবং obfuscation-এর অনুমতি দিয়ে কিছু অপটিমাইজেশন পুনরুদ্ধার করতে সক্ষম হতে পারেন:
# Keep this class, but allow R8 to remove it if it's unused and allow R8 to rename it. -keep,allowshrinking,allowobfuscation class com.example.LegacyClass
অতিরিক্ত অপ্টিমাইজেশনের জন্য গ্লোবাল অপশন যোগ করুন
Keep Rules ছাড়াও, আরও বেশি অপটিমাইজেশনকে উৎসাহিত করতে আপনি আপনার R8 কনফিগারেশন ফাইলে গ্লোবাল ফ্ল্যাগ যোগ করতে পারেন।
-repackageclasses একটি শক্তিশালী অপশন যা R8-কে সমস্ত অস্পষ্ট ক্লাসকে একটি একক প্যাকেজে স্থানান্তরিত করার নির্দেশ দেয়। এটি অপ্রয়োজনীয় প্যাকেজের নামের স্ট্রিংগুলি সরিয়ে দিয়ে DEX ফাইলে উল্লেখযোগ্য পরিমাণ জায়গা বাঁচায়।
-allowaccessmodification R8-কে আরও শক্তিশালী ইনলাইনিং সক্ষম করার জন্য অ্যাক্সেস প্রসারিত করতে (যেমন, private থেকে public ) দেয়। proguard-android-optimize.txt ব্যবহার করার সময় এটি এখন ডিফল্টরূপে সক্রিয় থাকে।
সতর্কীকরণ: লাইব্রেরি লেখকদের কখনোই তাদের কনজিউমার রুলে এই গ্লোবাল অপটিমাইজেশন ফ্ল্যাগগুলো যোগ করা উচিত নয়, কারণ এগুলো পুরো অ্যাপে জোরপূর্বক প্রয়োগ করা হবে।
এবং বিষয়টি আরও স্পষ্ট করার জন্য, অ্যান্ড্রয়েড গ্রেডল প্লাগইনের ৯.০ সংস্করণে আমরা লাইব্রেরিগুলো থেকে গ্লোবাল অপটিমাইজেশন ফ্ল্যাগগুলোকে সম্পূর্ণরূপে উপেক্ষা করা শুরু করব।
গ্রন্থাগারের জন্য সর্বোত্তম অনুশীলন
প্রতিটি অ্যান্ড্রয়েড অ্যাপ কোনো না কোনোভাবে লাইব্রেরির ওপর নির্ভর করে। তাই চলুন লাইব্রেরি ব্যবহারের সেরা পদ্ধতিগুলো নিয়ে আলোচনা করা যাক।
লাইব্রেরি ডেভেলপারদের জন্য
যদি আপনার লাইব্রেরি রিফ্লেকশন বা জেএনআই ব্যবহার করে, তবে এর কনজিউমারদের প্রয়োজনীয় কিপ রুলস সরবরাহ করার দায়িত্ব আপনার। এই রুলসগুলো একটি consumer-rules.pro ফাইলে রাখা হয়, যা পরবর্তীতে লাইব্রেরির AAR ফাইলের ভেতরে স্বয়ংক্রিয়ভাবে বান্ডল হয়ে যায়।
android {
defaultConfig {
consumerProguardFiles("consumer-rules.pro")
}
...
}
গ্রন্থাগার ব্যবহারকারীদের জন্য
সমস্যাযুক্ত Keep Rules ফিল্টার করে বাদ দিন
যদি আপনাকে এমন কোনো লাইব্রেরি ব্যবহার করতেই হয় যাতে সমস্যাযুক্ত Keep Rules অন্তর্ভুক্ত থাকে, তাহলে AGP 9.0 থেকে শুরু করে আপনি আপনার build.gradle.kts ফাইলে সেগুলোকে ফিল্টার করে বাদ দিতে পারেন। এটি R8-কে একটি নির্দিষ্ট ডিপেন্ডেন্সি থেকে আসা রুলগুলোকে উপেক্ষা করতে নির্দেশ দেয়।
release {
optimization.keepRules {
// Ignore all consumer rules from this specific library
it.ignoreFrom("com.somelibrary:somelibrary")
}
}
সেরা কিপ রুল হলো কোনো কিপ রুল না থাকা।
R8 কনফিগারেশনের চূড়ান্ত কৌশল হলো Keep Rules লেখার প্রয়োজনীয়তা পুরোপুরি দূর করা । অনেক অ্যাপের ক্ষেত্রে, রিফ্লেকশনের চেয়ে কোড জেনারেশনকে প্রাধান্য দেয় এমন আধুনিক লাইব্রেরি বেছে নেওয়ার মাধ্যমে এটি অর্জন করা সম্ভব। কোড জেনারেশনের ফলে, অপটিমাইজার আরও সহজে নির্ধারণ করতে পারে যে রানটাইমে কোন কোড আসলে ব্যবহৃত হচ্ছে এবং কোন কোড বাদ দেওয়া যেতে পারে। এছাড়াও, কোনো ডাইনামিক রিফ্লেকশন ব্যবহার না করার অর্থ হলো কোনো "লুকানো" এন্ট্রি পয়েন্ট নেই, এবং তাই, কোনো Keep Rules-এরও প্রয়োজন হয় না। নতুন লাইব্রেরি বেছে নেওয়ার সময়, সর্বদা রিফ্লেকশনের চেয়ে কোড জেনারেশন ব্যবহার করে এমন সমাধানকে অগ্রাধিকার দিন।
লাইব্রেরি কীভাবে নির্বাচন করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, ‘লাইব্রেরি বিচক্ষণতার সাথে নির্বাচন করুন’ দেখুন।
আপনার R8 কনফিগারেশন ডিবাগিং এবং ট্রাবলশুটিং
যখন R8 এমন কোড মুছে ফেলে যা রাখা উচিত ছিল, অথবা আপনার APK ফাইলটি প্রত্যাশার চেয়ে বড় হয়, তখন সমস্যাটি নির্ণয় করতে এই টুলগুলো ব্যবহার করুন।
সদৃশ এবং বৈশ্বিক Keep নিয়মগুলি খুঁজুন
যেহেতু R8 কয়েক ডজন উৎস থেকে নিয়ম একত্রিত করে, তাই 'চূড়ান্ত' নিয়ম সেটটি কী তা জানা কঠিন হতে পারে। আপনার proguard-rules.pro ফাইলে এই ফ্ল্যাগটি যোগ করলে একটি সম্পূর্ণ প্রতিবেদন তৈরি হয়:
# Outputs the final, merged set of rules to the specified file -printconfiguration build/outputs/logs/configuration.txt
আপনি এই ফাইলটি অনুসন্ধান করে অপ্রয়োজনীয় নিয়মগুলো খুঁজে বের করতে পারেন অথবা কোনো সমস্যাযুক্ত নিয়মকে (যেমন -dontoptimize ) সেটিকে অন্তর্ভুক্তকারী নির্দিষ্ট লাইব্রেরি পর্যন্ত শনাক্ত করতে পারেন।
R8-কে জিজ্ঞাসা করুন: তুমি এটা কেন রাখছো?
যদি এমন কোনো ক্লাস যা আপনি সরিয়ে ফেলার আশা করেছিলেন, তা এখনও আপনার অ্যাপে থেকে যায়, তাহলে R8 আপনাকে এর কারণ জানাতে পারবে। শুধু এই নিয়মটি যোগ করুন:
# Asks R8 to explain why it's keeping a specific class class com.example.MyUnusedClass -whyareyoukeeping
বিল্ড চলাকালীন, R8 সেই ক্লাসটি ধরে রাখার কারণ হওয়া রেফারেন্সের সঠিক শৃঙ্খলটি প্রিন্ট করবে, যা আপনাকে রেফারেন্সটি ট্রেস করতে এবং আপনার নিয়মগুলো সামঞ্জস্য করতে সাহায্য করবে।
সম্পূর্ণ নির্দেশিকার জন্য, R8 ট্রাবলশুট বিভাগটি দেখুন।
পরবর্তী পদক্ষেপ
অ্যান্ড্রয়েড অ্যাপের পারফরম্যান্স উন্নত করার জন্য R8 একটি শক্তিশালী টুল। একটি স্ট্যাটিক অ্যানালাইসিস ইঞ্জিন হিসেবে এর কার্যপ্রণালী সঠিকভাবে বোঝার ওপরই এর কার্যকারিতা নির্ভর করে।
সুনির্দিষ্ট মেম্বার-লেভেল রুল লিখে, অ্যানসেস্টর ও অ্যানোটেশন ব্যবহার করে এবং সঠিক কিপ অপশনগুলো সতর্কতার সাথে বেছে নিয়ে, আপনি ঠিক যা প্রয়োজনীয় তা-ই সংরক্ষণ করতে পারেন। সবচেয়ে উন্নত পদ্ধতি হলো রিফ্লেকশন-ভিত্তিক পূর্বসূরিদের পরিবর্তে আধুনিক, কোডজেন-ভিত্তিক লাইব্রেরি বেছে নিয়ে রুলের প্রয়োজনীয়তা পুরোপুরি দূর করা।
পারফরম্যান্স স্পটলাইট উইক অনুসরণ করার পাশাপাশি, ইউটিউবে আজকের স্পটলাইট উইক ভিডিওটি অবশ্যই দেখুন এবং আমাদের R8 চ্যালেঞ্জটি চালিয়ে যান। R8 চালু করা বা এর সমস্যা সমাধান সংক্রান্ত যেকোনো প্রশ্নের জন্য #optimizationEnabled হ্যাশট্যাগটি ব্যবহার করুন। আমরা সাহায্য করার জন্য আছি।
এখন এর সুফলগুলো নিজে দেখার সময় এসেছে।
আমরা আপনাকে আজই আপনার অ্যাপের জন্য R8 ফুল মোড চালু করার আহ্বান জানাচ্ছি।
- শুরু করতে আমাদের ডেভেলপার গাইড অনুসরণ করুন: অ্যাপ অপ্টিমাইজেশন সক্ষম করুন ।
- আপনি এখনও
proguard-android.txtব্যবহার করছেন কিনা তা পরীক্ষা করুন এবং এটিকেproguard-android-optimize.txtদিয়ে প্রতিস্থাপন করুন। - এরপর, এর প্রভাব পরিমাপ করুন । শুধু পার্থক্য অনুভব করবেন না, তা যাচাইও করুন । GitHub-এ থাকা আমাদের Macrobenchmark স্যাম্পল অ্যাপের কোডটি ব্যবহার করে আপনার স্টার্টআপ টাইম আগে ও পরে পরিমাপ করে আপনার পারফরম্যান্সের উন্নতি যাচাই করুন।
আমরা আত্মবিশ্বাসী যে আপনি আপনার অ্যাপের পারফরম্যান্সে একটি উল্লেখযোগ্য উন্নতি দেখতে পাবেন।
এই সুযোগে, আপনার প্রশ্নগুলো জানাতে #AskAndroid সোশ্যাল ট্যাগটি ব্যবহার করুন। সপ্তাহজুড়ে আমাদের বিশেষজ্ঞরা আপনার প্রশ্নগুলো পর্যবেক্ষণ করছেন এবং সেগুলোর উত্তর দিচ্ছেন।
আগামীকালের জন্য সাথে থাকুন, যেখানে আমরা বেসলাইন এবং স্টার্টআপ প্রোফাইলের সাহায্যে প্রোফাইল গাইডেড অপটিমাইজেশন নিয়ে আলোচনা করব, বিগত রিলিজগুলোতে কম্পোজের রেন্ডারিং পারফরম্যান্স কীভাবে উন্নত হয়েছে তা জানাব এবং ব্যাকগ্রাউন্ডে চলমান কাজের জন্য পারফরম্যান্স সংক্রান্ত বিবেচ্য বিষয়গুলো তুলে ধরব।
পড়তে থাকুন

পণ্যের খবর
অ্যান্ড্রয়েড স্টুডিও পান্ডা ৪ এখন স্থিতিশীল এবং প্রোডাকশনে ব্যবহারের জন্য প্রস্তুত। এই রিলিজে যুক্ত হয়েছে প্ল্যানিং মোড, নেক্সট এডিট প্রেডিকশন এবং আরও অনেক কিছু, যা দিয়ে উচ্চ-মানের অ্যান্ড্রয়েড অ্যাপ তৈরি করা আগের চেয়েও সহজ।
Matt Dyor • পড়তে ৫ মিনিট

পণ্যের খবর
আপনি যদি একজন অ্যান্ড্রয়েড ডেভেলপার হন এবং আপনার অ্যাপে উদ্ভাবনী এআই ফিচার যুক্ত করতে চান, তবে আমরা সম্প্রতি শক্তিশালী নতুন আপডেট চালু করেছি।
Thomas Ezan • পড়তে ৩ মিনিট

পণ্যের খবর
অ্যান্ড্রয়েড ১৭ বিটা ৪-এ পৌঁছেছে, যা এই রিলিজ চক্রের সর্বশেষ নির্ধারিত বিটা এবং অ্যাপের সামঞ্জস্যতা ও প্ল্যাটফর্মের স্থিতিশীলতার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ মাইলফলক।
Daniel Galpin • পড়তে ৪ মিনিট
আপ-টু-ডেট থাকুন
অ্যান্ড্রয়েড ডেভেলপমেন্টের সর্বশেষ তথ্য প্রতি সপ্তাহে আপনার ইনবক্সে পান।






