حذف کد مرده

معرفی

منبع jar برنامه جاوا شما احتمالاً حاوی تعداد زیادی فایل منبع است که یا کاملاً استفاده نشده اند یا فقط برای چند روش گنجانده شده اند. ترجمه این کد مرده به Objective-C، برنامه iOS شما را به طور غیر ضروری پر می کند و احتمال مواجهه با خطاهای ترجمه را افزایش می دهد، به خصوص اگر یکی از کتابخانه های جاوا شما از ویژگی هایی استفاده کند که توسط مترجم J2ObjC پشتیبانی نمی شود.

ProGuard یک ابزار منبع باز است که به شما کمک می کند بایت کد جاوا را کوچک کنید، مبهم کنید و در غیر این صورت آن را مخدوش کنید. به صورت اختیاری، با دادن یک بایت کد، می‌تواند یک گزارش «استفاده» را چاپ کند که تمام کلاس‌ها و متدهای استفاده نشده در برنامه شما را فهرست می‌کند. J2ObjC می تواند از چنین گزارشی برای رد شدن از این کلاس ها و متدها در حین ترجمه استفاده کند.

ProGuard را می توانید از اینجا دانلود کنید.

پیکربندی ProGuard

ProGuard یک فایل پیکربندی را به عنوان آرگومان خط فرمان می پذیرد که بهینه سازی هایی را که باید انجام دهد و گزارش هایی که باید ایجاد کند را مشخص می کند. از آنجایی که J2ObjC فقط نیاز به دانستن کدهای مرده دارد، باید همه بهینه سازی ها و ثبت نام های اضافی را غیرفعال کنید. فایل ارسال شده به J2ObjC باید فقط شامل متن هدر ProGuard و گزارش استفاده باشد.

ابتدا، مطمئن شوید که یک بایت کد برای برنامه خود دارید که با منبع jar مطابقت دارد. می توانید از فایل پیکربندی زیر که از دفترچه راهنمای 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 چیزی را که نباید حذف کند. اگر jar شما یک برنامه کاربردی است و نه فقط یک کتابخانه، پس مشخص کردن متد main() همانطور که در اینجا انجام داده‌ایم باید تمام موارد لازم را حفظ کند. می توانید خروجی حاصل از ProGuard را به عنوان یک بررسی سلامت عقل بررسی کنید.

در حال اجرا ProGuard

هنگامی که jar بایت کد برنامه خود و یک فایل پیکربندی سفارشی ProGuard (مثلاً usage.pg نامیده می شود) را دارید، می توانید با دستور زیر یک فایل گزارش استفاده ایجاد کنید:

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

با این کار فایلی به نام usage.log ایجاد می شود که کلاس ها و متدهای استفاده نشده برنامه شما را فهرست می کند.

اجرای J2ObjC با حذف کد مرده

اکنون که گزارش استفاده از ProGuard را دارید، می توانید مرحله حذف کد مرده را در J2ObjC با استفاده از پرچم خط فرمان --dead-code-report <file> فعال کنید. مرحله ترجمه DeadCodeEliminator از گزارش استفاده برای حذف کد مرده از هر فایل منبع قبل از ترجمه به Objective-C استفاده می کند.