all parts
1 - installing the tools and running samples
2 - calling C++ library from Java
3 - abstracting types and logging
4 - timing service
This post is first in series of articles on creating your own simple game engine. The engine will be written in C++ (mostly) and will use OpenGL ES 2.0 for rendering the graphics. It will start with building the engine for Android NDK and in later parts we will go multiplatform.
1 - installing the tools and running samples
2 - calling C++ library from Java
3 - abstracting types and logging
4 - timing service
This post is first in series of articles on creating your own simple game engine. The engine will be written in C++ (mostly) and will use OpenGL ES 2.0 for rendering the graphics. It will start with building the engine for Android NDK and in later parts we will go multiplatform.
In first part we will install the tools and test it with one of the examples delivered within NDK package.
Preparation
As written above we will start with Android NDK. You should have installed:
- Android SDK
- Android NDK
- Eclipse (with CDT plugin)
I had Android SDK installed previously and used it with older version of Eclipse (Juno). I will describe here how to set it manually with latest Eclipse release (Kepler). Installing ADT bundle can probably save some work as it contains Android SDK + Eclipse. So, if you do not have Android SDK installed from past skip to place where NDK installation is described.
To install eclipse download the latest (Kepler) .zip package from Eclipse site. The installation package you are interested in is "Eclipse IDE for Java Developers". I have 64 bit Windows 7 so I grabbed 64 bit version. Unzip it into directory of your choice. Now, you have pure eclipse. You still can not develop for Android under it. You have to install ADT plugin. In menu, go to "Help->Install New Software..":
Press "Add..." button and put "https://dl-ssl.google.com/android/eclipse/" into second edit field:
Install all items that are offered then.
Now you need to install CDT plugin that will allow you to develop C++ code under Eclipse. repeat the procedure above but this time enter these values:
Again, install all that is offered.
Plugins are installed so let's do some settings.Now we need to install Android NDK. Get it here. The installation is again simple unzipping into directory of your choice.
Get back to Eclipse and go to "Window->Preferences":
And set path to you NDK installation directory:
If you do not have any virtual Android Virtual Device (emulator) created, create one. You can find step by step how to here.
In
your Windows environment variables check that you have ANDROID_SDK and
ANDROID_NDK variables set and correctly pointing into your installation
directories. If you do some changes here do not forget to restart
Eclipse.
Running example
Now let's test the tools with some example. We will chose San Angles demo that is one of the samples in "android-ndk-r9\samples\" directory. Go to "File->New->Other...":
Select "Android Project from Existing Code":
Navigate with "Browse..." button to directory:
Go again to "File->New->Other..." and convert the project to C/C++ project:
Then select "Makefile project" and "-- Other Toolchain --":
The Eclipse will offer you to open C/C++ perspective.
Right click the project name and open "Properties" (in very bottom). Uncheck "Use default build command" and replace "Build command" with "ndk-build.cmd"
(update 1: Andrew K in comments bellow pointed that it was necessary for him to put "${ANDROID_NDK}ndk-build.cmd" here)
(update 2: the reason for above is that ANDROID_NDK variable must be part of your environment PATH variable. Put it there like this: %ANDROID_NDK%. It will take content of ANDROID_NDK variable so you do not have to rewrite it every time you upgrade to higher NDK version. Adjusting ANDROID_NDK variable will be enough):
(update 1: Andrew K in comments bellow pointed that it was necessary for him to put "${ANDROID_NDK}ndk-build.cmd" here)
(update 2: the reason for above is that ANDROID_NDK variable must be part of your environment PATH variable. Put it there like this: %ANDROID_NDK%. It will take content of ANDROID_NDK variable so you do not have to rewrite it every time you upgrade to higher NDK version. Adjusting ANDROID_NDK variable will be enough):
You should be now able to build the demo with hammer icon or with "Build Project" command when right-clicking on the project name. The build output is located in "Console" tab in the bottom.
Unfortunately you are not finished yet. On the left side you have directory structure of the demo. Go to "jni" directory and open "app-android.c" file. If it is the same for you as I got it, you will have lot of errors in the file:
Right click the project again to get into Properties and in "Builders" change the order so CDT builder is behind Java Builder:
Then go to "C/C++ General -> Paths ans Symbols". Click tab Includes and add these two lines into all Configurations and Languages:
- "${env_var:ANDROID_NDK}/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.8/include"
- "${env_var:ANDROID_NDK}/platforms/android-18/arch-arm/usr/include"
Also define these symbols - "__ANDROID__" and "__GNUC__" (there are two underscores):
After rebuilding the index, the errors should disappear.
Conclusion
Now you can start the emulator and run the demo in it:
The steps in "Preparation" part need to be done only once while the steps described in "Running example" need to be done every time you start new project (or try to run any of the samples).
In next part we will start some coding.
Great tutorial!
ReplyDeleteFor the step - Uncheck "Use default build command" and replace "Build command" with "ndk-build.cmd"
I had to use ${ANDROID_NDK}ndk-build.cmd
Hi Andrew K,
Deleteit works without ${ANDROID_NDK} for me. Did you set the path to NDK installation directory in Windows->Preferences->Android->NDK?
Anyway, I adjusted the article text with your comment.
Hi Tomas
Deleteyes, I have set the NDK path in the Preferences.
When I take out ${ANDROID_NDK}, I get the following error -
Error: Program "ndk-build.cmd" not found in PATH
So I guess you might have the NDK directory also in your PATH settings.
(I have defined ANDROID_NDK too)
You are right. It has to be in the PATH variable as well. I have it referenced like %ANDROID_NDK% there, so it takes the definition from ANDROID_NDK variable and it is not needed to write the whole path again. But either way, it must be there...
DeleteI've been struggling so much I was about to give up. Thanks man, it worth it to google for 8 hours to find this tutorial. Great job!
ReplyDelete