2012-09-12 17 views
23

मैं एक obfuscated एंड्रॉइड एप्लिकेशन बनाना चाहता हूँ। मैं इसके लिए ProGuard का उपयोग करें। मैं स्वचालित रूप से सभी लॉग। * संदेशों को हटाना चाहता हूं। मैं उसे कैसे कर सकता हूँ? मुझे this पोस्ट मिला लेकिन मैं अभी भी उन्हें प्राप्त करता हूं। (मैं obfuscation की जांच करने के लिए एक decompiler का उपयोग करें)।
एंड्रॉइड प्रोगार्ड सभी लॉग संदेशों को हटा नहीं रहा

-injars  libs/In.jar 
-outjars  libs/Out.jar 
#-libraryjars <java.home>/lib/rt.jar 
-libraryjars C:/Users/thomas/android-sdks/platforms/android-7/android.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-renamesourcefileattribute SourceFile 
-keepattributes Exceptions,InnerClasses,Signature,Deprecated, 
       SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 

-keep public class * { 
    public protected *; 
} 

-keepclassmembernames class * { 
    java.lang.Class class$(java.lang.String); 
    java.lang.Class class$(java.lang.String, boolean); 
} 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keepclassmembers class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 
-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** e(...); 
} 

किसी भी मदद की सराहना की जाएगी:
ProGuard-project.txt निम्नलिखित है।
धन्यवाद।

उत्तर

38

यह केवल सभी डिबग Log.d(TAG, "..."); और त्रुटि Log.e(TAG, "...") कॉल निकालने:

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

सभी लॉग कॉल निकालने के लिए, बस इस का उपयोग करें:

-assumenosideeffects class android.util.Log { *; } 
+0

हाय @EricLafortune आप अपनी टिप्पणी की व्याख्या कर सकते हैं? –

+1

@EricLafortune 'प्रतीक्षा' विधि ** android.util.Log ** ?? –

18

डिफ़ॉल्ट एंड्रॉयड Proguard विन्यास अनुकूलन अक्षम करता है। इसे सक्षम करने के लिए, अपनी प्रोजेक्ट की प्रोजेक्ट.प्रोपर्टीज फ़ाइल में proguard-android.txt

12

किसी भी ऐसे व्यक्ति के लिए जो प्रो-गार्ड के चारों ओर अपने सिर को लपेटने के लिए प्रतीत नहीं होता है, आपको बनाना होगा यकीन है कि आप दो चीजें करते हैं।

1: @yorkw

-assumenosideeffects class android.util.Log { *; } 

2 से:

proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt 
बजाय

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 

: @Gallal

अपने प्रोजेक्ट की project.properties फ़ाइल उपयोग में से ऐसा इसलिए है क्योंकि आप एच

proguard-android.txt 
proguard-android-optimize.txt 

आशा है कि रेखा के नीचे किसी और में मदद करता है: "बॉक्स से बाहर" एवेन्यू दो ProGuard विकल्पों वे एसडीके

android-adk > tools > proguard

कौन से दो फ़ाइलें हैं में शामिल किए गए हैं के बाद से।

+0

'project.properties' फ़ाइल है कि (अब) 'local.properties' कहा जाता है? –

+2

मुझे यकीन है कि अगर आप एंड्रॉइड स्टूडियो का उपयोग करते हैं तो सब कुछ अलग है। ऐसा मत सोचो कि इसे प्रोग्रार्ड भी कहा जाता है। इसे "minify" कहा जाता है जो प्रोजेगार्ड चलाने की अनुमति देता है। ने कहा कि। ये निर्देश केवल ईसाई के लिए हैं। –

+0

किसी कारण से मैं अभी भी अपनी कक्षा में ** लॉग ** कॉल देखता हूं। –

7

यदि आपके पास एंड्रॉइड स्टूडियो है, तो आपको अपने मुख्य एप्लिकेशन के build.gradle को संशोधित करना होगा।

अपनी gradle फ़ाइल में, आपको डिफ़ॉल्ट फ़ाइल के रूप में proguard-android-optimize.txt का उपयोग निर्दिष्ट करना होगा।

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

     // With the file below, it does not work! 
     //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 

वास्तव में, डिफ़ॉल्ट proguard-android.txt फ़ाइल में, अनुकूलन दो झंडे के साथ अक्षम है:

-dontoptimize 
-dontpreverify 

proguard-android-optimize.txt फ़ाइल, उन पंक्तियों नहीं जोड़ता है तो अब assumenosideeffects काम कर सकते हैं।

फिर, जैसा कि ग्रहण के लिए अन्य उत्तर में कहा वरना, तो आप सिर्फ अपने मुख्य ProGuard फाइल करने के लिए लाइन जोड़ने के लिए:

-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** e(...); 
} 
संबंधित मुद्दे