Update: Well, as Maister has pointed out, this is no longer needed. Maybe someone will find it useful for something else at least.
Good news everybody, I’ve just discovered a way to force integral scaling on android. Before and after the fix You’ll need a rooted android 4+ device with any terminal app installed. (Other android versions may or may not work, I never tested) Also, do everything at your own risk. If something happens to your device, It’s not my fault, nor can I help you to fix it. I’ve only tested this method on my Nexus 7 with PARANOIDANDROID 3.0 custom rom default kernel.
The command to use is am display-size [desired_short_side_resolution]x[your_device_long_side_resolution] To find the [desired_short_side_resolution] divide the short side res of your device by the long side (for portrait) or short side (for landscape) output resolution of the console you are going to play. Then multiply the result without the fractional part by the same number you have just divided by. Native resolutions for some of consoles are: GBC: 160 × 144 GBA: 240 × 160 NES: 256x240 SNES: 256 × 224, 512 × 224, 256 × 239, 512 × 239 Sega MD: 320×240, 320×224
Example for portrait Nexus 7 playing GBA: 800/240=3.333333333333333 3x240=720 The command would be: am display-size 720x1280
If everything looks very broken, try changing the order of the numbers. Use the same command to revert to your default resolution.
This is by all means just a temporary fix, we still need a shader which could do integral scaling without hurting the FPS. Or even better, a way to force integral scaling in the video options of the emulator itself. I hope someday it will be possible.