android प्रोगार्ड लाइब्रेरी की कॉन्फ़िगरेशन फ़ाइल को अनदेखा करता है




android-studio module (3)

आपको आमतौर पर लाइब्रेरी प्रोजेक्ट में ProGuard को सक्षम नहीं करना चाहिए। ProGuard एप्लिकेशन प्रोजेक्ट में एप्लिकेशन और लाइब्रेरी को एक साथ संसाधित करता है, जो सबसे प्रभावी तरीका है।

लाइब्रेरी प्रोजेक्ट में, आप build.gradle में किसी लाइब्रेरी-विशिष्ट ProGuard कॉन्फ़िगरेशन को निर्दिष्ट कर सकते हैं, उदाहरण के लिए:

defaultConfig {
    consumerProguardFiles 'proguard-rules.txt'
}

यह फ़ाइल लाइब्रेरी एआर में proguard.txt रूप में पैक की जाती है और स्वचालित रूप से एप्लिकेशन प्रोजेक्ट में लागू होती है।

यदि आप लाइब्रेरी प्रोजेक्ट में ProGuard को सक्षम करते हैं (शायद क्योंकि आप लाइब्रेरी को वितरित करना चाहते हैं), तो आपको लाइब्रेरी को संसाधित करने के लिए उचित कॉन्फ़िगरेशन भी जोड़ना होगा। एंड्रॉइड ग्रैडल बिल्ड स्वचालित रूप से ऐसा प्रतीत नहीं होता है। आप ऐसा कर सकते हैं:

  1. अपनी लाइब्रेरी प्रोजेक्ट में proguard-project.txt को android-sdk/tools/proguard/examples/library.pro लाइब्रेरी. proguard-project.txt कॉपी करें।
  2. फ़ाइल से नमूना इनपुट / आउटपुट लाइनों -injars , -outjars , -printmapping , -printmapping को -printmapping । ग्रैडल बिल्ड प्रक्रिया स्वचालित रूप से इन विकल्पों को प्रदान करती है।
  3. लाइब्रेरी प्रोजेक्ट के build.gradle से कॉन्फ़िगरेशन का संदर्भ लें।

लाइब्रेरी प्रोजेक्ट के लिए स्वतंत्र रूप से ProGuard को सक्षम / अक्षम करना और एप्लिकेशन प्रोजेक्ट के लिए मेरे लिए ठीक काम करता है।

मुझे दिनों के लिए वास्तव में एक अजीब समस्या का सामना करना पड़ रहा है ...

मेरे पास दो मॉड्यूल, एक मुख्य मॉड्यूल और एक लाइब्रेरी मॉड्यूल के साथ एक ग्रैडल ऐप है।

  • दोनों मॉड्यूल में मैंने एक proguard-rules.pro फ़ाइल पथ घोषित किया है जो सही है
  • दोनों .gradle फ़ाइलों में मैंने minifyEnabled सत्य किया है

यहां पहली समस्या है: यहां तक ​​कि यदि minifyEnabled लाइब्रेरी में गलत है, तो यह obfuscated हो जाता है। इसका कोई प्रभाव नहीं पड़ता है और मुख्य मॉड्यूल की सेटिंग्स पर निर्भर करता है। मैं थोड़ी देर से प्रोगुआर्ड का उपयोग कर रहा हूं और मैंने कभी ऐसा व्यवहार नहीं किया है।

इसके अलावा, पुस्तकालय के proguard-rules.pro पूरी तरह से अनदेखा लगता है। इससे कोई फर्क नहीं पड़ता कि मैं वहां क्या घोषित करता हूं, इसका उपयोग नहीं किया जाता है और नतीजा हमेशा एक जैसा होता है (परिणाम देखने के लिए हमेशा संकुचित)। यह डिफ़ॉल्ट सेटिंग्स के साथ obfuscated है।

मैंने यह देखने के लिए एक अवैध प्रोजेवार्ड फ़ाइल नाम का उपयोग किया है कि फ़ाइल को भी स्पर्श किया गया है, और वास्तव में गलत नाम के साथ त्रुटियां हैं और यह प्रोजेवार्ड फ़ाइल में सिंटैक्स त्रुटियों के बारे में शिकायत भी करती है ...

मुझे नहीं पता कि यह किसी भी तरह से एंड्रॉइड स्टूडियो के अपडेट से संबंधित है, क्योंकि उसने मुझे "runProguard" के बजाय "minifyEnabled" का उपयोग करने की भी सिफारिश की है।

मैं लाइब्रेरी के प्रोगार्ड- नियमों का उपयोग करने के लिए प्रोगार्ड का प्रबंधन कैसे कर सकता हूं?

संपादित करें:

मैंने अपनी समस्या को स्पष्ट करने के लिए एक नमूना परियोजना बनाई है

मेरी लाइब्रेरी की प्रगति कॉन्फ़िगरेशन

मेरी पुस्तकालय का ढेर:

और अंततः परिणाम मैं हमेशा मिलता है। इससे कोई फर्क नहीं पड़ता कि मैं प्रोजेवार्ड कॉन्फ़िगरेशन में क्या शामिल / शामिल करता हूं

जैसा कि आप देख सकते हैं, प्रोजेगार्ड नियम मुख्य मॉड्यूल पर काफी अच्छी तरह से काम करते हैं। यह करता है कि यह क्या करना चाहिए। लेकिन यह हमेशा मेरी लाइब्रेरी को aa को पूरी तरह से obfuscates ...

इसने पुस्तकालय की गतिविधि को पूरी तरह से हटा दिया है, जो बिल्कुल नहीं होना चाहिए


मेरे लिए काम करने वाली एकमात्र चीज मेरी लाइब्रेरी में दोनों विकल्पों को परिभाषित करना है:

release {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
consumerProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

आश्चर्यजनक रूप से, एरिक का जवाब वास्तव में मेरे लिए भी काम कर रहा है!

बेशक एरिक जानता है कि वह किस बारे में बात कर रहा है, लेकिन मैंने इसे [चालू और बंद] स्वचालित रूप से एक साल से अधिक समय तक धीरे-धीरे करने के लिए एक साफ तरीका खोजने का प्रयास किया है, जब तक कि मुझे आज इस पोस्ट को नहीं मिला।

मैंने कुछ अन्य एसओ धागे को जोड़ा और यह काम किया जो / यह समाधान काम करता है, जो भी सरल हो सकता है। चरण 1-4 वैकल्पिक हैं, लेकिन अब तक यह चोट लगती नहीं है।

  1. Http://sourceforge.net/projects/proguard/files/proguard/5.2/ से प्रोगार्ड 5.2 डाउनलोड करें
  2. अनजिप करें ... /android-sdk/tools/proguard5.2
  3. नाम बदलें ... /android-sdk/tools/proguard /android-sdk/tools/proguard4.7 ... /android-sdk/tools/proguard4.7
  4. ln -s .../android-sdk/tools/proguard5.2 .../android-sdk/tools/proguard
  5. लाइब्रेरी प्रोजेक्ट फ़ोल्डर में android-sdk/tools/proguard/examples/library.pro लाइब्रेरी. proguard-library.pro कॉपी करें और proguard-library.pro नाम बदलें
  6. -injars संपादित करें और -injars , -outjars , -outjars , और -printmapping लाइनों पर टिप्पणी करें।
  7. पुस्तकालय की build.gradle फ़ाइल को शामिल करने के लिए संपादित करें:

    defaultConfig {
      minifyEnabled true
      shrinkResources true
      proguardFiles 'proguard-library.pro'
      consumerProguardFiles 'proguard-library-consumer.pro'
    }
    

    रिलीज और डीबग बिल्ड के लिए आप अलग-अलग व्यवहार करने के लिए इसे ट्वीक कर सकते हैं।

  8. proguard-library-consumer.pro

    # include in this file any rules you want applied to a
    # consumer of this library when it proguards itself.
    
    -dontwarn junit.**
    -dontwarn org.junit.**
    
    # Make crash call-stacks debuggable.
    -keepnames class ** { *; }
    -keepattributes SourceFile,LineNumberTable
    






android-library