proguard的 Constructor returning
2018-11-14 本文已影响0人
吉凶以情迁
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>;