إزالة الرموز المميّزة

مقدمة

من المحتمل أن تحتوي البرطمان المصدر لتطبيق Java على عدد كبير من ملفات المصدر غير المستخدمة تمامًا أو المضمنة من خلال طرق قليلة فقط. وتؤدي ترجمة هذا الرمز المعطّل إلى كائن FALSE-C إلى تسخين تطبيق iOS بدون داعٍ وزيادة احتمالية حدوث أخطاء في الترجمة، لا سيما إذا كانت إحدى مكتبات Java تستخدم ميزات لا يدعمها مترجم J2ObjC.

ProGuard هي أداة مفتوحة المصدر تساعدك في تقليص رمز بايت Java وتشويشه. بشكل اختياري، بإمكان هذا الجهاز طباعة تقرير "استخدام" يتضمن جميع الفئات والطرق غير المستخدمة في تطبيقك، وذلك في وعاء رمز بايت. يمكن لـ J2ObjC استخدام هذا التقرير لتخطي هذه الفئات والطرق أثناء الترجمة.

يمكن تنزيل ProGuard هنا.

تهيئة ProGuard

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

أولاً، تأكد من وجود وعاء رمز بايت لتطبيقك يقابل وعاء المصدر. يمكنك استخدام ملف الإعداد التالي، المنسوخ من دليل ProGuard، كنموذج لإنتاج الناتج الذي تتوقّعه شركة J2ObjC:

-injars app-bin.jar
-libraryjars /lib/rt.jar

-dontoptimize
-dontobfuscate
-dontpreverify
-printusage
-dontnote

-keep public class com.foo.app.Main {
    public static void main(java.lang.String[]);
}

-keepclassmembers class * {
    static final % *;
    static final java.lang.String *;
}

يمكنك تعديل ملف الإعداد هذا للتأكد من أن ProGuard لا يحذف أي شيء لا ينبغي إزالته. إذا كانت العلبة الخاصة بك عبارة عن تطبيق وليس مجرد مكتبة، يجب أن يؤدي تحديد طريقة main() كما وضحنا هنا إلى الاحتفاظ بكل البيانات الضرورية. يمكنك فحص الناتج الناتج من ProGuard كإجراء تحقُّق من السلامة.

ركض ProGuard

بعد الحصول على وعاء رمز البايت لتطبيقك وملف إعداد ProGuard المخصص (يُسمى على سبيل المثال، usage.pg)، يمكنك إنشاء ملف تقرير الاستخدام باستخدام الأمر التالي:

java -jar proguard.jar @usage.pg > usage.log

سيؤدي هذا إلى إنشاء ملف باسم usage.log يسرد الفئات والطرق غير المستخدمة في تطبيقك.

تشغيل J2ObjC مع التخلص من الرمز الميت

الآن وبعد حصولك على تقرير استخدام ProGuard، يمكنك تفعيل مرحلة إزالة الرمز المعطّل في J2ObjC باستخدام علامة سطر الأوامر --dead-code-report <file>. ستستخدم مرحلة ترجمة DeadCodeEliminator تقرير الاستخدام لإزالة التعليمات البرمجية المعطلة من كل ملف مصدر قبل الترجمة إلى الهدف C.