Search code examples
androidcompatibility

Disable hardware acceleration, backward compatibility


I have a problem with a function (setLayerType(LAYER_TYPE_NONE, null)) available in api >=11, and my code should run on android 1.6 (API level 4) too. I have tried to use reflection like this:

try {

        Method method = View.class.getMethod("setLayerType", Integer.TYPE, null);
        method.invoke(LAYER_TYPE_NONE, null);
        view.setLayerType(LAYER_TYPE_NONE, null);
    } catch (Throwable e) {
        Log.e("_________________test", "Function not found");
    }

but my app crash at view.setLayerType with java.lang.VerifyError....

Does anybody have any idea how can I workaround this crash and get a backward compatibility with this function in lower level api?

Thanks, Arkde


Solution

  • Just remove

    view.setLayerType(LAYER_TYPE_NONE, null);
    

    and you should be fine, for security reasons, Java/Android would first verify that it has at least a shot of running a given class before proceeding, and on older Android OS it doesn't know how to execute "view.setLayerType(LAYER_TYPE_NONE, null);", it would throw a hard Error before any code from that class could be run.

    Since you've run the code using reflection, you shouldn't need that line of code anyway.