proguard-android-优化构建失败
proguard-android-optimize build failed
我正在尝试禁用所有日志
-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'
构建失败
错误
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/Contents/Home/bin/java'' finished with non-zero exit value 2
有了这个
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
它的构建但日志可见
推荐的
解决方案是使用最新的编译器从源代码重新编译 class
并且没有指定任何“-target”类型选项。忽视的后果
此警告是对此 class 的反射操作将不正确
表示它不是一个内部class。
未捕获的翻译错误:com.android.dx.cf.code.SimException:局部变量类型不匹配:尝试使用 int 类型的局部变量设置或访问 java.lang.Object 类型的值。这是忽略局部变量信息的 .class 转换工具的症状。
请使用以下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 *;
}
希望这对您有所帮助。
您可以尝试在包 com.example.mylog
中为 v,i,w,d,e
创建一个虚拟 Log
class 并使用 NOPs 然后使用这个混淆器重新映射
android.util.Log -> com.example.mylog.Log
使用选项 -applymapping
我正在尝试禁用所有日志
-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'
构建失败 错误
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/Contents/Home/bin/java'' finished with non-zero exit value 2
有了这个 proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' 它的构建但日志可见
推荐的 解决方案是使用最新的编译器从源代码重新编译 class 并且没有指定任何“-target”类型选项。忽视的后果 此警告是对此 class 的反射操作将不正确 表示它不是一个内部class。
未捕获的翻译错误:com.android.dx.cf.code.SimException:局部变量类型不匹配:尝试使用 int 类型的局部变量设置或访问 java.lang.Object 类型的值。这是忽略局部变量信息的 .class 转换工具的症状。
请使用以下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 *;
}
希望这对您有所帮助。
您可以尝试在包 com.example.mylog
中为 v,i,w,d,e
创建一个虚拟 Log
class 并使用 NOPs 然后使用这个混淆器重新映射
android.util.Log -> com.example.mylog.Log
使用选项 -applymapping