2012-02-17 9 views
4

私のアプリケーションをAntでコンパイルすると、Proguardの冗長出力が表示され、ログ文を削除するように設定しています(下記参照)。そこには削除しようとしていた。Proguardはログコールを削除していません

私は2つのプロジェクトがあり、それぞれに共通のプロジェクトが含まれています。 2つのメインプロジェクトと共通プロジェクトにはそれぞれproguard.cfgファイルがあり、これらのファイルにはログステートメントを削除するスニペットが含まれています。

紛失しているものがありますか?

**私のすべてのログステートメントはLog.d(...)

proguard.cfg

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

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 
-keep public class com.android.vending.licensing.ILicensingService 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
} 

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

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

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

私が心配していたように、ちょうどダブルチェック。私は、Log.d o/pのAntリリースビルドのどれも確かに見ていません。私はLogcat o/pをそのPIDでフィルタリングしています。私はdalvik GC_CONCUURRENTのものを表示します – NickT

+0

私はこの問題があります。私はProguard 4.4を実行する – ron

答えて

0

代わりのプロガードにあなたを使用して、ログメッセージのすべてを削除するか、コメントアウト可能性がありますこのようなことをしてください。

public class Util{ 

    public static boolean showLogs = true; 
    public static String myTag = 'My Tag'; 

    public static void logD(String message){ 
     if (Util.showLogs)  
      Log.d(myTag, message); 
    } 
} 

する前に、基本的にはAndroidのロギングシステムのラッパーであるユーティリティクラスを作成します。私は単にshowLogs = true;を呼び出し、すべてのログメッセージは、あなたがこれを簡単に拡張することができ

supressedされているディストリビューションのために私のアプリをコンパイルしますクラスを使用すると、タグを指定してデバッグメッセージ以上のものを生成できます。

+0

私はここに同意しなければならない。私は同じassumenosideeffectsステートメントを使って自分のプロジェクトからLog行を削除しています。これは動作します - Antリリースビルドではlog o/pを取得しません。私のproguard.cfgとこれとの唯一の違いは、私は1つのプロジェクトしか持っていないと私は言いません-dontobfuscateまたは-forceprocessing – NickT

+0

@NickT:私はあなたがあなたのプロゴードにはないと述べた2つの項目を削除しました。 cfgファイルが、私はまだログステートメントが表示されます。それは試してみる価値があった。 – chris

+1

@slayton:Proguardの文書によると、 'assumenosideeffects'は、クラス指定に一致する副作用を持っていないメソッドへの呼び出しを削除します。 http://proguard.sourceforge.net/index.html#manual/usage.html – chris

1

assumenosideeffectsをProguard最適化なしで使用することはできません。

+0

最適化がオンになっている –

2

あなたのプロガードファイルはOKですが、欠落している可能性のある詳細があります。

buildTypes { 
    release { 
     minifyEnabled true 

     proguardFiles getDefaultProguardFile('proguard-android.txt), 'proguard-rules.pro' 
    } 
} 

あなたにそれを最適化する意図、あなたはgetDefaultProguardFile('proguard-android-optimize.txt')にそれを変更する必要がありますので、もし、getDefaultProguardFile('proguard-android')を確認してください:あなたは、おそらくこのような何かを持っているあなたのGradleファイルで

私はそれを実現するのに少し時間を費やしましたが、あなたの質問を見ましたが、私のコードで私のLog呼び出しを取り除くことができませんでした。だから私は最適化できるようにproguardするために最適化ファイルに変更するために必要であることを説明するこのリンクを見つけました。

https://developer.android.com/tools/help/proguard.html#enabling-gradle

関連する問題