在开发cocos-2dx项目时,通常要移植到android环境里面运,移植方法是:
先设置NDK_ROOT环境变量,可以使用sudo权限在/etc/profile文件里添加该变量,也可以在~/.bashrc里面添加,这个变量是安装的ndk目录路径;
NDK设置: http://blog.youkuaiyun.com/tenning/article/details/10042559
把在VS下面开发编译的cocos-2dx项目的proj-android拷贝到linux平台下的指定目录下;
同时也要将cocod2dx文件夹拷贝到linux下的指定目录;
同样的也要将VS项目下的Classes文件夹拷贝到androis项目的jni文件夹下;
之后执行proj-android目录下的build_native.sh文件:build_native.sh
在其中会遇到一些问题,解决问题的方法是修改以下文件:
/proj-android/build_native
/proj-android/jni/....cpp/main.cpp
/proj-android/jni/Android.mk
/proj-android/build_native要修改的内容:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# ... use paths relative to current directory
COCOS2DX_ROOT="$DIR/.."#要修改的内容,根据拷贝过来的cocos2dx目录来设置
APP_ROOT="$DIR/../"#同样的根据目录来修改</span>
APP_ANDROID_ROOT="$DIR"
#include "../Classes/AppDelegate.h"//修改为可找到的路径
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>
#include "../Classes/XXXScene.h"//修改为可找到的路径
/proj-android/jni/Android.mk要修改的内容( 同样是改变为可找到的路径):
LOCAL_SRC_FILES := hellocpp/main.cpp \
./Classes/AppDelegate.cpp \
./Classes/XXXScene.cpp \
设置完上面的文件基本上可以编译了,但是有时候ndk版本不一样会出现
proj.android/../../../cocos2dx/platform/android/CCCommon.cpp:44:72: error: format not a string literal and no format arguments [-Werror=format-security]
错误,解决的方法是忽略它,也就是在jni/Application.mk文件里面增加:
APP_CFLAGS += -Wno-error=format-security
现在执行:./build_native.sh 编译完成
..............
[armeabi] Compile++ thumb: cocos2dx_static <= CCIMEDispatcher.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTextFieldTTF.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTexture2D.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTextureAtlas.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTextureCache.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTexturePVR.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCParallaxNode.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTMXLayer.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTMXObjectGroup.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTMXTiledMap.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTMXXMLParser.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTileMapAtlas.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTouchDispatcher.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTouchHandler.cpp
[armeabi] Compile++ thumb: cocos2dx_static <= CCTouch.cpp
[armeabi] StaticLibrary : libcocos2d.a
[armeabi] SharedLibrary : libXXXcpp.so
[armeabi] Install : libXXXcpp.so => libs/armeabi/libXXXcpp.so
如果把项目拷到其他linux系统下重新编译,除了修改上面的文件以外,还要把之前编译的obj/local/下面的东西删除,之后执行:
./build_native.sh 才能编译通过。
完成上面的步骤以后,并不能直接在android平台上运行,要想在android上运行还需要进行如下操作:
把在linux编译好的android项目导入到eclipse中;
导入以后出现各种错误,如:org.cocos2dx.lib无法找到,解决方法是把coco2dx中的该包拷贝到项目下。
包的路径在:\cocos2dx\platform\android\java\src\org\cocos2dx\lib
现在运行项目,能安装但是运行不了,出现如下错误:
Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 28881 (Thread-5409)
原因是资源文件没有添加到项目,在此将资源文件添加到android项目下的assets文件夹下就能运行了。
本文介绍了如何在Linux系统中将cocos2dx项目移植到Android平台。首先设置NDK_ROOT环境变量,然后将Windows开发的项目相关文件拷贝到Linux指定目录,接着修改build_native.sh及相关文件以解决编译错误。在编译完成后,通过Eclipse导入项目并解决导入后的依赖问题。最后,将资源文件添加到Android项目的assets文件夹以解决运行时错误。
806

被折叠的 条评论
为什么被折叠?



