एंड्रॉइड स्टूडियो में ProGuard का उपयोग कैसे करें?


98

यह एंड्रॉइड स्टूडियो में मेरा पहला प्रोजेक्ट है, और मेरे ऐप्स का कोड बाधित नहीं है। इस कॉन्फ़िगरेशन में build.gradle फ़ाइल का उपयोग करके Im: यहां छवि विवरण दर्ज करें

मैं बिल्ड> जेनरेट किए गए APK का उपयोग कर रहा हूं ... रन प्रोगार्ड की जाँच के साथ। और, जब मैंने Apk_OneClick.v4.2 का उपयोग करके परीक्षण किया है, तो मेरा कोड पढ़ना पूरी तरह से आसान है:

यहां छवि विवरण दर्ज करें

कृपया मेरी मदद करें। :(


ओफ़्सेट कोड के लिए टेक्स्ट फ़ाइल में परिभाषित अपने रक्षक नियम दिखाएं।
pyus13

कैसे चेक करें कि ऐप ओब्सेस्ड है या नहीं?
VVB

@ वीवीबी रिवर्स इंगेजिंग एपीके-फाइल से मेरा अनुमान है: D
hotHead

जवाबों:


71

आप शायद वास्तव में साइनिंग विज़ार्ड के माध्यम से एपीके के रिलीज़ बिल्ड पर हस्ताक्षर नहीं कर रहे हैं। आप कमांड के साथ कमांड लाइन से रिलीज़ एपीके बना सकते हैं:

./gradlew assembleRelease

या आप बिल्ड वेरिएंट दृश्य से रिलीज़ संस्करण चुन सकते हैं और इसे GUI से बना सकते हैं:

आईडीई मुख्य विंडो बिल्ड वेरिएंट दिखा रही है


महान! मैंने डिबग को सही रूप से चलाने के लिए बदलते हुए परीक्षण किया है और पूरी तरह से काम करता है। अब मैं आपका जवाब पढ़ता हूं, और काम करता हूं !!!! महान आदमी! धन्यवाद।
फेलिप पोरेज जेवियर

उफ़, मैंने गलती से अपने कमांड-लाइन निर्देशों में "assembleRelease" के बजाय "assembleDebug" डाल दिया। मैंने अपना जवाब तय कर दिया।
स्कॉट बार्टा

कमांड लाइन के माध्यम से निर्यात की जाने वाली .apk फ़ाइल का पथ क्या है?
शजील अफजल

50

आप अपनी बिल्ड.gradle फ़ाइल को प्रूफ़ कार्यान्वयन के लिए कॉन्फ़िगर कर सकते हैं। यह मॉड्यूल स्तर या प्रोजेक्ट स्तर पर हो सकता है।

 buildTypes {

    debug {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

    }

}

दिखाया गया कॉन्फ़िगरेशन डिबग स्तर के लिए है, लेकिन आप बिल्ड बिल्ड के अंदर नीचे दिखाए गए जैसे अपने स्वयं के फ़्लेवर लिख सकते हैं:

    myproductionbuild{
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }

के साथ अपने डिबग minifyEnabled falseऔर उत्पादन और अन्य बिल्ड के रूप में बेहतर है minifyEnabled true

अपने मॉड्यूल या प्रोजेक्ट फ़ोल्डर की जड़ में अपने रक्षक-नियम। Txt फ़ाइल को कॉपी करें

$YOUR_PROJECT_DIR\YoutProject\yourmodule\proguard-rules.txt

आप अपनी फ़ाइल का नाम बदल सकते हैं जैसा आप चाहते हैं। कॉन्फ़िगरेशन के बाद बिल्डटाइप के अनुसार अपने बिल्ड को बनाने के लिए उपलब्ध तीन विकल्पों में से एक का उपयोग करें

  1. दाएं पैनल में कार्य को वर्गीकृत करें और assembleRelease/assemble(#your_defined_buildtype)मॉड्यूल कार्यों के तहत खोजें

  2. वाम पैनल में बिल्ड वेरिएंट पर जाएं और ड्रॉप डाउन से बिल्ड का चयन करें

  3. फ़ाइल एक्सप्लोरर में प्रोजेक्ट डायरेक्टरी में जाएं और cmd / टर्मिनल खोलें और रन करें

लिनक्स ./gradlew assembleRelease or assemble(#your_defined_buildtype)

खिड़कियाँ gradlew assembleRelease or assemble(#your_defined_buildtype)

आप अपने मॉड्यूल / बिल्ड डायरेक्टरी में एपीके पा सकते हैं।

कॉन्फ़िगरेशन के बारे में अधिक जानकारी और फ़ाइलों को सुरक्षित रखने के लिए लिंक पर उपलब्ध है

http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard


जहाँ मैं myproductionbuild का उपयोग करने के लिए कह सकता हूँ?
फेलिप पोरेज जेवियर

हां, आप सही हैं :) आप बाईं ओर के पैनल पर निर्मित वैरिएंट टैब में समान देख सकते हैं।
pyus13


आप में विन्यास लिखा है ProGuard-rule.txt कुछ उदाहरण भर में यहाँ देख proguard.sourceforge.net/index.html#manual/examples.html
pyus13

Im ग्रैड डीएसएल विधि runProguard () नहीं मिला।
SleepNot

41

NB: अब के बजाय

runProguard false

आपको उपयोग करने की आवश्यकता होगी

minifyEnabled false

5
लगता है कि यह सही होना चाहिए
anna_manzhula

1

अपनी 'proguard-rules.txt' फ़ाइल का नाम बदलकर 'proguard-android.txt' करने का प्रयास करें और अपनी gradle फ़ाइल में 'proguard-rules.txt' के संदर्भ को हटा दें। getDefaultProguardFile(...)कॉल किसी भिन्न डिफ़ॉल्ट ProGuard फ़ाइल, एक गूगल द्वारा प्रदान की और कहा कि अपनी परियोजना में नहीं संदर्भ देता है। इसलिए इसे भी हटा दें, ताकि यहां पर फ़ाइल को पढ़ा जा सके:

buildTypes {
    release {
        runProguard true
        proguardFile 'proguard-android.txt'
    }
}

मेरे लिए काम मत करो। मैंने अपना कस्टम proguard-android.txt एक ही डाइरेक्टरी में proguard-rules.txt द्वारा डाला, लेकिन मेरे कोड में कुछ भी नहीं बदला है।
फेलिप पोरेज जेवियर

0

यहां अन्य उत्तर प्रागार्ड का उपयोग करने के लिए महान संदर्भ हैं। हालाँकि, मैंने इस मुद्दे पर चर्चा नहीं की है कि मैं एक दिमाग शराबी था। आपके द्वारा हस्ताक्षरित रिलीज़ .apk उत्पन्न करने के बाद, इसे /releaseआपके ऐप में फ़ोल्डर में डाल दिया जाता है, लेकिन मेरे ऐप में एक एपीकेटी थी जो /releaseफ़ोल्डर में नहीं थी । इसलिए, मैंने गलत एपीके को अपघटित करते हुए घंटों बिताए, सोच रहा था कि मेरे प्रागार्ड परिवर्तन का कोई प्रभाव क्यों नहीं पड़ रहा था। आशा है कि यह किसी की मदद करता है!


0

यहाँ सबसे आम Proguard नियम से कुछ है कि आप में जोड़ने की जरूरत है proguard-rules.pro एंड्रॉयड Sutdio में फ़ाइल।

मक्खन काटने की छुरी

 -keep class butterknife.** { *; }
 -dontwarn butterknife.internal.**
 -keep class **$$ViewBinder { *; }
 -keepclasseswithmembernames class * {
        @butterknife.* <fields>;
  }
 -keepclasseswithmembernames class * {
        @butterknife.* <methods>;
  }

पुराना वापस

 -dontwarn retrofit.**
 -keep class retrofit.** { *; }
 -keepattributes Signature
 -keepattributes Exceptions

OkHttp3

 -keepattributes Signature
 -keepattributes *Annotation*
 -keep class okhttp3.** { *; }
 -keep interface okhttp3.** { *; }
 -dontwarn okhttp3.** 
 -keep class sun.misc.Unsafe { *; }
 -dontwarn java.nio.file.*
 -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 

Gson

 -keep class sun.misc.Unsafe { *; }
 -keep class com.google.gson.stream.** { *; }

कोड ओफ़्फ़सकुलेशन

-keepclassmembers class com.yourname.models** { <fields>; }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.