2012-09-12 31 views
23

Gizli bir android uygulaması oluşturmak istiyorum. Bunun için ProGuard kullanıyorum. Tüm Log. * Iletilerini otomatik olarak kaldırmak istiyorum. Bunu nasıl yapabilirim? this mesajını buldum ama hala alacağım. (Obstrüksiyonu kontrol etmek için bir decompiler kullanıyorum). Herhangi bir yardım takdir
Android Proguard tüm günlük mesajları kaldırmıyor

-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 aşağıdaki gibidir.
Teşekkürler.

cevap

38

Bu yalnızca tüm hata ayıklama Log.d(TAG, "..."); ve hata Log.e(TAG, "...") aramaları kaldırın:

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

sadece bu kullanmak, tüm günlük aramaları kaldırmak için:

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

Merhaba @EricLafortune Yorumunuzu açıklayabilir misiniz? ** android.util.Log ** içinde –

+1

@EricLafortune 'wait' yöntemi? –

18

varsayılan android Proguard yapılandırma optimizasyonunu devre dışı bırakır. Bunu etkinleştirmek için, projenizin project.properties dosyasında proguard-android.txt

yerine
12

proguard-android-optimize.txt dosyasını kullanın. Başını pro-guard çevresinde saracak gibi görünmeyenler için eminim iki şey yaparsın.

1: @yorkw

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

2 Gönderen:

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

yerine

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

: projenizin project.properties dosya kullanımda

@Gallal

itibaren Çünkü sen h

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

Hope satır aşağı başkası yardımcı olur: "kutunun dışında" ave iki proguard seçenekleri onlar sdk iki dosya içerir

android-adk > tools > proguard

dahildir beri.

+0

'project.properties' dosyası şu anda' local.properties' denir? –

+2

Android stüdyosunu kullanırsanız, her şeyin artık farklı olduğundan eminim. Sanırım proguard denir bile. Proguard'ın çalışmasına izin veren "küçült" adını ver. Bahsedilen. BU TALİMAT, SADECE ECLIPSE İÇİNDİR. –

+0

Nedense hala sınıfımda ** Log ** çağrılarını görüyorum. –

7

Android Studio'unuz varsa, ana uygulamanızın build.gradle numarasını değiştirmeniz gerekir.

Not dosyanızda, varsayılan dosya olarak proguard-android-optimize.txt kullanımını belirtmeniz gerekir.

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' 
    } 
} 

Aslında varsayılan proguard-android.txt dosyada, optimizasyon iki bayraklarla devre dışıdır:

-dontoptimize 
-dontpreverify 

proguard-android-optimize.txt dosya yani şimdi assumenosideeffects çalışabilir, bu satırları eklemez.

Ardından, Eclipse için diğer yanıtlar söyledi yoksa, sadece ana proguard dosyasına satır eklemek zorunda:

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