I meet GL_INVALID_OPERATION too when glBindImageTexture.
Like CodingLumis said(need to read his answer util the end), solution is : replace glTexImage2D with glTexStorage2D
According https://arm-software.github.io/opengl-es-sdk-for-android/compute_intro.html
A very important restriction for using shader images is that the underlying texture must have been allocated using "immutable" storage, i.e. via glTexStorage*()-like functions, and not glTexImage2D().
---