2011-10-24 13 views
18

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

-keep public class com.me.dontobf.* 
-keepnames public class com.me.dontobf.* 

उत्तर

48

देशी तरीकों के लिए: ProGuard manual > Examples > Processing native methods

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

इस मामले में, कॉलबैक तरीकों के लिए: ProGuard manual > Examples > Processing callback methods

-keep class mypackage.MyCallbackClass { 
    void myCallbackMethod(java.lang.String); 
} 

या उदाहरण के लिए, सभी सार्वजनिक तरीकों कॉलबैक तरीकों हो सकता है अगर:

-keep class mypackage.MyCallbackClass { 
    public <methods>; 
} 

आप शायद यह भी किसी भी कार्यक्रम कक्षाएं कि विधि वर्णनकर्ता में होते हैं रखने की जरूरत है।

+0

यह काम करता है। धन्यवाद। – ab11

+0

इससे मुझे बहुत मदद मिलती है। धन्यवाद! –

+0

मैं उपयोगकर्ता परिभाषित कोड कैसे संरक्षित कर सकता हूं? –

2

प्रयास करें:

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

ProGuard मैनुअल से: http://proguard.sourceforge.net/manual/examples.html#native

+2

आपका सुझाव मेरे लिए काम नहीं करता है। मुझे देशी कोड से बुलाए जाने वाले गैर-मूल तरीकों के विधि नामों को संरक्षित करने की आवश्यकता है। आपका सुझाव उन वर्गों के वर्ग नाम रखता है जिनमें मूल विधियां होती हैं। – ab11

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