2012-05-11 16 views
8

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

मैं दीवार के खिलाफ अपने सिर को टक्कर लगी हूं और ऐसा करने की कोशिश कर रहा है। मैं निष्पादित होने पर ऐप में फेंकने वाले NoSuchMethodExceptions को देख रहा हूं, भले ही मैंने सोचा कि मैंने प्रोगार्ड के घटते विकल्पों को बंद कर दिया है।

प्रोजेवार्ड जस्ट obfuscate करने के लिए जादू सेटिंग्स क्या हैं, और किसी भी कोड को अनुकूलित नहीं है?

अद्यतन। मैंने परीक्षण और त्रुटि के माध्यम से पुष्टि की है कि यह obfuscation प्रक्रिया है (ऑप्टिमाइज़ेशन या सिकुड़ना नहीं) जो NoSuchMethodExceptions का कारण बन रहा है।

Proguard.cfg

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 
-dontshrink 
-keep public class * extends Object 
-keep class com.myapp.** { *; } 
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class com.myapp.activity.Splash 
-keep public class com.myapp.alarm.AlarmsViewer 
-keep public class com.myapp.activity.About 
-keep public class com.myapp.activity.Base 
-keep public class com.myapp.activity.BaseWithMenu 
-keep public class com.myapp.alarm.Alarm 
-keep public class com.myapp.alarm.AlarmFragment 
-keep public class com.myapp.alarm.AlarmPagerAdapter 
-keep public class com.myapp.alarm.AlarmStore 
-keep public class com.myapp.app.App 
-keep public class com.myapp.preferences.Preferences 
-keep public class com.myapp.preferences.PreferencesStore 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 
-keep class com.actionbarsherlock.** { *; } 
-keep interface com.actionbarsherlock.** { *; } 

-keepattributes *Annotation* 

-keep public interface com.android.vending.licensing.ILicensingService 

-dontwarn android.support.** 
+0

साथ रखा जाना करने के लिए आवश्यक में संदर्भित है आप कैसे अनुकूलन के बिना अंधेरा करना नहीं जानते, तो है, तुम कैसे पता कर सकते हैं कि अनुकूलन कदम समस्या है? – for3st

उत्तर

6

मैं वापस इसी तरह की समस्याओं थोड़ी देर के लिए किया था और जानवर बल और भाग्य से मेरे लिए यह हल किया। मेरे proguard.cfg समान है, लेकिन मैं लाइनों है:

-dontshrink 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

मैं जहां से मैं इन अनुकूलन विकल्प के लिए विचार आया याद नहीं कर सकते, लेकिन वे मेरे लिए काम करने लगते हैं।

वहाँ हमेशा पकड़ सभी स्विच

-dontoptimize 

है (इनपुट वर्ग फ़ाइलों अनुकूलन करने के लिए नहीं निर्दिष्ट करता है कि डिफ़ॉल्ट रूप से, अनुकूलन सक्षम है;।। सभी तरीकों एक बाईटकोड स्तर पर अनुकूलित कर रहे हैं)

जो अधिक उपयुक्त हो सकता है।

अंत में मैं तरीकों जो केवल एक्सएमएल फ़ाइलें (संचालकों क्लिक करें) जो स्पष्ट

-keepclassmembers class * extends android.app.Activity { 
    public void myClickHandler(android.view.View); 
} 
+4

मुझे कोई एक्सएमएल क्लिक हैंडलर नहीं मिला है, और यहां तक ​​कि डोंटॉप्टीमाइज़ और -डॉट्र्रिंक के साथ भी यह निर्दिष्ट है कि यह अभी भी NoSuchMethodException के साथ उड़ा है। चौंकाने। ओवर-इंजीनियर जंक प्रोगार्ड का ढेर क्या है। –

+0

क्षमा करें कि आपके लिए काम नहीं करता है। मुझे आपके साथ सहमत होना चाहिए - मैनुअल का पालन करना बहुत मुश्किल है। वास्तव में एक -justobfuscate स्विच होना चाहिए। दुर्भाग्य से हमें obfuscation की जरूरत है क्योंकि apks अलग करने के लिए इतना आसान है। – NickT

+1

वाह। ProGuard मैनुअल> परिचय> प्रविष्टि अंक ... ProGuard मैन्युअल> समस्या निवारण> रन-टाइम पर समस्याएं> NoSuchMethodException। ProGuard मैन्युअल पढ़ने पर –

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