proguard的 Constructor returning without calling superclass constructor解决

java.lang.VerifyError: Verifier rejected class xxx: void xxx.() failed to verify: void xxx.(): [0x0] 

Constructor returning without calling superclass constructor (declaration of xxx' appears in /data/app/cn.qssq666.screendetection-2/base.apk)
        at xxx.m.Ce.checkEmulatorxxx(Hl)

对比混淆前后

.method public constructor ()V
    .locals 0

    .line 9
    invoke-direct {p0}, Ljava/lang/Object;->()V

    return-void
.end method

混淆后删除了super()

# direct methods
.method public constructor ()V
    .locals 0

    return-void

原因是我为了删除日志工具类使用了高级混淆手段assumenosideeffects
而这个东西不能写通配符{*};否则会出现误删,具体看下面的文章

https://sourceforge.net/p/proguard/bugs/716/?limit=25
解决办法

  -assumenosideeffects class java.io.PrintStream {
      public *** println(...);
      public *** print(...);
  }
  -assumenosideeffects class android.util.Log {
      public static boolean isLoggable(java.lang.String,int);
      public static int v(...);
      public static int i(...);
      public static int w(...);
      public static int d(...);
     public static int e(...);
  }


    -assumenosideeffects class qssq666.qssqtest.demo.test.Logs {

         *** ;
          *** ;
        public static void writeLog(...);
        public static String getLog(...);
        public static void clear(...);
        public static void writeErrorLog(...);
    }
    -assumenosideeffects class qssq666.qssqtest.demo.test.BuildConfig{
    *** ;
    *** ;
    }

    -assumenosideeffects class cn.qssq666.module.BuildConfig{
  *** ;
      *** ;
    }

通配符改成*** ;*** ;

你可能感兴趣的:(proguard的 Constructor returning without calling superclass constructor解决)