== lua项目迁移到Android ==
=== 准备
* 下载cocos2d-x 3.5
* 下载sdk,ant
* 下载android-ndk-r9b(执行./genbinding.py使用)
=== 1,先创建出lua项目
{{{
cdcocos2d−x
./setup.py
sourceFILETOSAVESYSTEMVARIABLE
cocos new pupu -p com.lubangame.pupu.android -l lua -d pupu1
$ cd pupu1/pupu
}}}
=== 2,添加自己的cpp文件
- 将需要的cpp文件(夹)放到(推荐){{{/pupu1/pupu/frameworks/runtime-src/Classes }}}目录下。
- {{{$ cd cocos2d-x/tools/tolua }}}
根据模板格式编写xx.ini文件:
:: [xx] –文件名
:: prefix = xx –生成cpp文件前缀
:: target_namespace = xx –cpp文件的命名空间
:: cocos_headers = -I%(cocosdir)s/cocos –cpp文件需要引入文件头的路径
:: headers = %(cocosdir)s/pupu1/pupu/…/Request.h –cpp文件需要的文件头
:: classes = Request –生成的类
:: 其余勿需大改动(无特殊要求)如果有自定义命名空间:
{{{$cd cocos2d-x/tools/bindings-generator/targets/lua}}}
–在ns_map: 下面写上自己的命名空间- {{{$cd cocos2d-x/tools/tolua}}}
–编辑genbindings.py,在cmd_args={….}中添加自己的xx.ini文件 - 执行./genbingdings.py(自动绑定cpp–lua),生成对应cpp,hpp文件在
{{{cocos2d-x/cocos/scripting/lua-bindings/auto}}}下面的lua_xx_auto.cpp,lua_xx_auto.hpp - 复制两份文件到Classes目录下。编写proj.android/../jni下的Android.mk文件,将这个cpp文件编写进去。
- {{{$cd cocos2d-x/…./Classes}}},编写AppDelegate.cpp,在{{{lua_State* L = engine->getLuaStack()->getLuaState();}}}后面注册自己的cpp代码。注册函数在lua_xx_auto.hpp里面。
=== 3.关于Android.mk的通配写法:
{{{
遍历目录及子目录的函数
define walk
(wildcard
(1))
(foreache,
(wildcard
(1)/∗),
(call walk, $(e)))
endef
遍历Classes目录
ALLFILES = (callwalk, (LOCAL_PATH)/../../Classes)
FILE_LIST := hellolua/main.cpp
从所有文件中提取出所有.cpp文件
FILE_LIST +=
(filter
(ALLFILES))
FILE_LIST +=
(filter
(ALLFILES))
FILE_LIST +=
(filter
(ALLFILES))
LOCAL_SRC_FILES := (FILELIST: (LOCAL_PATH)/%=%)
LOCAL_C_INCLUDES := (LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES +=(shell ls -FR (LOCAL_C_INCLUDES) | grep(LOCAL_PATH)/)
LOCAL_C_INCLUDES :=(LOCAL_C_INCLUDES:
(LOCALPATH)/
(LOCAL_PATH)/%) \
(LOCALPATH)/../../../cocos2d−x/external
(LOCAL_PATH)/../../../cocos2d-x/tools/simulator/libsimulator/lib
}}}
=== 4,编译项目
* {{{$ cocos run -p android -j 16}}}
* note:在执行过程中出现的问题:
:: LuaBasicConversions.h是模板文件,里面的luaval_to_object()方法需要四个参数。在lua_xx_auto.cpp中有地方调用这个方法的时候会传入五个参数引发错误。 自己处理(将最后一个参数干掉..)
end.