首页 文章

proguard-android-optimize构建失败

提问于
浏览
0

我试图禁用所有日志

-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:进程'command'/ Library / Java / JavaVirtualMachines/jdk1.8.0_66 .jdk / Contents / Home / bin / java''以非零退出值2结束

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

建议的解决方案是使用最新的编译器从源代码重新编译类,而不指定任何"-target"类型选项 . 忽略此警告的后果是,对此类的反射操作将错误地指示它不是内部类 .

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

2 回答

  • 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 *;
    }
    

    希望这可以帮助 .

  • 0

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

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

    有选项 -applymapping

相关问题