This is a hard problem, and one of the reasons that more people make their games free on the Play Store than on Apple's app store. There's just so many devices out there it is effectively impossible to avoid selling your game to a customer who won't be able to play it.
One tool in the manifest to add to Nanoha's suggestion is the screen size: <supports-screens android:smallScreens="false" /> ditches tiny phones which are probably underpowered. But in general it's hard to do much in the manifest beyond OS version, screen size and GLES version.
At runtime, I assess device's graphics capabilities mainly by proxy, I look at information like:
* Number of CPU cores
* Amount of RAM
* Whether highp is supported in fragment shaders
* Whether GLES3 is supported
* Whether depth textures are supported
And I choose a graphics option based on that - I let the user override my choice.