gradle 验证错误:验证程序拒绝类...必须初始化“this”参数

ie3xauqp  于 2023-01-21  发布在  其他
关注(0)|答案(5)|浏览(205)

第三方库升级后,我在应用程序启动时遇到新的崩溃:

java.lang.VerifyError: Verifier rejected class ly.img.android.e: void ly.img.android.e.<init>(java.lang.String, boolean) failed to verify: void ly.img.android.e.<init>(java.lang.String, boolean): [0x5C] 'this' arg must be initialized (declaration of 'ly.img.android.e' appears in base.apk!classes2.dex)
    at ly.img.android.b.<clinit>(Unknown Source:46)
    at ly.img.android.c.b(Unknown Source:0)
    at ly.img.android.PESDK.initSDK(Unknown Source:0)
    at ly.img.android.IMGLYAutoInit.onCreate(IMGLYAutoInit.java:41)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:2092)
    at android.content.ContentProvider.attachInfo(ContentProvider.java:2066)
    at android.app.ActivityThread.installProvider(ActivityThread.java:6983)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:6528)

是的,我知道有很多类似的问题,但我没有找到任何解决办法或建议给我。
所以,也许那里的人可以给我提供提示或建议那里出了什么问题。谢谢

iqxoj9l9

iqxoj9l91#

其他人也面临着这样的问题,我想这可以帮助你!
java.lang.VerifyError: Verifier rejected class ly.img.android.e: void ly.img.android.e.<init>(java.lang.String, boolean) failed to verify: void ly.img.android.e.<init>(java.lang.String, boolean): [0x5C] 'this' arg must be initialized (declaration of 'ly.img.android.e' appears in base.apk!classes2.dex)
但是根据GitHub的一个帖子,他们找到了这个问题的解决方案
https://github.com/CleverTap/clevertap-android-sdk/issues/15#issuecomment-454842450
AGP(Android Gradle插件)3.3(和3.4)可通过设置显式依赖关系修复此问题,详情如下。AGP 3.3.1发布后,请删除固定版本,以便您再次获得新的D8/R8版本。
对于AGP 3.3,请使用以下内容修改您的顶级build.gradle文件:

buildscript {
    repositories {
        maven {
            url "http://storage.googleapis.com/r8-releases/raw" // ADD THIS.
        }
    }
    dependencies {
        classpath 'com.android.tools:r8:1.3.52'  // ADD THIS. Must be before the Gradle Plugin for Android.
        classpath 'com.android.tools.build:gradle:3.3'
    }
}

对于AGP 3.4,r8版本应为1.4.25

rta7y2nd

rta7y2nd2#

我有个建议也许会有帮助

android {

    defaultConfig {
       ...
        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

以及

implementation 'com.android.support:multidex:1.0.0'
cgvd09ve

cgvd09ve3#

我是如何解决此问题的:
我已经把***gradle***版本从3.5.3升级到3.6.3了。哦,谢谢你。也许我的经验可以帮助一些人。

sczxawaw

sczxawaw4#

我认为这是第三方图书馆的问题。
在我的例子中,我自己构建了库 .jar,并且不知道为什么在测试应用程序中测试 .jar 时会出现VerifyError
问题出在proguard.cfg-assumenosideeffectsLog之间。
具体来说,在proguard.cfg(我的库的)中有以下一行:

-assumenosideeffects class android.util.Log {*;}

将其替换为:

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** d(...);
    public static *** i(...);
    public static *** w(...);
    public static *** e(...);
}

并且再次构建和混淆它解决了这个问题。
我找到了问题的答案here
我知道这不能直接回答最初的问题,但我在这里留下这个答案是为了帮助那些试图构建 .jar 的人,使用它的结果是VerifyError

kxkpmulp

kxkpmulp5#

我也有类似的错误:

FATAL EXCEPTION: Connection#7864356
    Process: ..., PID: 24458
    java.lang.VerifyError: Verifier rejected class r8.a: r8.b r8.a.b(w8.a[]) failed to verify: r8.b r8.a.b(w8.a[]): [0x33] expected to be within a catch-all for an instruction where a monitor is held (declaration of 'r8.a' appears in /data/app/~~DIy9qxh1lGM...==/base.apk)
        at p7.g$b.b(SourceFile:270)
        at p7.g$b.run(SourceFile:35)

这发生在我将gradle从4.2.2更新为7.3.1之后。我尝试在错误消息中为指定的类禁用模糊处理和@Keep选项,但没有任何帮助。在调试模式下,一切仍然正常,但在发布版本中,应用因错误而崩溃。
感谢Dupinder Singh。我已将我的顶级build.gradle文件更改为:

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools:r8:4.0.48'
        classpath 'com.android.tools.build:gradle:7.3.1'
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

现在一切都好了。也许我的解决方案会对某人有所帮助。

相关问题