2013-03-22 8 views
15

मैं अपने एंड्रॉइड ऐप (रिलीज बिल्ड के लिए) से android.util.Log पर केवल कॉल को हटाने के लिए प्रोजेगार्ड को कॉन्फ़िगर करने का प्रयास कर रहा हूं। मैं विशेष रूप से कोड के किसी भी obfuscation या minification करने के लिए प्रोजेगा नहीं चाहता।केवल एंड्रॉइड लॉगिंग कॉल को हटाने के लिए प्रोग्रार्ड को कॉन्फ़िगर कैसे करें

यह विन्यास मैंने कोशिश की है, लेकिन यह Log कॉल को दूर नहीं करता है

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 

-keep class ** { 
    *; 
} 

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

(मैं -keep class ** की वजह मान) क्या मैं ProGuard साथ भी संभव पूछ रहा हूँ है?

उत्तर

30

आप proguard-project.txt में इस विकल्प के साथ प्रवेश कॉल निकाल सकते हैं: अगर अनुकूलन, विकलांग नहीं है proguard-android.txt में तरह

-assumenosideeffects class android.util.Log { 
    public static boolean isLoggable(java.lang.String, int); 
    public static int v(...); 
    public static int i(...); 
    public static int w(...); 
    public static int d(...); 
    public static int e(...); 
} 

यह विकल्प केवल प्रासंगिक है। आप project.properties में बजाय proguard-android-optimize.txt निर्दिष्ट करने के लिए, है:

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

आप सिकुड़ कहानियो यदि आप चाहें तो निष्क्रिय कर सकते हैं।

-keep class myapp.** { *; } 

इन चरणों का अक्षम करना और निश्चित रूप से सभी कोड रखने को देखने के एक बिंदु से ProGuard इष्टतम नहीं है: आप भी यदि आप चाहें तो अनुकूलन से आपके आवेदन की आंतरिक एपीआई रक्षा कर सकते हैं।

+0

में build.gradle

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

में लगता है समस्या की तरह डिफ़ॉल्ट वैश्विक ProGuard config था अनुकूलन अक्षम करता है। अभी के लिए मैंने अभी प्रोजेगार्ड गिरा दिया है और डीबग फ्लैग के लिए चेक के साथ अपनी लॉगिंग कॉल लपेट ली है। वैसे भी मैं आपका जवाब स्वीकार करूंगा क्योंकि यह मेरा मूल प्रश्न हल करता है। – UloPe

+0

मैंने देखा कि वेब कॉल अभी भी BasicNetwork.logSlowRequests और Request.finish में दिखाई दे सकता है ... आप इसे कैसे हटा देंगे? – askilondz

+0

@Eric क्या आप कृपया उस पर कुछ स्रोत प्रदान कर सकते हैं। ऐसा नहीं है कि मैं तुम पर विश्वास नहीं करता, मैं करता हूं। लेकिन यह मामला अस्पष्ट है और बहुत सी शोक का स्रोत है। – f470071

12

proguard-rules.pro

-dontwarn ** 
-target 1.7 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 

-optimizations !code/simplification/arithmetic,!code/allocation/variable 
-keep class ** 
-keepclassmembers class *{*;} 
-keepattributes * 

#This will not remove error log 
-assumenosideeffects class android.util.Log { 
    public static boolean isLoggable(java.lang.String, int); 
    public static int v(...); 
    public static int i(...); 
    public static int w(...); 
    public static int d(...); 
    #public static int e(...); 
} 
+1

यह मेरे लिए काम नहीं करता .. मैं आपके कोड को कॉपी/पेस्ट करता हूं और मेरे पास अभी भी लॉग है .. – Majstor

+0

आपको त्रुटि लॉग दिखाई देंगे। सार्वजनिक स्थिर int ई (...) से पहले # निकालें; और सार्वजनिक स्थैतिक बुलियन के पहले लॉजगेबल (java.lang.String, int); यह भी सुनिश्चित करें कि आप रिलीज बिल्ड चलाते हैं। परिवर्तन रिलीज निर्माण के लिए थे। –

+1

मैं संदीप गलत था। यह काम करता है .. मैं क्षमा चाहता हूँ। मैं प्रोजेवार्ड-एंड्रॉइड.txt को बदलने के लिए चूक गया -> proguard-android-optimize.txt – Majstor

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