proguard-android-optimize构建失败

时间:2016-02-03 07:01:53

标签: android proguard android-proguard

我正在尝试禁用所有日志

-assumenosideeffects class android.util.Log {

public static *** v(...);
public static *** i(...);
public static *** w(...);
public static *** d(...);
public static *** e(...);

}

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

但是当我设置

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

构建faild 错误

    UNEXPECTED TOP-LEVEL EXCEPTION:
Error:java.lang.InterruptedException: Too many errors
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:600)
... 4 more
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
  

com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process' command' / Library /的Java / JavaVirtualMachines / jdk1.8.0_66.jdk /内容/首页/斌/ java的''完成非零退出值2

有了这个              proguardFiles getDefaultProguardFile(' proguard-android.txt'),' proguard-rules.pro'  它的构建但日志是可见的

推荐 解决方案是使用最新的编译器从源代码重新编译类 并且没有指定任何" -target"类型选项。无视的后果 这个警告是这个类的反射操作会不正确 表明是一个内部类。

未捕获的转换错误:com.android.dx.cf.code.SimException:局部变量类型不匹配:尝试使用int类型的局部变量设置或访问java.lang.Object类型的值。这是忽略局部变量信息的.class转换工具的症状。

2 个答案:

答案 0 :(得分:2)

请在优化过程中使用以下proguard作为参考,本机方法需要保持原样。

-dontusemixedcaseclassnames
-optimizationpasses 5
-allowaccessmodification
-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.preference.Preference
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
 native <methods>;
}
-keep public class * extends android.view.View {
 public <init>(android.content.Context);
 public <init>(android.content.Context, android.util.AttributeSet);
 public <init>(android.content.Context, android.util.AttributeSet, int);
 public void set*(...);
}
-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);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
 public static **[] values();
 public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
 public static final android.os.Parcelable$Creator *;
}

希望这会有所帮助。

答案 1 :(得分:0)

您可以尝试使用 NOPs Log创建包com.example.mylog中的虚拟v,i,w,d,e类,然后使用此proguard重新映射

android.util.Log -> com.example.mylog.Log

选项-applymapping