كيف تتوقف عن الخوف من Proguard وتبدأ الحياة


مرحبًا ، أنا مطور Android ولم أعد أخاف من ProGuard ...


عادة ، يتم تذكر هذه الأداة المساعدة عندما تواجه مشكلة dalvik dex-limit أو مع متطلبات لتحسين أمان التطبيق. للأسف ، إنها بعيدة عن المرة الأولى لتكوين Proguard بشكل صحيح. غالبًا ما لاحظت عددًا ، بعد كسر المشروع ، قم بإيقاف تشغيل Proguard وتشغيل دعم Mulditex ، وفي كل مرة كنت حزينًا قليلاً بشأن هذا ، لأن Proguard يساعد على تقليل حجم التطبيق وزيادة أدائه.


في النهاية ، قررت كتابة مقال يمكنني من خلاله وضع جميع المعلومات المفيدة التي تعلمتها على مدى عدة سنوات من العمل مع Proguard والتي يمكن أن تساعد كل من المبتدئين تمامًا وأولئك الذين يعرفون شيئًا بالفعل.


عن ماذا


Proguard هو أداة مفتوحة المصدر لتحسين والتشويش على كود Java. تعالج هذه الأداة شفرة Java المترجمة بالفعل ، لذا يجب أن تعمل مع أي لغة JVM. بتعبير أدق ، اللغة نفسها لـ Proguard غير مبالية ، فقط الرمز الثانوي مهم. يمكن تقسيم جميع التلاعبات في precuard bytecode إلى 3 فئات رئيسية: تقلص الشفرة ، والتحسين ، والتعتيم .


تقلص الرمز


نعم ، إنه أمر غريب نوعًا ما كتابة التعليمات البرمجية ثم حذفها ، ولكن هذه هي حقيقة تطوير Android. لا يتعلق هذا بالطبع بالكود المكتوب بخط اليد (على الرغم من حدوث ذلك) ، ولكن حول طن من البضائع الميتة التي تنقلها المكتبات بجميع أنواعها. يمكن لـ Guava و Apache Commons و Google Play Services وغيرهم من الرجال تضخيم حجم ملف apk من 500 كيلوبايت إلى بضع عشرات ميغابايت. في بعض الأحيان يذهب الأمر إلى حد أنه لا يمكن للبرنامج الترجمة بسبب تجاوز حد أساليب Dalvik . سيساعد برنامج Proguard في إزالة جميع التعليمات البرمجية غير المستخدمة وتقليل حجم التطبيق إلى بضعة ميغابايت.


التحسين


بالإضافة إلى إزالة التعليمات البرمجية غير الضرورية ، يمكن لـ Proguard تحسين التعليمات البرمجية المتبقية. تشمل ترسانتها تحليل تدفق التحكم ، تحليل تدفق البيانات ، التقييم الجزئي ، التخصيص الفردي الثابت ، ترقيم القيمة العالمية ، تحليل الفعالية. يمكن لبرنامج Proguard إجراء تحسينات ثقب الباب ، وتقليل عدد تخصيصات المتغيرات ، وتبسيط عمليات تكرار الذيل والمزيد ( wiki ). بالإضافة إلى مثل هذه العمليات العامة ، يحتوي Proguard على تحسينات مفيدة على وجه التحديد لمنصة Android ، على سبيل المثال ، استبدال فئات التعداد بالأحبار ، وحذف تعليمات التسجيل.


التعتيم


أخيرًا ، يمكن لـ Proguard تحويل كل التعليمات البرمجية الخاصة بك إلى فوضى غير قابلة للقراءة عن طريق إعادة تسمية جميع الفئات والأساليب والحقول إلى مجموعات من الأحرف العشوائية (في الواقع ليست عشوائية تمامًا). هذا خيار مفيد للغاية ، حيث يمكن لأي شخص فك ملف apk الخاص بك ، وليس لدى الجميع الصبر لفهم التعليمات البرمجية المشوشة.


مبدأ العمل


يعمل Proguard في 3 خطوات في التسلسل الموصوف أعلاه: تقلص الشفرةالتحسينالتشويش . كل خطوة اختيارية.


يتم إيقاف خطوة التحسين في حالة Android SDK بشكل افتراضي.


لكي يعمل برنامج Proguard ، يلزمك توفير 3 مكونات:


  • الكود البرمجي الخاص بك هو أرشيف يحتوي على ملفات class الخاصة ببرنامجك وجميع المكتبات التي تستخدمها (jar و aar و apk و war و zip وما إلى ذلك). يقوم برنامج Proguard فقط بتعديل التعليمات البرمجية المترجمة بالفعل ولا علاقة له بالمصدر.
  • ملف (ملفات) التكوين - ملف (ملفات) يحتوي على جميع القواعد والخيارات والإعدادات التي تريد بدء المعالجة بها.
  • أوعية المكتبة (aar ، apks ، ...) - فئات النظام الأساسي الذي يعمل عليه البرنامج. في حالة Android ، هذا هو android.jar . هذه المحفوظات مطلوبة فقط من أجل التحليل الصحيح لكودك ، ولن يتم تعديلها (هذا غير منطقي ، نظرًا لأن android.jar "على الهاتف" ، وليس لدينا إمكانية الوصول إليه).

صورة من عرض Jeb Ware ، رابط في نهاية المقال
(صورة من عرض Jeb Ware ، رابط في نهاية المقال)


باستخدام فئات المكتبة وملفات التكوين الخاصة بك ، يقوم Proguard بتعريف جميع نقاط الدخول إلى برنامجك ( البذور ). بمعنى آخر ، تحدد تلك الفئات والأساليب التي يمكن استدعاؤها من الخارج والتي لا يمكن لمسها. ثم ، بدءًا من البذور المكتشفة ، يعبر Proguard بشكل متكرر كل التعليمات البرمجية الخاصة بك ، ويضع علامة على كل شيء "يمكن" الوصول إليه. سيتم حذف جميع التعليمات البرمجية الأخرى. يجب تحديد نقطة إدخال واحدة على الأقل في التكوين. بالنسبة لبرنامج Java القياسي ، هذه هي الوظيفة main . في Android ، لا توجد نقطة إدخال واحدة في البرنامج ؛ بدلاً من ذلك ، لدينا مكونات قياسية (نشاط ، خدمة ، إلخ) يتم إنشاؤها واستدعاؤها من قبل النظام. لحسن الحظ ، لا نحتاج إلى تحديد أي شيء هنا بمفردنا ، فسيقوم Android SDK بإنشاء التهيئة اللازمة لنا.


الملفات المصاحبة


بعد اكتشاف جميع نقاط الإدخال ، سيكتبها برنامج seeds.txt ملف seeds.txt .


يتم كتابة جميع التعليمات البرمجية التي وجدها Proguard غير ضرورية إلى ملف usage.txt . هذا اسم غريب نوعًا ما لملف يحتوي على رمز بعيد ، سيكون من الأصح تسميته unusage.txt ، ولكن لدينا ما لدينا ، فقط تذكر ذلك.


في خطوة التعتيم ، سيتم إنشاء ملف mapping.txt يحتوي على أزواج <اسم الفئة الأصلية | الطريقة | الحقل> -> <اسم الفئة المظلمة | الطريقة | الحقل>. هذا الملف مفيد عندما تحتاج إلى إلغاء تشفير برنامج ، على سبيل المثال ، قراءة stacktrace. ليس مطلوبًا إعادة تعيين الملفات يدويًا ؛ تحتوي حزمة Android SDK على أدوات مساعدة proguardui للمساعدة. علاوة على ذلك ، إذا كنت تستخدم Fabric Crashlytics ، فيمكن للمكون الإضافي التدريجي العثور على هذا الملف وتحميله في وحدة التحكم بشكل مستقل ، لذلك لا داعي للقلق بشأنه.


في حالة Android ، توجد هذه الملفات عادةً في app/build/output/mapping/<product-flavor-name>/ .


يقوم Proguard أيضًا بإنشاء ملف dump.txt يحتوي على كل شيء وضعه Proguard في الأرشيف النهائي. لم يكن مفيدًا أبدًا بالنسبة لي ، ولكن ربما سيكون مفيدًا لشخص ما.


كيف تسير الأمور على Android


يمكن لـ Android Gradle Plugin تشغيل Proguard بمفرده. كل ما عليك فعله هو تمكين هذا الخيار وتحديد ملفات التكوين.


 buildTypes { <...> release { minifyEnabled true proguardFiles 'proguard-rules.pro', getDefaultProguardFile('proguard-android.txt') } } 

minifyEnabled true - تمكين Proguard في وقت البناء


proguardFiles - قائمة ملفات التكوين. ستتم إضافة القواعد من جميع ملفات التكوين إلى القائمة العامة بالترتيب الذي تظهر به.


proguard-rules.pro هو ملف التكوين الخاص بنا مع القواعد الخاصة بالمشروع


getDefaultProguardFile('proguard-android.txt') - وظيفة تُرجع ملف التكوين القياسي لتطبيقات Android. يكمن في AndroidSDK/tools/proguard


في الواقع ، يحتوي Android SDK على ملفين proguard-android.txt : proguard-android.txt و proguard-android-optimize.txt . يحتوي الخيار الأول على خيار -dontoptimize ، والذي يوقف جميع التحسينات. إذا كنت ترغب في تمكين التحسين ، استخدم التكوين الثاني.


بالإضافة إلى عمليات التهيئة القياسية هذه ، تنشئ حزمة Android SDK (aapt) تلقائيًا مجموعة من القواعد للموارد: يتحقق aapt من جميع ملفات xml (بما في ذلك البيان) للعثور على جميع الأنشطة والخدمات والمشاهدات وما إلى ذلك. ووضع القواعد اللازمة لهم. يمكن العثور على القواعد التي تم إنشاؤها في app/build/intermediates/proguard-rules/<flavor>/aapt_rules.txt . لا تحتاج إلى تحديده بنفسك ، سيضيف Android Gradle Plugin هذه القواعد تلقائيًا.


صورة من عرض Jeb Ware ، رابط في نهاية المقال
(صورة من عرض Jeb Ware ، رابط في نهاية المقال)


Configs


يعد إعداد Proguard الجزء الأساسي للعمل معه وفي نفس الوقت هو الأصعب. يمكن للتكوين غير الصحيح أن يكسر بسهولة تجميع التطبيق والتطبيق نفسه في وقت التشغيل. يتم توثيق جميع خيارات التكوين المتاحة بالتفصيل عند الإيقاف. الموقع.


من بين جميع الخيارات ، أود أن أخص بالذكر المجموعات الثلاث الأكثر أهمية:


  • الاحتفاظ بالقواعد - جميع نقاط الدخول الممكنة للبرنامج. القواعد التي تخبر Proguard عن الفئات أو الأجزاء من الفئات التي يجب الاحتفاظ بها دون تغيير أو أي التعديلات صالحة لفئات محددة.
  • ضبط التحسين - حدد أي التحسينات مقبولة ، وعدد دورات التحسين التي يجب القيام بها.
  • العمل مع التحذيرات والأخطاء وتصحيح الأخطاء

احفظ القواعد


هذه مجموعة من الخيارات المصممة لحماية التعليمات البرمجية الخاصة بك من Proguard الذي لا يرحم. تبدو هذه القاعدة في شكلها العام كما يلي:


 -keep [,modifier,...] class_specification 

Keep هو الأكثر شيوعًا بين هذه الخيارات (هناك خيارات أخرى) ، حيث يطلب من Proguard إنقاذ الفصل نفسه وجميع أعضاء الفصل: الحقول والأساليب.


class_specification - قالب يشير إلى الفئة ( class_specification ) أو أجزائها (أعضاء الفصل). العرض العام للقالب كبير جدًا ، ويمكن مشاهدته . التوثيق . يمكنك الاتصال به ، ولكن بشكل عام ، يمكنك فقط تذكر أن لدينا الفرصة لتكوين قالب من هذه المكونات:


  • حدد جميع الفئات باسم معين ، حزمة
  • حدد جميع الفئات التي ترث / تطبق فئات / واجهات معينة
  • حدد جميع الفصول بمعدلات محددة و / أو تعليقات توضيحية محددة
  • حدد جميع الأساليب ذات الاسم المحدد والمعدلات والحجج وقيمة الإرجاع
  • حدد جميع الحقول التي تحمل اسمًا محددًا ومعدلات من نوع معين.
  • من الممكن استخدام أحرف البدل


    مرة أخرى ، هذا ليس وصفًا صارمًا للقالب ، بل هو قائمة بالميزات التي لدينا. إليك بعض الأمثلة:



-keep public class com.example.MyActivity
حفظ فئة com.example.MyActivity


-keep public class * extends android.app.Activity
حفظ جميع الفئات العامة التي ترث android.app.Activity


 -keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...); } 

ابحث عن جميع الفئات العامة التي ترث android.view.View واحفظ 3 android.view.View مع معلمات معينة فيها + جميع الطرق العامة ، باستخدام مُعدِّل void ، أي وسيطات واسم يبدأ set . يمكن تعديل جميع الأجزاء الأخرى من الفصل.


-keep class com.habr.** { *; }
حفظ جميع الفئات وجميع محتوياتها في حزمة com.habr


modifiers - إضافة إلى قاعدة الاحتفاظ:


  • includedescriptorclasses - بالإضافة إلى الفئة / الطريقة / الحقل المحدد ، تحتاج إلى حفظ جميع الفئات التي تحدث في الواصفات الخاصة بهم.
  • includecode - لا يمكن لمس محتويات الطريقة المشار إليها بهذه القاعدة بالذات.
  • allowshrinking - الفئات التي تشير إليها هذه القاعدة ليست بذورًا ويمكن حذفها ، ولكن فقط إذا لم يتم استخدامها في البرنامج نفسه. ومع ذلك ، إذا بقيت هذه الشفرة بعد إعادة التشفير (بسبب حقيقة أن شخصًا ما يستخدمها) ، فمن المستحيل تحسين / تشويش هذا الرمز.
  • allowoptimization - يمكن تحسين الفئات المشار إليها في هذه القاعدة فقط ، ولكن لا يمكن إزالتها أو التعتيم عليها.
  • allowobfuscation - الفئات التي تشير إليها هذه القاعدة يمكن أن تكون غير allowobfuscation فقط ، ولكن لا يمكن إزالتها أو تحسينها.

بالإضافة إلى keep ، هناك عدد قليل من الخيارات الأخرى:


- أعضاء -keepclassmembers - يشير إلى أنه يجب حفظ أعضاء الفصل إذا تم الحفاظ على الفصل نفسه بعد تقليص الشفرة.


-keepclasseswithmembers - يشير إلى أنك تريد حفظ الفئات التي تقع محتوياتها تحت القالب المحدد. على سبيل المثال ، -keepclasseswithmembers class * { public <init>(android.content.Context); } -keepclasseswithmembers class * { public <init>(android.content.Context); } - يحفظ جميع الفئات التي تحتوي على مُنشئ عام مع وسيطة واحدة من نوع Context .


-keepnames - اختصار لـ -keep,allowshrinking .


-keepclassmembernames - اختزال لأعضاء -keepclassmembers,allowshrinking .


keepclasseswithmembernames - اختصار -keepclasseswithmembers,allowshrinking .


ضبط التحسين


الخيار الأكثر أهمية هنا هو -dontoptimize flag. إذا كان موجودًا ، فلن يتم إجراء التحسين وسيتم تجاهل جميع خيارات التحسين الأخرى.


هناك العديد من خيارات التحسين ، ولكن ما يلي أكثر فائدة لي:


-optimizations optimization_filter - سرد جميع الطرق التي تريد استخدامها. من الأفضل استخدام المجموعة المحددة في proguard-android-optimize.txt أو مجموعة فرعية منها. يمكن العثور على قائمة بجميع التحسينات هنا .


-optimizationpasses n - عدد دورات التحسين. يمكن لعدة دورات تحسين النتيجة. في الوقت نفسه ، يعد Proguard ذكيًا بما يكفي لإيقاف الدورات إذا رأى أن النتيجة لم تتحسن منذ آخر مرة.


-assumenosideeffects class_specification - يشير إلى أن هذه الطريقة ليس لها أي آثار جانبية وتعيد فقط بعض القيمة. سيحذف برنامج Proguard المكالمات إلى هذه الطريقة إذا اكتشف عدم استخدام النتيجة التي تُرجعها. ربما يكون الاستخدام الأكثر شيوعًا لهذا الخيار هو حذف جميع سجلات التصحيح: -assumenosideeffects class android.util.Log { public static int d(...); } -assumenosideeffects class android.util.Log { public static int d(...); }


-allowaccessmodification - إظهار كل ما هو مخفي :) خيار رائع يسمح لك بالتخلص من مجموعة من الموصلات الاصطناعية للفئات المتداخلة. يعمل فقط بالاقتران مع -repackageclasses


-repackageclasses - -repackageclasses بنقل جميع الفئات إلى حزمة واحدة محددة. هذا ينطبق أكثر على التعتيم ، ولكن في نفس الوقت ، يعطي نتائج جيدة في التحسين.


خيارات مفيدة أخرى


-dontwarn و -dontnote


برنامج Proguard ذكي جدًا ويبلغ دائمًا عن الأماكن المشبوهة أثناء تحليل الشفرة ، وأحيانًا تكون هذه ملاحظات وأحيانًا تحذيرات. إذا لم يكن جهازك قيد التشغيل مع تشغيل Proguard ، فتأكد من قراءة جميع السجلات التي ينتجها ، وسوف يكتب ما حدث من الخطأ ، وعلى الأرجح ، حتى يخبرك بكيفية إصلاحه. بعد قراءة جميع الرسائل ، يمكنك إما إصلاح المشكلة أو تجاهل رسالة أحد هذه الخيارات إذا كنت متأكدًا من عدم وجود مشكلة.


على سبيل المثال ، يحدث أن بعض مكتبات جافا تستخدم فئات النظام الأساسي غير الموجودة في android.jar وسوف يحذر Proguard من ذلك. إذا كنت متأكدًا من أن هذه المكتبة تعمل بشكل جيد في بيئة Android ، فيمكنك إيقاف تشغيل هذا التحذير -dontwarn java.lang.management.**


-whyareyoukeeping class_specification هو خيار مفيد سيطبع سبب قرار Proguard بعدم لمس هذه الفئة / الطريقة.


-verbose - طباعة سجلات واستثناءات أكثر تفصيلاً


-printconfiguration - طباعة قائمة كاملة بالخيارات من جميع ملفات التكوين التي تم استخدامها ، بما في ذلك القواعد من المكتبات والتي تم إنشاؤها من خلال aapt.


-keepattributes SourceFile, LineNumberTable - يحفظ المعلومات الوصفية (أسماء الملفات ، ترقيم الأسطر) لتتمكن من تصحيح التعليمات البرمجية في IDE والحصول على تكديس ذي معنى. تأكد من إضافة هذا الخيار.


تدرب


يحدث هذا عادةً: قم بتشغيل برنامج Proguard ويكسر المشروع بالكامل مع إعطاء الكثير من الأخطاء. يقوم العديد في هذه الخطوة بإيقاف Proguard ومحاولة عدم العودة إليه. سأحاول تقديم بعض النصائح لتسهيل عملية الانتقال هذه.


حدد نقاط الدخول المبدئية


إذا كنت مطورًا لنظام Android ، فكل شيء أساسي للغاية - ما عليك سوى اختيار أحد proguard-android.txt من Android SDK: proguard-android.txt أو proguard-android-optimize.txt ، proguard-android-optimize.txt بكل شيء يجب أن يظل على حاله.


تحقق من جميع المكتبات


في الآونة الأخيرة ، يتم توزيع المزيد والمزيد من المكتبات مع تكوينات proguard الجاهزة. يمكن أن ينظر Proguard داخل الأرشيف ، والعثور على تكوين المكتبة وإضافته إلى خيارات أخرى. تحقق من كل مكتبة تستخدمها لمثل هذا التكوين.


(محتويات ملف aar لإحدى المكتبات)
(محتويات ملف aar لإحدى المكتبات)


إذا كنت تستخدم خدمات Google Play ، com.google.gms.google-services المكون الإضافي com.google.gms.google-services التكوين الذي تحتاجه بنفسك.


إذا لم يقم مؤلفو المكتبة بتضمين التكوين في الأرشيف ، فربما اهتموا وكتبوا القواعد على موقعهم على الويب ، أو على صفحة المستودع أو في ملف README. حاول العثور على التكوين بنفسك لإصدار المكتبة الذي تستخدمه.


إذا لم تتمكن من العثور على أي قواعد جاهزة في أي مكان ، فسيتعين عليك قراءة السجلات وحل المشكلة بشكل فردي. على الأرجح ، ستحتاج إلى إضافة قواعد الاحتفاظ لرمز المكتبة المكسور. أو تجاهل الأخطاء إذا لم تتداخل مع البرنامج.


افحص الكود الخاص بك


أنت تعرف بشكل أفضل الرمز الذي يمكنك إرساله تحت السكين ، ولكن يجب عليك النظر بعناية في جميع الأماكن التي يتم فيها استخدام الانعكاس على أي حال:


  • Class.forName (...) (تعد الوثائق بأن Proguard قادر على تعريف مثل هذا الرمز ، ومع ذلك ، كانت هناك حالات ، يجدر التحقق)
  • النماذج / فئات الكيانات المستخدمة في التسلسل والتخطيط. جميع الفصول التي تكون أسماء الحقول الخاصة بها (أحيانًا الفصول نفسها) مهمة للاحتفاظ بها (Gson ، RealmIO ، إلخ.)
  • مكالمات المكتبة الأصلية من خلال JNI

الاختبارات


إذا تم استخدام فئة / طريقة فقط في الاختبارات وليس في أي مكان آخر ، فسيحذف Proguard هذا الرمز. هذا موقف شائع إذا كان لديك TDD :) في هذه الحالة ، لدي تكوين منفصل ، حيث أقوم بإضافة فئات لم يتم دمجها بعد في المشروع ، ولا يتم استخدامها في أي مكان ، ولكن يجب اختبارها.


في Android Gradle Plugin ، بالإضافة إلى تعليمات proguardFiles ، لا يزال هناك testProguardFiles . هذه التعليمات مطلوبة لتحديد التكوينات التي سيتم تطبيقها على تطبيق الاختبار الذي تم إنشاؤه من أجل اختبار التطبيق الخاص بك عند تشغيل اختبارات الأجهزة. عادة ما يتم استخدام هذا من أجل تحقيق نفس التحسين / التعتيم في كلا ملفي apk بحيث لا يكون هناك عدم التزامن بينهما. رابط


محلل APK


يحتوي Android Studio على مثل هذه الأداة الرائعة. يمكنك فتحه إما من خلال Find Action -> Analyze APK ، أو عن طريق فتح ملف apk نفسه في Android Studio. يعرض المحلل الكثير من المعلومات المفيدة ، ولكننا الآن مهتمون بالكود. لمعرفة ما تم وضعه في النهاية في ملف APK ، تحتاج إلى تحديد ملف classes.dex



بشكل افتراضي ، سيظهر لك بالضبط الرمز الناتج الذي اجتاز خطوات التقلص والتحسين. ومع ذلك ، يمكنك النقر فوق الزر Load Proguard ... تعيينات ، إضافة seeds.txt و usage.txt لمشاهدة التعليمات البرمجية التي تم حذفها.



إذا قام Proguard بتعديل الرمز الذي تحتاج إليه لسبب ما ، فابحث عنه في Analyzer وحدد Generate Proguard Keep Rule من خلال RMB. سيُنشئ المحلل خيارًا من عدة خيارات للقواعد ، من الأكثر عامة إلى الأكثر تحديدًا ، حدد أحدها .




لمؤلفي المكتبة


إذا كنت تقوم بإنشاء مكتبة Android ، يمكنك إضافة تكوين proguard لعملائك على النحو التالي:


 buildTypes { release { consumerProguardFiles 'proguard-rules.pro' } } 

في رأيي ، من الأفضل عدم تحسين مكتبتك والتشويش عليها بحماس ، ولكن لتوفير هذه الفرصة لعملائك. النغمة الجيدة هي أن تضيف إلى التكوين ما سيظل على العملاء إضافته إذا تضمنوا Proguard. ومع ذلك ، إذا كنت لا تزال ترغب في إضافة الأمان ، فمن الواضح أنك بحاجة إلى حماية واجهة برمجة التطبيقات الأساسية الخاصة بمكتبتك من Proguard ، بما في ذلك الواصفات والتوقيعات.


R8 و DexGuard و Redex


R8 هي أداة جديدة من Google لتحل محل Proguard الحالي. انتظر ، لا تحاول أن تنسى كل ما قرأته للتو في المقالة ، فقط تعامل معه مثل برنامج Proguard الجديد. تعد Google بالحفاظ على واجهة برمجة التطبيقات العامة بالكامل ، حتى تعمل جميع التكوينات كما كانت من قبل. لا يزال المشروع في مرحلة تجريبية ، ولكن يمكنك تجربته بنفسك.


DexGuard هي أداة مدفوعة الأجر من مطوري Proguard. يمكن استخدامه معًا أو بدلاً من Proguard. يمكن القول بأن DexGuard يمكنه القيام بكل ما يمكن لـ Proguard القيام به ، ولكن بشكل أفضل. للأسف ، لم تتح لي الفرصة لتجربتها ، إذا كان لدى أي شخص خبرة ، يرجى مشاركتها.


Redex هو محسن dex آخر من Facebook. ويذكر أنه من خلاله يمكنك تحقيق زيادة في الإنتاجية تصل إلى 25٪ وتقليل حجم التطبيق من خلال تطبيق الأداة على الرمز الذي تمت معالجته بالفعل بواسطة Proguard.


بدلا من الاستنتاج


لا تخف من استخدام Proguard ، ولا تكن كسولًا وقضاء بعض الوقت في الإعداد. سيؤدي ذلك إلى تقليل حجمه وزيادة سرعة العمل من إضافة ولاء المستخدمين. في نفس الوقت ، حاول إنشاء تكوينات Proguard فعالة ، لا تكتب قواعد "السجاد" ، وإلا سيأتي إليك جيك وارتون الغاضب ويوبخك.



الموارد


موقع Proguard . هناك أيضًا معلومات حول DexGuard.
قواعد أمثلة مختلفة
R8
تسجيل عرض تقديمي لكيفية عمل Proguard مع DroidCon
تحتفظ ProGuard الفعالة بقواعد لتطبيقات العروض التقديمية الأصغر (Google I / O '18)
تعليمات لتمكين وتكوين Proguard لنظام Android
صفحة ويكي
Redex

Source: https://habr.com/ru/post/ar415499/


All Articles