My goal is to create games for Windows (maybe Mac and Linux) as well as numerous phones (Android, iOS, etc). I'm currently learning OpenGL for my graphics API, which should cover all the platforms that I want (along with ES). I still need to coordinate which OS specific APIs I'm going to use, and that's what I'm sort of confused about at the moment.
I'd need to use the Windows API for the engine and game (on Windows), POSIX for linux, XCode for iOS and Mac, and many more tools for the phones out there (I know that the Android SDK is actually Java-based).
What I'm wondering is what abstraction techniques should I use when making the engine? Maybe this is just something that I'll learn about over time, maybe there's ways for Win32 to issue commands to Android SDK (or just Java in general), etc. This'll probably be a huge factor when I'm making the engine (I know that the freeglut library handles some of the platform-specific things in OpenGL, but I think it only supports Windows, Mac, and Linux).