Box2D under Android NDK

1823 views
Skip to first unread message

Danny Brain

unread,
Jun 27, 2009, 2:23:09 AM6/27/09
to android-ndk
Hey,

I'm attempting to build Box2D under Android NDK for a game I'm
planning to write.. and for science I guess.
Currently I'm experiencing an issue with a few missing includes. These
are:
- #include <memory>
- #include <climits>
- #include <cstring>
- #include <cstdlib>

I was wondering if anyone could guide me on either enabling support
for these includes under the NDK, or replacing their usage with
something NDK friendly.
Bear in mind I'm a bit of a C++ newbie and come primarily from a Java
background.

Thanks,
Danny.

Tim Hutt

unread,
Jun 27, 2009, 7:17:34 AM6/27/09
to andro...@googlegroups.com
2009/6/27 Danny Brain <tehd...@gmail.com>:

>
> Hey,
>
> I'm attempting to build Box2D under Android NDK for a game I'm
> planning to write.. and for science I guess.
> Currently I'm experiencing an issue with a few missing includes. These
> are:
> - #include <memory>
> - #include <climits>
> - #include <cstring>
> - #include <cstdlib>

Try:

#include <memory.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>

Danny Brain

unread,
Jun 27, 2009, 12:26:40 PM6/27/09
to android-ndk
Thanks! Got it compiling and hacked out a ball bouncing test. Time
stepping etc. feels a bit wrong.. i.e. too slow, but the performance
is *so* much better than JBox2D (thanks to the whole no garbage
collection thing).
Here are my slop projects if anyone is looking to do this.

http://danish.boredprogrammers.com/abox2d.tar.bz2 - The NDK source
code.
http://danish.boredprogrammers.com/chronobox.tar.bz2 - The android
source code.

On Jun 27, 9:17 pm, Tim Hutt <tdh...@gmail.com> wrote:
> 2009/6/27 Danny Brain <tehdan...@gmail.com>:

ogi

unread,
Jun 27, 2009, 2:20:09 PM6/27/09
to android-ndk
How did you pass the issue of no STL support in the NDK?

Danny Brain

unread,
Jun 27, 2009, 8:48:03 PM6/27/09
to android-ndk
I didn't I guess. At most I replaced STL includes with equivalent
standard headers. My fixes were:
- What Tim Hutt said ;) (changing includes from <climits> to
"limits.h" and so on)
- Adding #include <new> to some files that weren't building.
- Adding a method b2Min(int32 a, int32 b) { ... } because the current
b2Min(T a, T b) was not being found for some reason.

All seems to be working, or at least compiling.

ogi

unread,
Jun 28, 2009, 7:48:18 AM6/28/09
to android-ndk
Your code works for sure. The latest Box2D source I've got from the
repository uses #include <algorithm> and I weren't able to compile it,
so I used your version and made a nice game. I guess you use some
previous version.

Danny Brain

unread,
Jun 28, 2009, 7:55:03 AM6/28/09
to android-ndk
Don't tell anyone.. but all I did was remote the #include <algorithm>
lines.. they don't seem to be used?
I mean I'm not great at C++ or anything, but if you don't have an
#include it's relying on it shouldn't compile right?

ogi

unread,
Jun 28, 2009, 9:46:15 AM6/28/09
to android-ndk
Now that's a great thing you did, I would probably never think of it
myself :) Anyway, I'm so glad to have Box2D on Android and it seems
you're one of the first to do it. It handles so many objects without
lagging and runs so smooth. The closest thing in performance I've
tested is Simpull, but it has very limited functionality.

Danny Brain

unread,
Jun 28, 2009, 10:39:44 AM6/28/09
to andro...@googlegroups.com
Glad to hear it's getting some use :)
Do you have any code samples you'd like to share?

plusminus (Nicolas Gramlich)

unread,
Jul 1, 2009, 10:45:43 AM7/1/09
to android-ndk
Great Danny, thanks a lot :)
Looks really smooth!

On Jun 27, 6:26 pm, Danny Brain <tehdan...@gmail.com> wrote:
> Thanks! Got it compiling and hacked out a ball bouncing test. Time
> stepping etc. feels a bit wrong.. i.e. too slow, but the performance
> is *so* much better than JBox2D (thanks to the whole no garbage
> collection thing).
> Here are my slop projects if anyone is looking to do this.
>
> http://danish.boredprogrammers.com/abox2d.tar.bz2- The NDK source
> code.http://danish.boredprogrammers.com/chronobox.tar.bz2- The android

Fred Grott

unread,
Jul 1, 2009, 11:19:06 AM7/1/09
to andro...@googlegroups.com
ah you know there is android port of that engine right?

Danny Brain

unread,
Jul 4, 2009, 9:36:18 AM7/4/09
to android-ndk
No? Are you talking about JBox2D?

On Jul 2, 1:19 am, Fred Grott <fred.gr...@gmail.com> wrote:
> ah you know there is android port of that engine right?
>

nEx.Software

unread,
Jul 4, 2009, 10:06:04 AM7/4/09
to android-ndk
I believe he is referring to an Android port of JBox2D.

Danny Brain

unread,
Jul 5, 2009, 6:56:08 PM7/5/09
to andro...@googlegroups.com
Ah, the android port of the JBox2D test bed?
Either way I've fiddled with JBox2D under android with horribly laggy results. The garbage collection runs constantly causing major UI lag.
Too many temporary object creations (Vec2 especially).

Either way I think a nice JNI layer on top of Box2D (C++) is the way to go at the moment.

nEx.Software

unread,
Jul 6, 2009, 9:03:30 AM7/6/09
to android-ndk
I've been playing around with your project (awesome that you posted
it, by the way) and have gotten pretty good results from it. I am not
doing anything fancy but I was able to place a hundred balls (and
blocks) and still get decent performance. I'm not experienced with C
or C++ (or Box2D) but this seems to be a good way to learn haha. I am
not going to try some other things from the testbed, for my own
learning purposes and my ultimate goal is to create a nice little
game. Thanks for the head start. That break-out type game in the
Market that is using JBox2D would, I think, greatly benefit from using
this approach.

On Jul 5, 3:56 pm, Danny Brain <tehdan...@gmail.com> wrote:
> Ah, the android port of the JBox2D test bed?
> Either way I've fiddled with JBox2D under android with horribly laggy
> results. The garbage collection runs constantly causing major UI lag.
> Too many temporary object creations (Vec2 especially).
>
> Either way I think a nice JNI layer on top of Box2D (C++) is the way to go
> at the moment.
>
> On Sun, Jul 5, 2009 at 12:06 AM, nEx.Software
> <email.nex.softw...@gmail.com>wrote:

Danny Brain

unread,
Jul 6, 2009, 7:20:45 PM7/6/09
to andro...@googlegroups.com
Glad you got some use out of it :)
It can be done a lot cleaner, that code is just my initial hack and slash to see if I can get it working. But yeah it's a starting point.
I'm also fairly new to C/C++, I've done the odd modification and can read it, but yeah I've learnt a fair bit playing with the NDK so far.
Currently writing a game using this, and at the same time writing a layer of Java sitting on top of NDK Box2D so the Android Java code is clean. Will probably release it when done (writing with a friend so will have to speak to him).

I noticed the break out style game, emailed the developer (Aki) and linked him here. Seems to be making progress, he modified his JBox2D tests to also be run under native Box2D and put it into a demo app. The performance differences are pretty crazy.
JBox2D started going into crazy garbage collection whenever multiple balls are added (I'm assuming because of the way it handles contacts), Box2D NDK stayed fast up to the limit of balls the demo supported (46) the only thing that dropped a little was FPS.
So definately worth using if you want a game with real physics.

Anyway, have fun with it. Let me know if you have any success stories or find something cool :)
Lots of possibilities with a proper physics engine.

Aki

unread,
Jul 6, 2009, 10:27:27 PM7/6/09
to android-ndk
Hi all
I made NDK box 2d test apk.
http://code.google.com/p/akjava-android-project/downloads/list
and souce code is avaiable there.

This thread really help me.
Thanks for sharing code and info

On 7月7日, 午前8:20, Danny Brain <tehdan...@gmail.com> wrote:
> Glad you got some use out of it :)
> It can be done a lot cleaner, that code is just my initial hack and slash to
> see if I can get it working. But yeah it's a starting point.
> I'm also fairly new to C/C++, I've done the odd modification and can read
> it, but yeah I've learnt a fair bit playing with the NDK so far.
> Currently writing a game using this, and at the same time writing a layer of
> Java sitting on top of NDK Box2D so the Android Java code is clean. Will
> probably release it when done (writing with a friend so will have to speak
> to him).
>
> I noticed the break out style game, emailed the developer (Aki) and linked
> him here. Seems to be making progress, he modified his JBox2D tests to also
> be run under native Box2D and put it into a demo app. The performance
> differences are pretty crazy.
> JBox2D started going into crazy garbage collection whenever multiple balls
> are added (I'm assuming because of the way it handles contacts), Box2D NDK
> stayed fast up to the limit of balls the demo supported (46) the only thing
> that dropped a little was FPS.
> So definately worth using if you want a game with real physics.
>
> Anyway, have fun with it. Let me know if you have any success stories or
> find something cool :)
> Lots of possibilities with a proper physics engine.
>
> On Mon, Jul 6, 2009 at 11:03 PM, nEx.Software
> <email.nex.softw...@gmail.com>wrote:

Tuan.B

unread,
Jul 22, 2009, 10:32:30 AM7/22/09
to android-ndk
Hi,

I'm trying to have fun with the ndk lib sent by Aki. But when I tried
to call CreateBox2 the application crashed.
Createbox2 creates a dynamic body.

Also I'm not able to recompile the lib because I did not succes to
install the NDK tool yet.

If anybody can help it could be great. I reached so many difficulties
to install correctly make and cygwin in windowsXP.

A clear tutorial will be winderful :)

Thanks a lot.

On 7 juil, 04:27, Aki <akxuc...@gmail.com> wrote:
> Hi all
> I made NDK box 2d test apk.http://code.google.com/p/akjava-android-project/downloads/list

Aki

unread,
Jul 22, 2009, 5:24:20 PM7/22/09
to android-ndk
hi,
you means apps/box2dtest/project in zip file dont work?
I think it work without ndk.

Tuan.B

unread,
Jul 24, 2009, 7:02:46 AM7/24/09
to android-ndk
Aki,

Yes when I tried to compile your sources and calling createBox2, the
application crashed.

Each time I tries to create a dynamic box, the application crashed.

Do you know how can i fix it?

Thanks a lot.

Aki

unread,
Jul 24, 2009, 9:35:33 AM7/24/09
to android-ndk
Tuan

Unfortunatelly I have no idea about that.

I reccoment you compile hello-jni which include NDK first.
because there are many topics about that and many exprets will answer
your problem.

This page written in Japanese,but pictures will help setup to cygwin.
http://d.hatena.ne.jp/bs-android/20090707/1246952991
And you can learn how to do in android-ndk group.

thanks.

Makoto

unread,
Jul 27, 2009, 6:49:51 PM7/27/09
to android-ndk
Hi, Aki san.

I also tried to build your AndroidBox2dTest, but Eclipse project was
showing the following error message.

Description Resource Path Location Type
Conversion to Dalvik format failed with error 1 AndroidBox2dTest
Unknown Android ADT Problem
Project 'AndroidBox2dTest' is missing required Java project:
'JBox2DRev' AndroidBox2dTest Build path Build Path Problem
The project cannot be built until build path errors are resolved
AndroidBox2dTest Unknown Java Problem

The below is how I compiled c libraries. Seems the compilation went
okay. Let me know if there are anything obvious I did wrong.

$ echo $ANDROID_NDK_ROOT
/Applications/android-ndk-1.5_r1
$ cd $ANDROID_NDK_ROOT
$ make APP=hello-jni
Android NDK: Building for application 'hello-jni'
Install : libhello-jni.so => apps/hello-jni/project/libs/
armeabi

$ cd ~/src/ndkbox2dtest20090707
$ cp * $ANDROID_NDK_ROOT
$ cd $ANDROID_NDK_ROOT
$ make APP=box2dtest
Android NDK: Building for application 'box2dtest'
Compile++ thumb: box2dtest <= sources/box2dtest/box2dtest.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Common/b2Math.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Common/b2Settings.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Common/b2StackAllocator.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Common/b2BlockAllocator.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Contacts/b2CircleContact.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Contacts/b2PolyContact.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Contacts/b2Contact.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Contacts/b2EdgeAndCircleContact.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Contacts/b2PolyAndCircleContact.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Contacts/b2PolyAndEdgeContact.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Contacts/b2ContactSolver.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/b2Island.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/b2Body.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/b2Fixture.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/b2ContactManager.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/b2WorldCallbacks.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/b2EdgeChain.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Controllers/b2GravityController.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Controllers/b2ConstantForceController.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Controllers/b2BuoyancyController.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Controllers/b2Controller.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Controllers/b2TensorDampingController.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Controllers/b2ConstantAccelController.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/b2World.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2Joint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2GearJoint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2PrismaticJoint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2MouseJoint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2RevoluteJoint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2FixedJoint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2DistanceJoint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2LineJoint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Dynamics/Joints/b2PulleyJoint.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2DynamicTree.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2CollideEdge.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2BroadPhase.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2TimeOfImpact.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2Collision.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2Distance.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2CollidePoly.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2CollideCircle.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/Shapes/b2Shape.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/Shapes/b2PolygonShape.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/Shapes/b2CircleShape.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/Shapes/b2EdgeShape.cpp
Compile++ thumb: box2dtest <= sources/box2dtest/box2d-trunk-27062009/
Collision/b2PairManager.cpp
SharedLibrary : libbox2dtest.so
Install : libbox2dtest.so => apps/box2dtest/project/libs/
armeabi


On Jul 24, 2:35 pm, Aki <akxuc...@gmail.com> wrote:
> Tuan
>
> Unfortunatelly I have no idea about that.
>
> I reccoment you compile hello-jni which include NDK first.
> because there are many topics about that and many exprets will answer
> your problem.
>
> This page written in Japanese,but pictures will help setup to cygwin.http://d.hatena.ne.jp/bs-android/20090707/1246952991

Aki

unread,
Jul 28, 2009, 1:24:17 AM7/28/09
to android-ndk
hi makoto
making lib with NDK seems fine.

My Project need JBox2D for demo.
Remove JBox2DRev from Build path,
and remove all source code using jbox2d.
> > > > > > > > or C++ (or Box2D)...
>
> もっと読む »

Makoto

unread,
Jul 28, 2009, 5:32:26 PM7/28/09
to android-ndk
Hi, Aki san.

Thank you very much for your guidance. I literally commented out
anything related to JBox2d and seems working fine.

For anyone interested in what I did, here is the diff file
http://gist.github.com/157677

I tried to read the source code so that I can try to port other
library I am interested in porting.

I looked at your source and seems it's pretty similar to an
instruction at http://davanum.wordpress.com/2007/12/09/android-invoke-jni-based-methods-bridging-cc-and-java/

Only thing not mentioned at the instruction above would be to create
Android.mk and specify c/cpp files to include, which is also specified
at (
http://developer.android.com/sdk/ndk/1.5_r1/index.html)

Apart from these two instructions, did you do anything extra to port C/
C++ library for NDK use? Let me know if you have any tips porting C/C+
+ libraries via NDK in general.

If anyone also knows other documents/blogs/instructions related to
porting third party C/C++ library into Android via NDK, please let me
know.

Thanks.

Makoto
> ...
>
> read more »

Aki

unread,
Jul 29, 2009, 2:03:59 AM7/29/09
to android-ndk
Thanks for your effort.

My c++ codes come from Dannys's work which in this topic.
Without his help I couldnt make this.
So sadly I'm not familiar with that.
I wrote C++ codes with TextEditor.

Doug's Box2d port seems good.
http://groups.google.com/group/android-ndk/browse_thread/thread/ecfe7dd4ce981c83

Next time i'll try that.

thanks

Makoto

unread,
Jul 30, 2009, 6:58:31 PM7/30/09
to android-ndk
Hi.
Thank you for your advice again.
I am trying to port a library called zinnia(http://
zinnia.sourceforge.net), which is a hand writing recognition engine.
When I followed same way as Box2D port, It failed to read cstdio at
zinnia.h and iostream at example.cpp, just like Danny faced when doing
Box2D port.

$ make APP=zinnia
Android NDK: Building for application 'zinnia'
Compile++ thumb: zinnia <= sources/zinnia/example.cpp
sources/zinnia/example.cpp:1:20: warning: iostream: No such file or
directory
In file included from sources/zinnia/example.cpp:2:
sources/zinnia/zinnia-0.05/zinnia.h:13:18: warning: cstdio: No such
file or directory
In file included from sources/zinnia/example.cpp:2:
sources/zinnia/zinnia-0.05/zinnia.h:51: error: 'size_t' has not been
declared
sources/zinnia/zinnia-0.05/zinnia.h:53: error: 'size_t' has not been
declared
sources/zinnia/zinnia-0.05/zinnia.h:54: error: 'size_t' has not been
declared

I changed the header like below.

-#include <iostream>
+#include <iostream.h>

-#include <cstdio>
// changed from cstdio to stdio
+#include <stdio.h>

Now it fixed for stdio related errors, but now causing different error
due to not being able to read iostream.

$ sh build/host-setup.sh
Detecting host toolchain.

CC : compiler check ok (gcc)
LD : linker check ok (gcc)
CXX : C++ compiler check ok (g++)
Generate : out/host/config.mk
Toolchain : Checking for arm-eabi-4.2.1 prebuilt binaries

Host setup complete. Please read docs/OVERVIEW.TXT if you don't know
what to do.

$ make APP=zinnia
Android NDK: Building for application 'zinnia'
Compile++ thumb: zinnia <= sources/zinnia/example.cpp
sources/zinnia/example.cpp:3:22: warning: iostream.h: No such file
or directory
sources/zinnia/example.cpp: In function 'int main(int, char**)':
sources/zinnia/example.cpp:9: error: 'cerr' is not a member of 'std'
sources/zinnia/example.cpp:9: error: 'endl' is not a member of 'std'
sources/zinnia/example.cpp:39: error: 'cerr' is not a member of
'std'
sources/zinnia/example.cpp:39: error: 'endl' is not a member of
'std'
sources/zinnia/example.cpp:43: error: 'cout' is not a member of
'std'

Can anyone see if I am missing anything else to let "make" command to
read iostream?

The below is how I layed out files

$ ls */zinnia
apps/zinnia:
Application.mk

sources/zinnia:
Android.mk example.cpp zinnia-0.05/

$ tail sources/zinnia/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := zinnia
LOCAL_SRC_FILES := example.cpp \
zinnia-0.05/zinnia.cpp


$ head sources/zinnia/example.cpp
#include <iostream.h>
#include "zinnia-0.05/zinnia.h"

int main(int argc, char **argv) {
zinnia::Recognizer *recognizer = zinnia::Recognizer::create();
if (!recognizer->open("/usr/local/lib/zinnia/model/tomoe/
handwriting-ja.model")) {
std::cerr << recognizer->what() << std::endl;
return -1;
}


$ head -15 sources/zinnia/zinnia-0.05/zinnia.h
//
//...
#ifndef ZINNIA_H_
#define ZINNIA_H_

/* C interface */
#ifdef __cplusplus
#include <stdio.h>
#else
#include <stdio.h>

Any advices are appreciated.
Thanks.

Makoto



On Jul 29, 7:03 am, Aki <akxuc...@gmail.com> wrote:
> Thanks for your effort.
>
> My c++ codes come from Dannys's work which in this topic.
> Without his help I couldnt make this.
> So sadly I'm not familiar with that.
> I wrote C++ codes with TextEditor.
>
> Doug's Box2d port seems good.http://groups.google.com/group/android-ndk/browse_thread/thread/ecfe7...
Reply all
Reply to author
Forward
0 new messages