Hi again! If you’ve been able to accomplish the first one, and you’re aim to continue, thi is the second part. In this part, we’re going to run the TestCpp project of Cocos2dx in Android. It’s going to be shorter process than the previous one.
Before we start with the Android part, I want you to try to make a debug against the HelloCpp project in eclipse. In Debian I had a problem. My eclipse said “Error while launching command: gdb –version”. After a while I realized that I hadn’t installed it, http://www.gnu.org/software/gdb/ and it’s necessary for debugging, so
sudo apt-getinstall gdb.
Let’s start with Android. We have to define a couple of enviroment variables inside our eclipse. The first one, COCOS2DX must be defined in Eclipse->Preferences->General->Workspace->Linked Resources. Click in the New button and set the variable to the path of the uncompress folder of Cocos2dx, in my case /home/borja/Programas/cocos2d-x-2.1.4.
The second one, NDK_ROOT, must be defined in Eclipse->Preferences->C/C++->Build->Environment. Click in Add and set the variable value to the path of the uncompress folder of NDK, in my case /home/borja/Programas/android-ndk-r8e.
If you’re compiling the TestCpp project with the last version of Android like me, maybe the NDK shows this error android-ndk-r8e/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml. You can work around it by modify the file add_application.mk in the line 128, changing $(call __ndk_warning by$(call __ndk_info.
Now, try to compile the TestCpp project, you should get an output console like this, but a little much longer :-).
21:30:17****Build of configuration Defaultforproject TestCpp****
Like the post’s title says, I’m going to explain how I installed the libwebsockets in my Linux distribution. I needed it for one of the Cocos2dx‘s libraries (the extension library). At first, by mistake, I thought that this library didn’t exist, but finally I found it, libwebsockets project.
Let’s download the last version
wget http://git.warmcat.com/cgi-bin/cgit/libwebsockets/snapshot/libwebsockets-1.22-chrome26-firefox18.tar.gz and uncompress it
tar-xzvf libwebsockets-1.22-chrome26-firefox18.tar.gz . The installation instructions are in the INSTALL file. The first thing you have to do is check that you have already installed the autoconf packagehttp://www.gnu.org/software/autoconf/. I don’t even known about its existence till I tried to install the libwebsockets today :-). Just type down in your terminal
sudo apt-getinstall autoconf. After that, launch the autogen.sh script
./autogen.sh. The first time I launched it in my laptop, Debian required to me the GNU Libtool package, if this is your case, just
sudo apt-getinstall libtool.
Finally the steps described in the library for the correct installation are:
That will install the library in your system. In my case in the /usr/local/lib directory. If this is your case too, I recomend create a symbolic links in the /usr/lib/ directory for avoiding problems with Eclipse when you’ll try to use the library as “shared library”
In this post I’m going to explain the steps for installing the Cocos2dx environment in Linux for working with Eclipse and Android. We travel from basics to compile and execute the examples HelloCpp in Linux and TestCpp in Android. I’m assuming you have knowledge of Android, C++, Linux and you have already installed and configured Eclipse with Android. I’ve included some paths in my .bashrc file. I’m going to use them during this post, with this I can make some things easyly, for example, I can access to my android adb from any terminal. In order to do this, open a terminal in your home directory, and with your favourite editor modify the .bashrc file,
nano.bashrc, and add the following lines:
Now for making the change effective we have to execute the following command:
source.bashrc. The first thing that we’re going to do is install the eclipse plugin for C/C++, the Eclipse CDT Plugin, we have two different ways for doing that. The first one, is looking for it in the Eclipse Marketplace via “Help > Eclipse Marketplace..”, the second one is using the update site: http://download.eclipse.org/tools/cdt/releases/juno. After this, we’re going to download the last version of Cocos2dx from the official site (http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download), in our case the version 2.1.4, and the last version of the Android NDK (http://developer.android.com/tools/sdk/ndk/index.html), unzip both files in a directory of our choice, in my case the “Programas” directory.
Again, for making the change effective we have to execute the following command:
source.bashrc. You must be sure that you have installed the Java JDK because we’re going to need it later. If you don’t have it installed, use the command
sudo apt-getinstall openjdk-6-jdk. If you have already installed a Java JRE, check your version with
java-version, in my case I had the 6, so I installed the correspondednt JDK.
Now the fun part begins. We’re going to install the necesary dependences to use Cocos2dx. If you have not installed it yet, you’ll have to install the build essentials and the ia32-libs packages, check my previous post. Now we launch the scrpit “make-all-linux-project.sh”, in the root directory of the Cocos2dx uncompressed files:
sudo bashmake-all-linux-project.sh. When the process finished, we’ll check if everything went ok, so we have to go to the “cocos2d-x-2.1.4/samples/Cpp/HelloCpp/proj.linux/bin/release” directory and execute the HelloCpp:
./HelloCpp. If you see a window with the Cocos2dx logo and the “Hello World” text, we can proudly follow with the next step.
Now starts the hard part. Let’s make all this work in eclipse in order to develop more comfortably. The first thing that we’re going to do is import all the necessary project for working with Coco2dx in Linux and Android. To do this right-click on the Project Explorer of the C/C++ perspective of Eclipse, then, click “Import…> General > Existing Projects into Workspace”. Right-click on “Browse” and choose the Cocos2dx root directory. Once we get the complete list, right-click on “Deselect All” and from the list we select the following projects only:
libBox2D – (proj.linux)
libChipmunk – (proj.linux)
libcocos2d – (proj.linux)
libcocos2dx – (android/java)
libCocosDenshion – (proj.linux)
libExtension . (proj.linux)
HelloCpp – (proj.linux)
TestCpp – (proj.android)
It seems a pretty obvious list, but took me a good while to figure out which projects I needed. But what really was a real waste of time was my ignorance about the CDT plugin. I have a 64bits Linux distribution, because of this when I compiled the projects by command line I didn’t get any errors. But when I used eclipse, all projects had problems with the dependencies. After reviewing all the compilation scripts used by the “make-all-linux-project.sh” and putting one by one all the correct dependencies to compile the projects in eclipse, I found out that every C++ project had a 64bits configuration ready to be used in eclipse, it could be selected in the project properties. I show you in these images the steps to follow, if your operating system is 64-bit based.
Let’s build the projects in the previous list order, and I’ll explain the details that we found along the process.
We build libBox2D without problems.
We build libChipmunk without problems.
In the libcocos2d library we found the first little issue, there is a dependency error with an static library, libxml2.a. This problem has a quick solution. In the project properties C/C++ Build > Settings. In GCC C++ Compiler > Includes and GCC C Compiler > Includes remove the following library dependence: ../../../cocos2dx/platform/third_party/linux/libxml2. And in GCC C++ Linker > Miscellaneous remove ../../../cocos2dx/platform/third_party/linux/libraries/lib64/libxml2.a. I’ve already make a pull request fixing that https://github.com/cocos2d/cocos2d-x/pull/3019.
In the libCocosDenshion library something strange happend, after fixing al the dependencies, when you try to build the eclipse project you get a nevereding error list like “…multiple definition of…” related with the classes SimpleAudioEngineFMOD.cpp and SimpleAudioEngineOpenAL.cpp. However, by command line it works perfectly, that’s because in the Makefile choose one file or another for build process according of the dependecies that you have already installed . I guess there’s a more elegant way to do this, but I don’t know how to make condicional linked files with the CDT plugin so I simply remove one of the files. I decided to keep SimpleAudioEngineFMOD.cpp, but if you decide to keep the SimpleAudioEngineOpenAL.cpp and eclipse fails building for some dependencies issues (that was my case in Debian) you must install:
sudo apt-getinstall libopenal-dev
sudo apt-getinstall libalut-dev
sudo apt-getinstall libvorbis-dev
In the libextension project we found a few issues too :-). At this point, I recognize that these problems are new from the last version 2.1.4. There is a new WebSocket entity that needs a non existing library “libwebsockets.h”.
Errata (06/07/2013) <ERROR>And again… Why is it working perfectly building it by command line?, you know that, don’t you?, it’s because this entity is not included as source in the Makefile :-). So we’re going to remove both files WebSocket.h and WebSocket.cpp from the project explorer in eclipse.</ERROR>
There is a way to install the “libwebsockets” library :-), and the reason why it’s working perfectly by command line is because this entity is not included as source in the Makefile. For installing this library follow the steps in my new post. I don’t explain that in this post because a think is long enough 🙂
But it’s not good enough!! :-), eclipse not found SimpleAudioEngine.h, that’s easy, I know the answer!, just access to the project properties, C/C++ Build > Settings and in the section GCC C++ Compiler > Includes add ../../../CocosDenshion/include. I’ve done the corresponding pull request https://github.com/cocos2d/cocos2d-x/pull/3034
And.. finally THE ROCK… I mean, we get to the HelloCpp project, and after build it we get the following errors:
In the previous Cocos2dx versions I didn’t get these errors, because of this I did some research for a while. After more than an hour I realize a few things. The first one, this two elements are defined in ccFPSImages.h and ccFPSImages.c. The second one, building the project by command line it worked perfectly, of course, bacause are included in the Makefile. The last one, building the project by eclipse it didn’t work bacause the generated libcocos2d.so library didn’t cotains this two elements.
This error was fixed adding this two files to the “Linked Resources” list in the project properties inside the “Resources” option. I didn’t found the way to do this using the eclipse interface so I edited the .project file directly adding the following lines into the <linkedResources> section. Here is the corresponding pull request: https://github.com/cocos2d/cocos2d-x/pull/3035
Now the last attempt. Refresh, clean and build the libcocos2d project, do the same thing to the HelloCpp project, and if everything is ok, and you’re not about to surrender, you can execute the project a see a window like this:
Well, I think that’s enough for the first part of the tutorial :-). In the second one, we are going to run the TestCpp Android project in a real device. Thanks for reading this long post.