proguard的 Constructor returning without calling superclass constructor解决

java.lang.VerifyError: Verifier rejected class xxx: void xxx.<init>() failed to verify: void xxx.<init>(): [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 <init>()V
    .locals 0

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

    return-void
.end method

混淆后删除了super()

# direct methods
.method public constructor <init>()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 {

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

    -assumenosideeffects class cn.qssq666.module.BuildConfig{
  *** <fields>;
      *** <methods>;
    }

通配符改成*** <fields>;*** <methods>;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值