【问题标题】:java.lang.VerifyError: Verifier rejected class: Constructor returning without calling superclass constructorjava.lang.VerifyError:验证程序拒绝类:构造函数返回而不调用超类构造函数
【发布时间】:2018-12-18 21:01:31
【问题描述】:

当我使用 proguard 构建发布版本时,我在应用程序启动时遇到运行时错误(回溯):

2018-12-18 23:10:37.787 16077-16077/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.cantalk.ruen.dialogs, PID: 16077
    java.lang.VerifyError: Verifier rejected class age: void com.google.android.gms.common.wrappers.Wrappers.<init>() failed to verify: void com.google.android.gms.common.wrappers.Wrappers.<init>(): [0x1] Constructor returning without calling superclass constructor (declaration of 'com.google.android.gms.common.wrappers.Wrappers' appears in base.apk)
        at com.google.android.gms.common.wrappers.Wrappers.packageManager(Unknown Source:0)
        at com.google.android.gms.internal.ads.zzze.zzh(Unknown Source:0)
        at com.google.android.gms.internal.ads.zzze.attachInfo(Unknown Source:0)
        at com.google.android.gms.ads.MobileAdsInitProvider.attachInfo(Unknown Source:2)
        at android.app.ActivityThread.installProvider(ActivityThread.java:6391)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5938)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5853)
        at android.app.ActivityThread.access$1100(ActivityThread.java:199)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

我认为它是由 admob 初始化引起的,但我不知道它以前为什么会起作用。 依赖更新后出现此错误:

【问题讨论】:

  • 您找到解决方案了吗?
  • 不,我恢复了旧的库和服务

标签: android android-studio gradle admob proguard


【解决方案1】:

就我而言,我在我的 proguard 规则中使用了 assumenosideeffects。像这样:

-assumenosideeffects class java.io.PrintStream { *; }  

这导致了 proguard 中的一个错误,即从每个类的构造函数中删除超类构造函数调用。要解决此问题,您必须将其更改为:

-assumenosideeffects class java.io.PrintStream { 
      *** <fields>;
      *** <methods>;
}  

PrintStream 是您想使用 proguard 进行混淆的类。 这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多