Game Development Reference
In-Depth Information
Getting ready
In Android, the application initialization phase is different, and since we use a mixed Java
plus C++ approach, the entry points will be different. In C++, we are tied to, int main() or
DWORD WinMain() functions; whereas in Android it is up to us to choose which JNI function
we may call from our Java starter code. Event handling and rendering the initialization code
are also quite different, too. To do so, we mark sections of the code with pre-processor
deinitions and put the different OS code into different iles— Wrappers_Android.h and
Wrappers_Windows.h .
How to do it...
We use the standard macros to detect the OS for which the program is being compiled:
Windows-targeted compilers provide the _WIN32 symbol deinition, and the __linux__
macro is deined on any Linux-based OS, including Android. However, the __linux__
deination is not enough, since some of the APIs are missing in Android. The macro ANDROID
is a non-standard macro and we pass the -DANDROID switch to our compiler to identify the
Android target in our C++ code. To make this for every source ile, we modify the CFLAGS
variable in the Android.mk ile.
Finally, when we write the low-level code, the detection looks like the following code:
#if defined(_WIN32)
// windows-specific code
#elif defined(ANDROID)
// android-specific code
#endif
For example, to make an entry point look the same for both the Android and Windows
versions, we write the following code:
#if defined(_WIN32)
# define APP_ENTRY_POINT() int main()
#elif defined(ANDROID)
# define APP_ENTRY_POINT() int App_Init()
#endif
Later we will replace the int main() deinition with the APP_ENTRY_POINT() macro.
There's more...
To detect more operating systems, compilers, and CPU architectures, it is useful to check out
a list of predeined macros at http://predef.sourceforge.net .
 
Search WWH ::




Custom Search