Another possible reason:
I had this problem when I published an app, so I monkied around with it until I figured it out. When I disabled copy protection on my app, suddenly it was compatible with my device (Sony Xperia Play) and I was able to install through the android market.
Copy protection is now deprecated and is being replaced with a new licensing feature, so assuming licensing doens't have the same bug this problem will in theory be phased out. For those affected now, I have found a potential solution but it requires an unlocked bootloader to clear your cache partition:
http://forum.xda-developers.com/showpost.php?p=11626645&postcount=425
So if you are a developer and some people can't see your app, disable copy protection and use licensing instead. I also suggest using the Android SDK built in ProGuard feature to obfuscate (scramble) your code to make it harder to reverse engineer.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…