Search code examples
androidsynchronized-block

Rejecting class because it failed compile-time verification Android


One of my application suddenly fails on startup, with the following error message :

java.lang.VerifyError: Rejecting class com.sample.BufferManagerImpl because it failed compile-time verification (declaration of 'com.sample.BufferManagerImpl' appears in /data/app/com.sample.myapp-1/base.apk)

It only fails on devices using the ART virtual machine, but not on Dalvik


Solution

  • The issue is due to having a synchronized block inside a try-catch block, for example :

    try {
        synchronized (mLock) {
            updateState();
        }
    } catch (IllegalStateException e) {
    }
    

    Apparently this is not a good practice, but as soon as I change it like this it works :

    synchronized(mLock) {
        try {
            updateState();
        } catch (IllegalStateException e) {
        }
    }