2012-06-10 9 views
18

हैलो मैं एक एंड्रॉइड ऐप लिख रहा हूं और मैंने अपने आवेदन को खराब करने के लिए प्रोगगार्ड स्थापित किया है। हालांकि मैं अपने आवेदन में विभिन्न एक्सटेंशन को गतिशील रूप से लोड करने के लिए क्लासलोडर का उपयोग करता हूं। समस्या यह है कि अगर उनके नाम बदल दिए जाते हैं तो ये सही ढंग से लोड नहीं होते हैं। मैं प्रूगार्ड को विशिष्ट वर्ग के नामों को खराब करने से कैसे रोकूं?प्रोगुर्ड कक्षा के नाम रखता है?

उत्तर

27

उपयोग आपकी proguard.cfg में -keepnames विकल्प

मैनुअल https://www.guardsquare.com/en/proguard/manual/usage#keepoptions को देखें:

-keepnames class_specification

लघु -keep,allowshrinking के लिए class_specification

निर्दिष्ट करता वर्गों और वर्ग के सदस्यों जिसका नाम संरक्षित किए जाने चाहिए, अगर वे हैं संकुचित चरण में हटा नहीं है। उदाहरण के लिए, आप उन वर्गों के सभी वर्ग नामों को रखना चाह सकते हैं जो सीरियलज़ेबल इंटरफ़ेस को कार्यान्वित करते हैं, ताकि संसाधित कोड मूल रूप से क्रमबद्ध कक्षाओं के साथ संगत रहे। जिन वर्गों का उपयोग नहीं किया जाता है, उन्हें अभी भी हटाया जा सकता है। Obfuscating जब केवल लागू होते हैं।

+3

तो क्या मैं टाइप करता हूं: -keepnames com.randompackage.lol.ClassName – Nik

+0

ठीक है पूरे पैकेज के साथ ऐसा करने का कोई तरीका है? – Nik

+0

हां, आप * वाइल्डकार्ड का उपयोग करते हैं। यानी, -keepnames com.randompackage.lol। * सभी वर्गों को lol –

24

यह classnames वैसे ही रखता है:

-keepnames class com.somepackage.* 
9
हर किसी के लिए

हैंडी टिप जो ProGuard बदलने के लिए किसी भी वर्ग के नाम नहीं चाहता है:

# please KEEP ALL THE NAMES 
-keepnames class ** { *; } 

इस तरह आप पठनीय स्टैक ट्रेस मिल जाएगा जबकि अभी भी चीजें फेंकने की जरूरत नहीं है। :-)

+9

'' '-dontobfuscate'' 'obfuscation को अक्षम करने का सही तरीका है। –

+0

गलत तरीका। इस कॉन्फ़िगरेशन के साथ obfuscation को बंद करना बेहतर है: "-dontobfuscate/n -optimizations! कोड/आवंटन/परिवर्तनीय" – oxied

संबंधित मुद्दे