खोज…


व्यापक रूप से उपयोग किए जाने वाले कुछ पुस्तकालयों के लिए नियम

वर्तमान में इसमें निम्नलिखित पुस्तकालयों के नियम हैं: -

  1. मक्खन काटने की छुरी
  2. RxJava
  3. Android समर्थन लाइब्रेरी
  4. Android डिज़ाइन समर्थन लाइब्रेरी
  5. पुराना वापस
  6. Gson और जैक्सन
  7. ओटो
  8. Crashlitycs
  9. पिकासो
  10. फ़ायर
  11. OkHttp3
  12. Parcelable
#Butterknife
-keep class butterknife.** { *; }
-keepnames class * { @butterknife.Bind *;}

-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

# rxjava
-keep class rx.schedulers.Schedulers {
    public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
    public <methods>;
}
-keep class rx.schedulers.TestScheduler {
    public <methods>;
}
-keep class rx.schedulers.Schedulers {
    public static ** test();
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    long producerNode;
    long consumerNode;
}

# Support library
-dontwarn android.support.**
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }

# retrofit
-dontwarn okio.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**

-dontwarn rx.**
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

-keep class sun.misc.Unsafe { *; }
#your package path where your gson models are stored
-keep class com.abc.model.** { *; }

# Keep these for GSON and Jackson
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.** { *; }
  
#keep otto
-keepattributes *Annotation*
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}

# Crashlitycs 2.+
-keep class com.crashlytics.** { *; }
-keep class com.crashlytics.android.**
-keepattributes SourceFile, LineNumberTable, *Annotation*
# If you are using custom exceptions, add this line so that custom exception types are skipped during obfuscation:
-keep public class * extends java.lang.Exception
# For Fabric to properly de-obfuscate your crash reports, you need to remove this line from your ProGuard config:
# -printmapping mapping.txt

# Picasso
-dontwarn com.squareup.okhttp.** 

# Volley
-keep class com.android.volley.toolbox.ImageLoader { *; }

# OkHttp3
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

# Needed for Parcelable/SafeParcelable Creators to not get stripped
-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

अपने निर्माण के लिए ProGuard सक्षम करें

अपने एप्लिकेशन के लिए ProGuard कॉन्फ़िगरेशन को सक्षम करने के लिए आपको इसे अपने मॉड्यूल स्तर के ग्रेड फ़ाइल में सक्षम करना होगा। आपको minifyEnabled true का मान सेट करने की minifyEnabled true

तुम भी सक्षम कर सकते हैं shrinkResources true जो कि संसाधनों निकाल देंगे ProGuard अप्रयुक्त के रूप में flaggs।

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

उपरोक्त कोड आपके जारी किए गए apk के लिए proguard-rules.pro ("ग्रहण में" proguard-project.txt ") में निहित आपके ProGuard कॉन्फ़िगरेशन को लागू करेगा।

आपको बाद में उस रेखा को निर्धारित करने में सक्षम करने के लिए जिस पर एक स्टैक ट्रेस में एक अपवाद उत्पन्न हुआ है, "proguard-rules.pro" में निम्न पंक्तियाँ होनी चाहिए:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

ग्रहण में प्रोगार्ड को सक्षम करने के लिए "प्रोजेक्ट.प्रोपरेटी" में proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt जोड़ें।

बिल्ड टाइम पर ट्रेस लॉगिंग (और अन्य) स्टेटमेंट निकालें

यदि आप कुछ तरीकों से कॉल हटाना चाहते हैं, तो मान लें कि वे शून्य हैं और उनका कोई पक्ष प्रभावित नहीं है (जैसा कि, उन्हें कॉल करने से कोई सिस्टम मान, संदर्भ तर्क, स्टेटिक्स इत्यादि नहीं बदलता है) तो आप प्रोगार्ड को उनसे हटा सकते हैं। बिल्ड पूर्ण होने के बाद आउटपुट।

उदाहरण के लिए, मैं डिबगिंग में उपयोगी डिबग / वर्बोज़ लॉगिंग स्टेटमेंट को हटाने के लिए इसे उपयोगी मानता हूं, लेकिन उनके लिए तार उत्पन्न करना उत्पादन में अनावश्यक है।

# Remove the debug and verbose level Logging statements.
# That means the code to generate the arguments to these methods will also not be called.
# ONLY WORKS IF -dontoptimize IS _NOT_ USED in any ProGuard configs
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}

नोट: यदि किसी भी ProGuard कॉन्फ़िगरेशन में -dontoptimize का उपयोग किया जाता है ताकि वह अप्रयुक्त कोड को छोटा / हटा न सके, तो यह कथनों को समाप्त नहीं करेगा। (लेकिन कौन अप्रयुक्त कोड को हटाना नहीं चाहेगा, सही?)

नोट 2: यह कॉल लॉग करने के लिए कॉल को हटा देगा, लेकिन आपको कोड की सुरक्षा नहीं करेगा। स्ट्रिंग्स वास्तव में उत्पन्न apk में रहेंगे। इस पोस्ट में और पढ़ें

अपने कोड को हैकर्स से सुरक्षित रखना

यदि कोड को कभी हैकर्स द्वारा डी-संकलित किया जाता है, तो यह समझने के लिए कि आपके कोड को कठिन बनाकर, कोड संरक्षण के लिए ऑब्सफैक्शन को अक्सर एक जादू समाधान माना जाता है।

लेकिन अगर आप सोच रहे हैं कि वास्तव में हैकर्स को जरूरत के Log.x(..) से Log.x(..) को हटाना, तो आपको आश्चर्य होगा।

के साथ अपने सभी लॉग कॉल को हटाना:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    ...etc
}

वास्तव में लॉग कॉल को स्वयं हटा देगा, लेकिन आमतौर पर उन स्ट्रिंग्स को नहीं जो आप उनमें डालते हैं।

यदि आपके लॉग कॉल के अंदर उदाहरण के लिए आप एक सामान्य लॉग संदेश टाइप करते हैं जैसे: Log.d(MyTag,"Score="+score); , कंपाइलर लॉग कॉल के बाहर + को एक 'नई स्ट्रिंगबर्ल ()' में कनवर्ट करता है। ProGuard इस नई वस्तु को नहीं बदलता है।

आपके डी-संकलित कोड में "Score=" लिए अभी भी एक हैंगिंग StringBuilder होगा, score चर के लिए ओफ़्स्कुलेटेड संस्करण के साथ जोड़ा गया (मान लीजिए कि इसे b में परिवर्तित किया गया था)।
अब हैकर को पता है कि b क्या है, और अपने कोड को समझें।

आपके कोड से वास्तव में इन अवशेषों को हटाने के लिए एक अच्छा अभ्यास उन्हें या तो पहले स्थान पर नहीं रखा गया है (उन्हें हटाने के लिए प्रोगार्ड नियमों के साथ स्ट्रिंग स्ट्रिंगर का उपयोग करें), या अपने Log कॉल के साथ लपेटें:

    if (BuildConfig.DEBUG) {
        Log.d(TAG,".."+var);
    }

सुझाव:

यह परीक्षण करें कि आपके ओफ़्फ़ुसेटेड कोड को कितनी अच्छी तरह से संरक्षित किया गया है, इसे स्वयं संकलित करें!

  1. dex2jar - apk को जार में कनवर्ट करता है
  2. jd - जार को विघटित करता है और इसे एक gui editor में खोलता है

एक कस्टम obfuscation कॉन्फ़िगरेशन फ़ाइल के साथ ProGuard को सक्षम करना

ProGuard डेवलपर को अपने कोड को बाधित करने, सिकोड़ने और अनुकूलित करने की अनुमति देता है।

# 1 प्रक्रिया का पहला चरण है, बिल्ड पर प्रोगार्ड को सक्षम करना

यह आपके इच्छित निर्माण पर 'minifyEnabled' कमांड को सही करने के लिए सेट करके किया जा सकता है

# 2 दूसरा चरण यह निर्दिष्ट करना है कि दी गई बिल्ड के लिए हम कौन सी प्रॉपर फ़ाइलों का उपयोग कर रहे हैं

यह उचित filenames के साथ 'proguardFiles' लाइन की स्थापना के द्वारा किया जा सकता है

buildTypes {
    debug {
        minifyEnabled false
    }
    testRelease {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-tests.pro'
    }
    productionRelease {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-tests.pro', 'proguard-rules-release.pro'
    }
}

# 3 डेवलपर अपनी इच्छा के अनुसार अपनी प्रूफ़ फ़ाइल को संपादित कर सकता है।

फ़ाइल को संपादित करके (उदाहरण के लिए 'proguard-rules-tests.pro') और वांछित बाधाओं को जोड़कर किया जा सकता है। निम्न फ़ाइल एक उदाहरण के लिए फ़ाइल रक्षक के रूप में कार्य करती है

// default & basic optimization configurations
-optimizationpasses 5
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-verbose

-dump obfuscation/class_files.txt
-printseeds obfuscation/seeds.txt
-printusage obfuscation/unused.txt // unused classes that are stripped out in the process
-printmapping obfuscation/mapping.txt // mapping file that shows the obfuscated names of the classes after proguad is applied

// the developer can specify keywords for the obfuscation (I myself use fruits for obfuscation names once in a while :-) )
-obfuscationdictionary obfuscation/keywords.txt
-classobfuscationdictionary obfuscation/keywords.txt
-packageobfuscationdictionary obfuscation/keywords.txt

अंत में, जब भी डेवलपर अपनी नई .APK फ़ाइल चलाता है और / या उत्पन्न करता है, तो कस्टम प्रॉपगार्ड कॉन्फ़िगरेशन इस प्रकार आवश्यकताओं को पूरा करता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow