使用Ant编译我的应用程序时我可以看到详细的Proguard输出,并且我已经设置了删除日志语句(见下文),但是当我运行发行版apk时,我试图删除的所有日志语句都在那里
我有2个项目,每个项目都包含一个共同的项目。 2个主项目和公共项目都有一个proguard.cfg文件,所有文件都包含删除日志语句的代码段。
我有什么遗失的东西吗?
**我的所有日志语句都是Log.d(...)
-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 :(得分:3)
这里你的proguard文件没问题,但是你可能会遗漏一些细节。
在你的gradle文件中你可能有这样的东西:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt), 'proguard-rules.pro'
}
}
检查getDefaultProguardFile('proguard-android')
,如果您打算对其进行优化,则应将其更改为getDefaultProguardFile('proguard-android-optimize.txt')
。
我花了一些时间才意识到这一点,看到了你的问题,但仍然无法删除我的代码上的Log
电话。所以我发现这个链接解释了更改为优化文件以进行优化的必要条件。
https://developer.android.com/tools/help/proguard.html#enabling-gradle
答案 1 :(得分:1)
如果没有Proguard优化,您无法使用assumenosideeffects
。
答案 2 :(得分:0)
您可以使用pro-guard来删除或评论所有日志消息,而不是删除或注释掉所有日志消息。创建一个实用程序类,它基本上是android日志系统的包装器
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);
}
}
之前我编译我的应用以进行分发我只需调用showLogs = true;
然后所有日志消息都被压缩
您可以轻松扩展此类,以允许您指定标记并生成多个调试消息。