डेड कोड एलिमिनेशन

शुरुआती जानकारी

आपके Java ऐप्लिकेशन के सोर्स जार में शायद बड़ी संख्या में ऐसी सोर्स फ़ाइलें हैं जो या तो पूरी तरह से इस्तेमाल नहीं हुई हैं या जिन्हें कुछ ही तरीकों से शामिल किया गया है. इस बंद कोड का Objective-C में अनुवाद करने से आपका iOS ऐप्लिकेशन बिना किसी वजह के फूल जाएगा और अनुवाद से जुड़ी गड़बड़ी होने की संभावना बढ़ जाएगी. ऐसा खास तौर पर तब होगा, जब आपकी कोई Java लाइब्रेरी ऐसी सुविधाओं का इस्तेमाल करती है जो J2ObjC अनुवादक के साथ काम नहीं करती.

ProGuard एक ओपन सोर्स टूल है, जो Java बाइटकोड को छोटा करने, उसे उलझाने, और उसे मर्ज करने में आपकी मदद करता है. इसके अलावा, एक बाइटकोड जार के साथ, यह एक "इस्तेमाल" रिपोर्ट को प्रिंट कर सकता है जिसमें आपके ऐप्लिकेशन में इस्तेमाल नहीं की गई सभी क्लास और तरीकों की सूची होती है. J2ObjC, अनुवाद के दौरान इन क्लास और तरीकों को छोड़ने के लिए ऐसी रिपोर्ट का इस्तेमाल कर सकता है.

ProGuard को यहां डाउनलोड किया जा सकता है.

ProGuard को कॉन्फ़िगर करना

ProGuard एक कॉन्फ़िगरेशन फ़ाइल को कमांड-लाइन आर्ग्युमेंट के तौर पर स्वीकार करता है. यह फ़ाइल, उसके ज़रिए किए जाने वाले ऑप्टिमाइज़ेशन और जनरेट की जाने वाली रिपोर्ट के बारे में बताती है. J2ObjC को सिर्फ़ बंद कोड के बारे में जानकारी चाहिए, इसलिए आपको सभी ऑप्टिमाइज़ेशन और बाहरी लॉगिंग की सुविधा बंद कर देनी चाहिए. J2ObjC को पास की गई फ़ाइल में सिर्फ़ ProGuard हेडर टेक्स्ट और इस्तेमाल की रिपोर्ट होनी चाहिए.

सबसे पहले, पक्का करें कि आपके पास अपने ऐप्लिकेशन के लिए एक बाइट कोड जार हो, जो सोर्स जार से जुड़ा हो. J2ObjC की उम्मीद के मुताबिक आउटपुट बनाने के लिए, टेंप्लेट के तौर पर ProGuard मैन्युअल से कॉपी की गई इस कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल किया जा सकता है:

-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 के इस्तेमाल की रिपोर्ट मिल गई है. इसलिए, कमांड लाइन फ़्लैग --dead-code-report <file> का इस्तेमाल करके, J2ObjC में मृत कोड एलिमिनेशन फ़ेज़ चालू किया जा सकता है. DeadCodeEliminator अनुवाद चरण, Objective-C के अनुवाद से पहले हर सोर्स फ़ाइल से बंद कोड को हटाने के लिए इस्तेमाल की रिपोर्ट का इस्तेमाल करेगा.