在Android NDK中编译和使用Box2D

本文使用Windows+NDKr8编译,编译前请自行配置好相关环境变量

Box2D是一个在手机游戏开发中使用的物理引擎,本文使用NDK将Box2D移植到Android

首先去Box2D官网下载最新版的源码,目前版本是2.2.1,下载地址是:Box2D_v2.2.1.zip

解压源码,删除源码目录中除Box2D以外的其它目录,将HelloWorld目录中的HelloWorld.cpp复制到源码根目录改名为Test.cpp

新建一个工程目录,命名为box2d-ndk,在此目录中新建目录jni,将上面整理好的Box2D源码全部移动到jni目录

在jni目录添加两个文件:

Android.mk,内容如下,编译静态库和动态库,还有一个测试文件:

复制代码
LOCAL_PATH:= $(call my-dir)

LS_CPP=$(subst $(1)/,,$(wildcard $(1)/$(2)/*.cpp))
BOX2D_CPP:= $(call LS_CPP,$(LOCAL_PATH),Box2D/Collision) \
            $(call LS_CPP,$(LOCAL_PATH),Box2D/Collision/Shapes) \
            $(call LS_CPP,$(LOCAL_PATH),Box2D/Common) \
            $(call LS_CPP,$(LOCAL_PATH),Box2D/Dynamics) \
            $(call LS_CPP,$(LOCAL_PATH),Box2D/Dynamics/Contacts) \
            $(call LS_CPP,$(LOCAL_PATH),Box2D/Dynamics/Joints) \
            $(call LS_CPP,$(LOCAL_PATH),Box2D/Rope)

include $(CLEAR_VARS)
LOCAL_MODULE:= box2d_static
LOCAL_SRC_FILES:= $(BOX2D_CPP)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/Box2D
LOCAL_C_INCLUDES := $(LOCAL_EXPORT_C_INCLUDES)
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= box2d
LOCAL_SRC_FILES:= $(BOX2D_CPP)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/Box2D
LOCAL_C_INCLUDES := $(LOCAL_EXPORT_C_INCLUDES)
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := Box2DTest
LOCAL_SRC_FILES := Test.cpp
#LOCAL_C_INCLUDES += $(LOCAL_PATH)/Box2D 
LOCAL_STATIC_LIBRARIES := box2d_static
include $(BUILD_EXECUTABLE)
复制代码

 

Application.mk,内容如下:

APP_PLATFORM := android-9
APP_STL      := gnustl_static
APP_CPPFLAGS := -fexceptions

 

打开命令行窗口,进入box2d目录,运行ndk-build,等待片刻,就会在libs/armeabi目录下生成libbox2d.so和Box2DTest两个文件,其中Box2DTest是arm二进制文件,可以使用adb push到手机中添加权限后直接运行,如果没有出错说明Box2D编译没有问题

使用时直接代码中 #include <Box2d/Box2D.h>,然后Android.mk中添加 LOCAL_STATIC_LIBRARIES := box2d_static 即可

修改好的源码可在此下载: https://github.com/mcxiaoke/box2d-ndk ,直接ndk-build即可编译

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值