2012-05-08 6 views
6

मैं कक्षा नामों को खराब करने के लिए प्रगार्ड करना चाहता हूं। मेरे पास Proguard.cfgकक्षा नामों को खराब करने के लिए प्रोगुआर्ड को कैसे बताना है

और मुझे पता है कि obfuscated क्या नहीं है वर्ग नाम है। तो jdgui मैं देख कॉम/परीक्षण/ABCD/ActualClass.java सार्वजनिक वर्ग ActualClassName फैली चल गतिविधि आदि

इसके अलावा मैं तरीकों असली classnames लौटने देखते हैं। जैसे

ActualClassname aa(); 

और आयात बयान की तरह

import com.abcd.ActualClassName 

मैं कैसे Proguard classname ही अंधेरा करना मिलता है। यह केवल उन क्रियाकलापों के लिए नहीं है जिन्हें मैं देखता हूं कि मेरे एडाप्टर को बर्बाद नहीं किया जा रहा है। वैसे वहाँ obfuscation चल रहा है लेकिन कक्षा के नाम नहीं है।

क्या नियम ऊपर दिए गए नियमों को कक्षा के नामों को रोकने से रोकता है?

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

1) स्टेटिक विधियां 2) अन्य प्रकारों का आयात जो गतिविधि या क्रमिक से प्राप्त होने वाले लोगों की तरह रखे जाते हैं। 3) उनके पास अन्य वर्गों के पैरामीटर के साथ विधियां हैं (जिनमें से कुछ को रखने की आवश्यकता हो सकती है)।

हालांकि वहां कोई ऐसा स्थान नहीं है जहां मैं विशेष रूप से अनुरोध कर रहा हूं कि इन उपयोगिता वर्गों को रखा जाना चाहिए।

+0

मैं एक ही मुद्दा में चल रहा हूँ। क्या आपको इस समस्या का समाधान मिला? – lnreddy

उत्तर

1

मुझे लगता है कि आपकी समस्या आपकी पहली पंक्ति से आ रही है: '-keepclasseswithmembers' में वर्ग का नाम शामिल है, इसलिए आपके मामले में स्थिर क्षेत्र वाला कोई भी वर्ग अपना नाम रखेगा। इसे '-keepclassmembers' में बदलना स्थिर फ़ील्ड को बरकरार रखते हुए कक्षा के नामों को खराब कर देगा (जो मुझे लगता है कि आप करना चाहते हैं)।

उसने कहा, मुझे यकीन नहीं है कि आप ऐसा क्यों करना चाहते हैं, हालांकि। यदि आप स्थैतिक चर नामों को संरक्षित करने का प्रयास कर रहे हैं, तो क्या आप क्लास नामों को भी संरक्षित नहीं करना चाहते हैं, यह देखते हुए कि आप स्थिर फ़ील्ड तक कैसे पहुंचेंगे? आप अपने सभी स्थैतिक चर नामों को संरक्षित करने का प्रयास क्यों कर रहे हैं?

+0

मैंने उस पंक्ति को हटा दिया है। अब मैं एक उपयोगिता वर्ग को रखा जा रहा हूं जो किसी भी चीज़ से नहीं बढ़ाया जाता है। यह केवल उन वर्गों द्वारा उपयोग किया जा रहा है जिन्हें रखा और आयात किया जाता है आदि –

+1

हम्म, क्या आप अपनी पूर्ण .cfg फ़ाइल डाल सकते हैं? – alexc

3

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

ठेठ Proguard config Android SDK में Proguard config जो इस तरह कई महत्वपूर्ण लाइनों शामिल होंगे का उल्लेख होगा:

-keep public class * extends android.app.Activity 
+0

वैसे मैं देख रहा हूं कि सभी वर्ग के नाम रखे जा रहे हैं। मैंने तब से -keepclasseswithmembers हटा दिया है, लेकिन फिर भी वही परिणाम? –

+0

उदाहरण के लिए मेरे पास उपयोगिता वर्ग है और इसे रखा जा रहा है। तो शायद आपके एंड्रॉइड प्रोजेक्ट में अन्य कक्षाओं को संदर्भित करने वाले वर्ग नामों को रखने के लिए कुछ अंतर्निहित नियम हैं या अन्य कक्षाओं –

+0

(केवल पहले सिद्धांतों की जांच कर रहे हैं) द्वारा संदर्भित हैं, क्या आपने 'project.properties 'में' proguard.config' की परिभाषा को अस्वीकार कर दिया है। , और मूल्य क्या है? –

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

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