أثناء العمل باستخدام قواعد الاحتفاظ، من المهم تحقيق القدر المناسب من الدقة لضمان الاستفادة من المزايا مع الحفاظ على سلوك تطبيقك. راجِع الأقسام التالية للتعرّف على الأنماط الجيدة والأشياء التي يجب تجنُّبها في قواعد الاحتفاظ.
الأنماط الجيدة في قواعد الاحتفاظ بالبيانات
تكون قواعد الاحتفاظ بالبيانات المحددة جيدًا دقيقة قدر الإمكان:
بالنسبة إلى مواصفات الفئة، حدِّد دائمًا فئة معيّنة أو فئة أساسية أو فئة مشروحة إذا أمكن، كما هو موضّح في الأمثلة التالية:
-keepclassmembers class com.example.MyClass { void someSpecificMethod(); }
-keepclassmembers ** extends com.example.MyBaseClass { void someSpecificMethod(); }
-keepclassmembers @com.example.MyAnnotation class ** { void someSpecificMethod(); }
ويجب الإفصاح عن مواصفات العضو كلما أمكن ذلك، والإشارة فقط إلى أجزاء الفئة التي يجب الاحتفاظ بها لكي يعمل التطبيق. يُنصح بعدم تطبيق قاعدة على فئة بأكملها من خلال تحديد نطاق العضو الاختياري على أنّه
{ *; }
إلا إذا كان ذلك ضروريًا للغاية.-keepclassmembers com.example.MyClass { void someSpecificMethod(); void @com.example.MyAnnotation *; }
إذا تعذّر عليك الالتزام بهذه الإرشادات، يمكنك عزل الرمز مؤقتًا الذي يجب الاحتفاظ به في حزمة مخصّصة وتطبيق قاعدة الاحتفاظ على الحزمة. ومع ذلك، هذا ليس حلاً على المدى الطويل. لمزيد من المعلومات، اطّلِع على مقالة تطبيق التحسينات بشكل تدريجي. لاستخدام قاعدة الاحتفاظ بحزمة، حدِّد قاعدة الاحتفاظ كما هو موضّح في المثال التالي:
-keepclassmembers class com.example.pkg.** { *; }
أمور يجب تجنّبها
تتضمّن بنية قاعدة الاحتفاظ بالبيانات العديد من الخيارات، ولكن لتحقيق فوائد مستدامة وقابلة للقياس في الأداء، ننصح بعدم استخدام ما يلي:
- تجنَّب استخدام عامل النفي
!
في قواعد الحفاظ على الفئات لأنّك قد تطبّق قاعدة عن غير قصد على كل فئة تقريبًا في تطبيقك. - لا تستخدِم قواعد الاحتفاظ على مستوى الحزمة، مثل
-keep class com.example.pkg.** { *; }
على المدى الطويل. ويمكن استخدامها مؤقتًا لتجنُّب المشاكل عند إعداد R8. لمزيد من المعلومات، يُرجى الاطّلاع على تحديد نطاق التحسين. بشكل عام، يجب توخّي الحذر عند استخدام أحرف البدل، والتأكّد من الاحتفاظ فقط بالرمز الذي تحتاجه.
إذا تعذّر عليك اتّباع هذه القواعد، من المحتمل أنّك تستخدم الكثير من عمليات الانعكاس المفتوحة، ويجب إما تجنُّب الانعكاس أو تجنُّب المكتبة باستخدام الانعكاس (راجِع دراسة حالة Gson).