ProGuard — यह क्या है, विशेषताएँ और ऑबफ़स्केशन कॉन्फ़िगरेशन

लेखक: IT Sectr प्रकाशित: 2026-04-03 पढ़ने का समय: 8 मिनट

ProGuard एक Java बाइटकोड को सिकोड़ने, ऑप्टिमाइज़ करने और ऑबफ़स्केट करने का टूल है, जो Android SDK में एकीकृत है और एप्लिकेशन को रिवर्स इंजीनियरिंग से बचाता है। Google I/O Security Session (2025) के अनुसार, सही ProGuard कॉन्फ़िगरेशन APK का आकार 15-25% कम करता है और कोड लीक के जोखिम को 60% तक घटाता है। यह टूल Android डेवलपमेंट के लिए मानक बन गया है और दुनिया भर में लाखों एप्लिकेशन में उपयोग होता है।

मुख्य बातें

  • ProGuard Android एप्लिकेशन में Java बाइटकोड को सिकोड़ने, ऑप्टिमाइज़ करने और ऑबफ़स्केट करने का टूल है।
  • सिकुड़न अनुपयोगी क्लासेस, मेथड और फ़ील्ड को हटाता है, जिससे APK का आकार कम होता है।
  • ऑबफ़स्केशन पहचानकर्ताओं को छोटे अर्थहीन नामों में बदलता है ताकि डीकंपाइलेशन से बचाया जा सके।
  • ऑप्टिमाइज़ेशन मेथड इनलाइनिंग और बाइटकोड स्तर पर सरलीकरण करता है।
  • Mapping फ़ाइल क्रैश रिपोर्ट को डीऑबफ़स्केट करने की अनुमति देती है और रिलीज़ बिल्ड के समर्थन के लिए आवश्यक है।

ProGuard क्या है?

ProGuard एक स्वतंत्र रूप से वितरित टूल है जो Java बाइटकोड प्रोसेस करता है, जिसे Guardsquare ने विकसित किया है। यह Android SDK में निर्मित है और तीन मुख्य कार्य करता है: कोड सिकुड़न, ऑप्टिमाइज़ेशन और ऑबफ़स्केशन। ProGuard एप्लिकेशन और उसकी निर्भरताओं के सभी बाइटकोड का विश्लेषण करता है, अनुपयोगी क्लासेस और मेथड की पहचान करता है, उन्हें हटाता है, और फिर शेष कोड को ऑबफ़स्केट करता है।

इतिहास और स्थिति

ProGuard को Eric Lafortune ने 2000 में Java एप्लिकेशन ऑप्टिमाइज़ेशन टूल के रूप में बनाया था। 2008 में Android के आगमन के साथ, ProGuard को Android SDK में एकीकृत किया गया और यह एप्लिकेशन सुरक्षा के लिए मानक टूल बन गया। Guardsquare आँकड़ों (2024) के अनुसार, ProGuard का उपयोग Google Play पर 80% से अधिक एप्लिकेशन में किया जाता है, जिसमें प्रमुख बैंकों और तकनीकी कंपनियों के ऐप शामिल हैं।

ProGuard कोड कैसे प्रोसेस करता है

ProGuard चार चरणों में प्रोसेसिंग करता है। पहले चरण (सिकुड़न) में, टूल एप्लिकेशन में एंट्री पॉइंट का विश्लेषण करता है और यह निर्धारित करता है कि निष्पादन के दौरान कौन सी क्लासेस, मेथड और फ़ील्ड पहुँच योग्य हैं। दूसरे चरण (ऑप्टिमाइज़ेशन) में, ProGuard प्रदर्शन बढ़ाने के लिए बाइटकोड को बदलता है। तीसरा चरण (ऑबफ़स्केशन) पहचानकर्ताओं का नाम बदलता है। अंतिम चरण में, preverify वर्चुअल मशीन पर बाइटकोड सत्यापन के लिए आवश्यक मेटाडेटा जोड़ता है।

ProGuard की मुख्य विशेषताएँ

आइए ProGuard के तीन मुख्य कार्यों में से प्रत्येक की विस्तार से जाँच करें: सिकुड़न, ऑप्टिमाइज़ेशन और ऑबफ़स्केशन। प्रत्येक तंत्र को समझने से टूल को इष्टतम रूप से कॉन्फ़िगर करने में मदद मिलेगी।

कोड सिकुड़न

ProGuard एंट्री पॉइंट (main मेथड, Activity, BroadcastReceiver) से कॉल ग्राफ का विश्लेषण करता है और अनुपयोगी कोड को हटाता है। Retrofit, OkHttp और Gson जैसी लाइब्रेरी वाले एक सामान्य Android प्रोजेक्ट में, सिकुड़न 40% तक बाइटकोड हटा सकता है, जिसमें अप्रयुक्त लाइब्रेरी मेथड, डीबग कोड और टेस्ट क्लासेस शामिल हैं। यह सीधे APK आकार को कम करता है और एप्लिकेशन लोड समय को छोटा करता है।

ऑप्टिमाइज़ेशन

ऑप्टिमाइज़ेशन चरण में, ProGuard बाइटकोड के 20 से अधिक विभिन्न रूपांतरण करता है: छोटी मेथड का इनलाइनिंग, अप्रयुक्त पैरामीटर हटाना, तार्किक अभिव्यक्तियों को सरल बनाना, समान कोड ब्लॉक को मर्ज करना। उदाहरण के लिए, छोटे गेटर और सेटर को सीधे फ़ील्ड एक्सेस से बदला जा सकता है। ऑप्टिमाइज़ेशन एप्लिकेशन संरचना के आधार पर कोड निष्पादन को 5-15% तक तेज कर सकता है।

ऑबफ़स्केशन

ऑबफ़स्केशन ProGuard में क्लासेस, मेथड और फ़ील्ड को छोटे अक्षर अनुक्रमों में नाम बदलकर काम करता है: a, b, c, a.a, a.b इत्यादि। नाम बदले गए तत्वों के सभी संदर्भ पूरे कोड में स्वचालित रूप से अपडेट हो जाते हैं। यह ध्यान रखना महत्वपूर्ण है कि ऑबफ़स्केशन प्रोग्राम के व्यवहार को नहीं बदलता, बल्कि केवल डीकंपाइल कोड को समझना कठिन बनाता है। लाइब्रेरी और सार्वजनिक API को keep नियमों के माध्यम से ऑबफ़स्केशन से बाहर रखा जाना चाहिए।

java
// ProGuard ऑबफ़स्केशन से पहले
public class LoginManager {
    public User authenticateUser(String username, String password) {
        // प्रमाणीकरण तर्क
    }
}

// ProGuard ऑबफ़स्केशन के बाद
public class a {
    public Object a(String b, String c) {
        // नाम बदले गए पहचानकर्ताओं के साथ वही तर्क
    }
}

Android प्रोजेक्ट में ProGuard कॉन्फ़िगरेशन

ProGuard कॉन्फ़िगरेशन Android एप्लिकेशन बिल्ड सेटअप में एक महत्वपूर्ण कदम है। गलत नियम आवश्यक क्लासेस को हटाने का कारण बन सकते हैं और परिणामस्वरूप रिलीज़ संस्करण में क्रैश हो सकते हैं।

build.gradle में बुनियादी सेटअप

Android प्रोजेक्ट में ProGuard सक्रिय करने में रिलीज़ बिल्ड प्रकार के लिए minifyEnabled फ़्लैग को true पर सेट करना शामिल है। मानक ProGuard नियम proguard-android-optimize.txt फ़ाइल में Android SDK के साथ शामिल किए जाते हैं। कस्टम नियम एक अलग proguard-rules.pro फ़ाइल में जोड़े जाते हैं। बिल्ड के दौरान, ProGuard पहले मानक नियम लागू करता है, फिर कस्टम नियम, जो बेस कॉन्फ़िगरेशन को ओवरराइड करने की अनुमति देता है।

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

proguard-rules.pro फ़ाइल

कस्टम नियम फ़ाइल में विशिष्ट प्रोजेक्ट के लिए निर्देश होते हैं। सामान्य नियमों में रिफ्लेक्शन के माध्यम से उपयोग की जाने वाली क्लासेस, Gson/Moshi सीरियलाइज़ेशन के लिए डेटा मॉडल, लाइब्रेरी कॉलबैक इंटरफ़ेस और विशिष्ट एनोटेशन से एनोटेटेड क्लासेस को संरक्षित करना शामिल है। प्रत्येक निर्देश -keep, -dontwarn या -keepclassmembers कीवर्ड से शुरू होता है और उस क्लास के पैटर्न को परिभाषित करता है जिसे ProGuard को संशोधित नहीं करना चाहिए।

properties
# Gson के लिए डेटा मॉडल संरक्षित करें
-keep class com.example.data.model.** { *; }

# रिफ्लेक्शन के माध्यम से उपयोग की जाने वाली क्लासेस संरक्षित करें
-keep class * implements com.google.gson.TypeAdapterFactory

# लाइब्रेरी चेतावनियों को अनदेखा करें
-dontwarn okhttp3.internal.**
-dontwarn retrofit2.**

# एनम संरक्षित करें (ProGuard विशेषता)
-keep class * extends java.lang.Enum { *; }

ProGuard नियम: keep, dontwarn और अन्य

ProGuard कॉन्फ़िगरेशन व्याकरण में कई श्रेणियों के निर्देश शामिल हैं, प्रत्येक प्रोसेसिंग के एक विशिष्ट पहलू का प्रबंधन करता है। आइए उचित कॉन्फ़िगरेशन के लिए आवश्यक मुख्य निर्देशों पर नज़र डालें।

निर्देशउद्देश्यउदाहरण
-keepक्लास और उसके सदस्यों को पूरी तरह संरक्षित करें-keep class com.example.MyClass
-keepclassmembersकेवल क्लास के सदस्यों को संरक्षित करें-keepclassmembers class * { @Inject *; }
-dontwarnचेतावनियों को अनदेखा करें-dontwarn okhttp3.internal.**
-keepparameternamesमेथड पैरामीटर नाम संरक्षित करें-keepparameternames
-keepattributesगुण संरक्षित करें (एनोटेशन, EnclosingMethod)-keepattributes *Annotation*
-dontoptimizeऑप्टिमाइज़ेशन अक्षम करें-dontoptimize

रिफ्लेक्शन और डायनेमिक लोडिंग

ProGuard रिफ्लेक्शन (Class.forName()), ServiceLoader या डायनेमिक DEX फ़ाइल लोडिंग के माध्यम से लोड किए गए कोड का स्थैतिक रूप से विश्लेषण नहीं कर सकता। यदि कोई क्लास अपने स्ट्रिंग नाम से बनाई जाती है, तो ProGuard को इसके अस्तित्व के बारे में पता नहीं चलता और वह इसे अनुपयोगी मानकर हटा सकता है। ऐसी सभी क्लासेस को -keep के माध्यम से स्पष्ट रूप से संरक्षित किया जाना चाहिए। ProGuard सक्षम करने के बाद रिलीज़ बिल्ड में क्रैश का यह सबसे आम कारण है।

लाइब्रेरी और AAR निर्भरताएँ

लाइब्रेरीज़ में अक्सर अपने स्वयं के ProGuard नियम शामिल होते हैं, जो AAR फ़ाइल में एम्बेडेड consumer-rules.pro के माध्यम से बिल्ड में स्वचालित रूप से जुड़ जाते हैं। Android Gradle Plugin बिल्ड के दौरान इन नियमों को स्वचालित रूप से लागू करता है। डेवलपर को केवल यह सुनिश्चित करने की आवश्यकता है कि सभी उपयोग की गई लाइब्रेरी सही नियम प्रदान करती हैं, और यदि आवश्यक हो तो उन्हें प्रोजेक्ट में पूरक करें।

ProGuard समस्याओं की डीबगिंग

ProGuard सक्षम करने के बाद त्रुटियाँ होने पर, स्टैक ट्रेस को डीऑबफ़स्केट करने के लिए mapping फ़ाइल का उपयोग करें। निदान के लिए, -whyareyoukeeping कुंजी का उपयोग करें, जो आउटपुट बिल्ड में क्लास को संरक्षित करने का कारण दिखाती है। अस्थायी रूप से -optimizationpasses और -obfuscation को अक्षम करने से समस्या को स्थानीयकृत किया जा सकता है। Guardsquare के अनुसार, 80% ProGuard समस्याएँ रिफ्लेक्शन क्लासेस के लिए -keep नियम जोड़ने से हल हो जाती हैं।

ProGuard बनाम R8: तुलना और माइग्रेशन

Android Gradle Plugin 3.4 (2019) के रिलीज़ के साथ, Google ने R8 पेश किया — जो ProGuard का उत्तराधिकारी है, जो सीधे D8/R8 कंपाइलर में एकीकृत है। 2023 तक, R8 ने AGP 8.0 में ProGuard को पूरी तरह से बदल दिया, लेकिन प्रोजेक्ट माइग्रेशन के लिए आर्किटेक्चरल अंतर को समझना महत्वपूर्ण है।

आर्किटेक्चरल अंतर

ProGuard DEX में रूपांतरण से पहले Java बाइटकोड (.class फ़ाइलें) प्रोसेस करने वाले एक अलग टूल के रूप में काम करता है। R8 DEX कंपाइलर में एकीकृत है और कोड को निचले स्तर पर प्रोसेस करता है, जो ProGuard में उपलब्ध नहीं होने वाले ऑप्टिमाइज़ेशन की अनुमति देता है। R8 डीशुगरिंग का भी समर्थन करता है — पुराने Android API स्तरों के लिए Java 8+ सिंटैक्टिक शुगर को बैकवर्ड-संगत कोड में बदलना।

R8 के लाभ

Google Android Performance Team (2025) के अनुसार, R8 समान नियमों के साथ ProGuard की तुलना में 10-15% बेहतर कोड सिकुड़न प्रदान करता है। R8 तेज़ है — बिल्ड समय 20-30% कम हो जाता है। इसके अलावा, R8 क्लास-फ़ाइल स्तर के बजाय DEX स्तर पर विश्लेषण के कारण अधिक मृत कोड हटाता है। R8 ProGuard नियम सिंटैक्स के साथ पूरी तरह से संगत है, जो डेवलपर के लिए माइग्रेशन को पारदर्शी बनाता है।

माइग्रेशन प्रक्रिया

ProGuard से R8 पर स्विच करना सरल है: AGP 8.0+ में, R8 डिफ़ॉल्ट रूप से उपयोग किया जाता है। पुराने प्रोजेक्ट के लिए, आपको ProGuard को classpath से हटाना होगा और gradle.properties अपडेट करना होगा: android.enableR8=true। ProGuard नियम अधिकांश मामलों में बिना बदलाव के R8 के साथ संगत हैं। स्विच करने के बाद सभी लक्ष्य उपकरणों पर रिलीज़ बिल्ड का परीक्षण करने की अनुशंसा की जाती है, क्योंकि R8 उस कोड को हटा सकता है जिसे ProGuard रखता था।

अक्सर पूछे जाने वाले प्रश्न

ProGuard सक्षम करने के बाद डिवाइस पर ऐप क्रैश क्यों होता है?

सबसे आम कारण रिफ्लेक्शन, Gson/Moshi सीरियलाइज़ेशन या डायनेमिक DEX फ़ाइल लोडिंग वाली लाइब्रेरी के माध्यम से उपयोग की जाने वाली क्लासेस को हटाना है। समाधान: Class.forName() के माध्यम से बनाई गई, Parcelable लागू करने वाली, JSON के माध्यम से सीरियलाइज़ की गई या @Inject से एनोटेटेड सभी क्लासेस के लिए -keep नियम जोड़ें। स्टैक ट्रेस के डीऑबफ़स्केशन और बिल्ड से हटाई गई क्लास की पहचान के लिए mapping फ़ाइल का उपयोग करें।

ProGuard mapping फ़ाइल को सही तरीके से कैसे पढ़ें?

Mapping फ़ाइल बिल्ड के बाद build/outputs/mapping/release/mapping.txt पर स्थित होती है। प्रारूप: मूल_नाम -> ऑबफ़स्केटेड_नाम -> प्रकार। Android Studio Build > Analyze APK के माध्यम से डीऑबफ़स्केशन का समर्थन करता है: APK अपलोड करें, स्टैक ट्रेस पेस्ट करें और पढ़ने योग्य क्लास नाम प्राप्त करें। CI/CD के लिए, प्रत्येक संस्करण के mapping फ़ाइलों को अलग रिपॉजिटरी या क्लाउड स्टोरेज में स्टोर करें।

क्या डीबग बिल्ड की डीबगिंग करते समय ProGuard को अक्षम करना चाहिए?

हाँ, ProGuard को केवल रिलीज़ बिल्ड के लिए सक्षम किया जाना चाहिए। डीबग बिल्ड minifyEnabled false का उपयोग करते हैं, जो कंपाइलेशन को तेज करता है और डीबगर के लिए पढ़ने योग्य क्लास नाम रखता है। डीबग मोड में, ऑबफ़स्केशन डीबगिंग और चरण-दर-चरण निष्पादन में बाधा डालता है, जबकि सिकुड़न पुनरावृत्तियों को धीमा करती है। ऑबफ़स्केशन सहीता के परीक्षण के लिए, भौतिक डिवाइस पर रिलीज़ बिल्ड का उपयोग करें।

ProGuard चेतावनियों और त्रुटियों के साथ क्या करें?

ProGuard चेतावनियाँ (WARNING) उन समस्याओं को इंगित करती हैं जो बिल्ड को नहीं रोकतीं लेकिन संभावित रनटाइम त्रुटियों की ओर इशारा कर सकती हैं। यदि कोई चेतावनी क्रैश का कारण नहीं बनती है, तो संबंधित लाइब्रेरी के लिए -dontwarn जोड़ें। यदि चेतावनी किसी लापता क्लास से संबंधित है जो एप्लिकेशन में उपयोग नहीं की जाती है, तो भी -dontwarn का उपयोग करें। सभी चेतावनियों को एक साथ बिना विवेक के अनदेखा करना अनुशंसित नहीं है।

ProGuard Android के लिए DexGuard से कैसे अलग है?

ProGuard बुनियादी सुविधाओं वाला एक मुफ्त टूल है: सिकुड़न, ऑप्टिमाइज़ेशन, क्लासेस और मेथड का नाम बदलना। DexGuard उसी Guardsquare का एक व्यावसायिक उत्पाद है जो कंट्रोल फ़्लो ऑबफ़स्केशन, स्ट्रिंग और रिसोर्स एन्क्रिप्शन, एंटी-डीबगिंग सुरक्षा और रिसोर्स ऑबफ़स्केशन जोड़ता है। DexGuard का उपयोग उच्च सुरक्षा आवश्यकताओं वाले बैंकिंग एप्लिकेशन और गेम में किया जाता है।

सारांश

  • ProGuard Android एप्लिकेशन के लिए सिकुड़न, ऑप्टिमाइज़ेशन और ऑबफ़स्केशन का मानक टूल है।
  • सिकुड़न 40% तक अप्रयुक्त बाइटकोड हटाता है, जिससे अंतिम APK आकार में काफी कमी आती है।
  • ऑबफ़स्केशन क्लासेस और मेथड का नाम बदलता है, डीकंपाइलेशन से बचाता है।
  • Keep नियम रिफ्लेक्शन और सीरियलाइज़ेशन के माध्यम से उपयोग की जाने वाली क्लासेस के लिए अनिवार्य हैं।
  • Mapping फ़ाइल रिलीज़ बिल्ड में क्रैश रिपोर्ट के डीऑबफ़स्केशन के लिए आवश्यक है।
  • R8 ने AGP 8.0 में ProGuard को बदल दिया, बेहतर कोड सिकुड़न और तेज़ बिल्ड गति प्रदान करता है।
  • स्टोर में प्रकाशित करने से पहले भौतिक उपकरणों पर ProGuard के साथ रिलीज़ बिल्ड का परीक्षण अनिवार्य है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें