রাখার নিয়মগুলির সাথে কাজ করার সময়, আপনার অ্যাপের আচরণ বজায় রাখার সময় আপনি সুবিধাগুলি দেখতে পাচ্ছেন তা নিশ্চিত করতে সঠিক পরিমাণে নির্দিষ্টতা পৌঁছানো গুরুত্বপূর্ণ। ভাল প্যাটার্ন সম্পর্কে জানতে এবং নিয়মগুলি এড়ানোর জন্য জিনিসগুলি সম্পর্কে জানতে নিম্নলিখিত বিভাগগুলি দেখুন।
রাখা নিয়ম ভাল নিদর্শন
সু-সংজ্ঞায়িত রাখা নিয়ম যতটা সম্ভব নির্দিষ্ট:
ক্লাস স্পেসিফিকেশনের জন্য, সর্বদা একটি নির্দিষ্ট শ্রেণী, বেস ক্লাস, বা যদি সম্ভব হয় টীকাযুক্ত শ্রেণী উল্লেখ করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
-keepclassmembers class com.example.MyClass { void someSpecificMethod(); }
-keepclassmembers ** extends com.example.MyBaseClass { void someSpecificMethod(); }
-keepclassmembers @com.example.MyAnnotation class ** { void someSpecificMethod(); }
যখনই সম্ভব, আপনার সোর্স কোডে টীকা ব্যবহার করুন (যেমন
@Keep
টীকা) এবং তারপর সেই টীকাগুলিকে আপনার রাখার নিয়মে সরাসরি লক্ষ্য করুন। এটি আপনার কোড এবং এটি সংরক্ষণ করে এমন নিয়মগুলির মধ্যে একটি স্পষ্ট, সুস্পষ্ট লিঙ্ক তৈরি করে, আপনার কনফিগারেশনকে আরও মজবুত, বোঝা সহজ এবং কোড পরিবর্তনের সময় ভাঙার ঝুঁকি কম করে।উদাহরণস্বরূপ,
androidx.annotation
এর মতো লাইব্রেরিগুলি এই প্যাটার্ন ব্যবহার করে:// In your source code @Keep class MyDataClass { /* ... */ } // In your R8 rules -keep @androidx.annotation.DisplayComponent class * {*;}
আমরা আপনার টীকাগুলির নামকরণের সুপারিশ করি যাতে তারা কেন কোড অংশগুলি সংরক্ষণ করা হয় তার জন্য অর্থপূর্ণ প্রসঙ্গ প্রদান করে৷ উদাহরণস্বরূপ, এমন একটি অ্যাপের জন্য
@DisplayComponent
ব্যবহার করুন যেখানে ডিসপ্লে উপাদানগুলির কিছু অংশ রাখা প্রয়োজন।যখনই সম্ভব, সদস্য স্পেসিফিকেশন ঘোষণা করা উচিত, এবং শুধুমাত্র ক্লাসের অংশগুলি উল্লেখ করা উচিত যা অ্যাপটি কাজ করার জন্য রাখা আবশ্যক। ঐচ্ছিক সদস্য সুযোগকে
{ *; }
কঠোরভাবে প্রয়োজন না হলে।-keepclassmembers com.example.MyClass { void someSpecificMethod(); void @com.example.MyAnnotation *; }
আপনি যদি
repackageclasses
global বিকল্পটি ব্যবহার করেন, তাহলে ঐচ্ছিক প্যাকেজের নাম উল্লেখ করা এড়িয়ে চলুন। এর ফলে ছোট DEX ফাইল হয় কারণ প্যাকেজ উপসর্গটি পুনরায় প্যাকেজ করা ক্লাসের নামগুলিতে বাদ দেওয়া হয়।
আপনি যদি এই নির্দেশিকাগুলি মেনে চলতে না পারেন, তাহলে আপনি অস্থায়ীভাবে কোডটি আলাদা করতে পারেন যা একটি ডেডিকেটেড প্যাকেজে রাখতে হবে এবং প্যাকেজে আপনার রাখার নিয়ম প্রয়োগ করতে পারেন৷ যাইহোক, এটি দীর্ঘমেয়াদী জন্য একটি সমাধান নয়। আরও জানতে, ক্রমবর্ধমানভাবে অপ্টিমাইজেশন গ্রহণ করুন দেখুন। একটি প্যাকেজের জন্য একটি Keep নিয়ম ব্যবহার করতে নিম্নলিখিত উদাহরণে দেখানো হিসাবে একটি Keep নিয়ম সংজ্ঞায়িত করুন:
-keepclassmembers class com.example.pkg.** { *; }
এড়ানোর জিনিস
Keep রুল সিনট্যাক্সে অনেকগুলি বিকল্প রয়েছে, কিন্তু পরিমাপযোগ্য টেকসই কর্মক্ষমতা সুবিধার জন্য আমরা নিম্নলিখিতগুলি ব্যবহার না করার পরামর্শ দিই:
- ইনভার্সন অপারেটর ব্যবহার এড়িয়ে চলুন
!
নিয়ম রাখুন কারণ আপনি অনিচ্ছাকৃতভাবে আপনার আবেদনের প্রায় প্রতিটি ক্লাসে একটি নিয়ম প্রয়োগ করতে পারেন। - প্যাকেজ-ওয়াইড রাখার নিয়মগুলি ব্যবহার করবেন না যেমন
-keep class com.example.pkg.** { *; }
দীর্ঘমেয়াদী। R8 কনফিগার করার সময় সমস্যাগুলি সমাধান করার জন্য এগুলি সাময়িকভাবে ব্যবহার করা যেতে পারে। আরও তথ্যের জন্য, অপ্টিমাইজেশানের সুযোগ সীমিত করুন দেখুন। সাধারণভাবে, ওয়াইল্ডকার্ডের ব্যাপারে সতর্ক থাকুন- নিশ্চিত করুন যে আপনি শুধুমাত্র সেই কোডটিই রাখছেন যা আপনার প্রয়োজন।
আপনি যদি এই নিয়মগুলি অনুসরণ করতে অক্ষম হন, তাহলে আপনি হয়ত অনেক উন্মুক্ত প্রতিফলন ব্যবহার করছেন, এবং হয় প্রতিফলন এড়িয়ে চলা উচিত বা প্রতিফলন ব্যবহার করে লাইব্রেরি এড়ানো উচিত ( Gson কেস স্টাডি দেখুন)।