1、创建Cocos2dx工程
1.1、运用cocos程序
1.2、命名“项目名称”、并设定“项目语言”为C++
1.3、项目创建成功
2、VS2012进行window平台应用的编译调试
2.1、进入VS工程文件目录
E:\work\code\workspace_1\Cocos_0811\proj.win32
2.2、使用VS2012打开工程文件
Cocos_0811.sln
2.3、在VS2012中可以对工程进行修改、编译、调试,这里不再详述。
2.4、使用命令行编译:
编译:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\CL.exe /c
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\audio\include"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\external"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\external\chipmunk\include\chipmunk"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\extensions" /I..\Classes /I..
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\2d\..\..\cocos\editor-support"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\2d\..\..\cocos"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\2d\..\..\cocos\platform"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\2d\..\..\cocos\platform\desktop"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\2d\..\..\external\glfw3\include\win32"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\2d\..\..\external\win32-specific\gles\include\OGLES"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\2d\..\..\external\freetype2\include\win32\freetype2"
/I"C:\Cocos\frameworks\cocos2d-x-3.6\cocos\2d\..\..\external\freetype2\include\win32\\"
/Zi /nologo /W3 /WX- /MP /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _WINDOWS /D _USE_MATH_DEFINES
/D GL_GLEXT_PROTOTYPES /D CC_ENABLE_CHIPMUNK_INTEGRATION=1 /D _CRT_SECURE_NO_WARNINGS
/D _SCL_SECURE_NO_WARNINGS /D _VARIADIC_MAX=10 /D _UNICODE /D UNICODE /Gm- /EHsc /MD
/GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Release.win32\\"
/Fd"Release.win32\vc110.pdb" /Gd /TP /wd4267 /wd4251 /wd4244 /analyze-
/errorReport:prompt ..\Classes\AppDelegate.cpp ..\Classes\HelloWorldScene.cpp main.cpp
链接:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\link.exe /ERRORREPORT:PROMPT
/OUT:"E:\work\code\cocos2d-x_workspace\CocosProject11\proj.win32\Release.win32\CocosProject11.exe"
/INCREMENTAL:NO /NOLOGO
/LIBPATH:"E:\work\code\cocos2d-x_workspace\CocosProject11\proj.win32\Release.win32\\"
/LIBPATH:"E:\work\code\cocos2d-x_workspace\CocosProject11\proj.win32\Release.win32\\"
libcurl_imp.lib websockets.lib opengl32.lib glew32.lib libzlib.lib libpng.lib libjpeg.lib
libtiff.lib libwebp.lib libiconv.lib glfw3.lib freetype250.lib winmm.lib ws2_32.lib
libchipmunk.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG
/PDB:"E:\work\code\cocos2d-x_workspace\CocosProject11\proj.win32\Release.win32\CocosProject11.pdb"
/SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT
/IMPLIB:"E:\work\code\cocos2d-x_workspace\CocosProject11\proj.win32\Release.win32\CocosProject11.lib"
/MACHINE:X86 /SAFESEH Release.win32\game.res
2.5、window平台的main文件
在E:\work\code\workspace_1\Cocos_0811\proj.win32目录中存在.cpp文件和.h文件。main.cpp和main.h
#include "main.h"
#include "AppDelegate.h"
#include "cocos2d.h"
USING_NS_CC;
#if _MSC_VER > 1700
#pragma comment(lib,"libcocos2d_2013.lib")
#pragma comment(lib,"libbox2d_2013.lib")
#pragma comment(lib,"libSpine_2013.lib")
#else #pragma comment(lib,"libcocos2d_2012.lib")
#pragma comment(lib,"libbox2d_2012.lib")
#pragma comment(lib,"libSpine_2012.lib")
#endif
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine); // create the application instance
AppDelegate app;
return Application::getInstance()->run();
}
3、eclipse进行编译调试
3.1、android环境搭建
可以参见《Android NDK环境搭建》 http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html
遵照一下步骤:
- 安装eclipse
- 安装ADT插件
- 安装CDT插件
- 安装android SDK
- 安装android NDK
- 通过Android Virtual Device Manager工具创建android模拟器
- 在eclipse中设置ndk的路径
window—>Preferences—>Android—>NDK—>NDK Location中设置android ndk的安装路径
例如:E:\RUN\android-ndk-r10d
以确保eclipse能找到ndk。
3.2、对Cocos0811工程进行编译调试
3.2.1、进入Cocos0811工程android平台工作目录。
E:\work\code\workspace_1\Cocos_0811\proj.android
3.2.2、启动eclipse程序,导入android工程
File—>Import—>Android—>Existing Android Code Into Workspace 将工程导入
3.2.3、进行Add Native Support设置
在工程上右键点击Android Tools—>Add Native Support...,然后给我们的.so文件取个名字,例如:Cocos0811
3.2.4、设置ndk的debug模式
在工程上右键点击Properties—>C/C++ Build—>Manage Configurations—>Debug(选择)—>Set Active—>OK
3.2.5、进行编译
在工程上右键点击Run as—>Android Application 进行编译并在模拟器中运行。
3.2.6、进行java代码调试
在java代码中设置断点,如: E:\work\code\workspace_1\Cocos_0811\proj.android\src\org\cocos2dx\lib目录下Cocos2dxActivity.java文件的onCreate函数的某个位置中设置断点。
@Override protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
CocosPlayClient.init(this, false);
onLoadNativeLibraries();
sContext = this;
this.mHandler = new Cocos2dxHandler(this);
Cocos2dxHelper.init(this);
this.mGLContextAttrs = getGLContextAttrs();
this.init();
在工程上右键点击Run as—>Android Application,在设置断点出停下来。
3.2.7、进行C++代码的调试
在c++代码中设置断点,如: E:\work\code\workspace_1\Cocos_0811\Classes\AppDelegate.cpp中applicationDidFinishLaunching函数设置断点。
bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLViewImpl::createWithRect("Cocos_0811", Rect(0, 0, 960, 640));
director->setOpenGLView(glview);
}
director->getOpenGLView()->setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL);
// turn on display FPS
director->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don't call this
director->setAnimationInterval(1.0 / 60);
FileUtils::getInstance()->addSearchPath("res");
// create a scene. it's an autorelease object
auto scene = HelloWorld::createScene();
// run
director->runWithScene(scene);
return true;
}
4、错误提示:
4.1、minSdkVersion警告提示:
Android NDK: WARNING:
APP_PLATFORM android-18 is larger than android:minSdkVersion 9 in ./AndroidMan
ifest.xml
解决办法:将AndroidManifest.xml文件中的
<uses-sdk android:minSdkVersion="9"/>
改为
<uses-sdk android:minSdkVersion="18"/>
4.2、prebuilt-mk错误提示:
Android NDK: jni/Android.mk:
Cannot find module with tag './prebuilt-mk' in import path
解决办法: 在Android.mk文件中增加以下内容:
$(call import-add-path, C:\Cocos\frameworks/cocos2d-x-3.6)
$(call import-add-path, C:\Cocos\frameworks/cocos2d-x-3.6/cocos)
$(call import-add-path, C:\Cocos\frameworks/cocos2d-x-3.6/external)
4.3、Unable to find a compatible ABI问题:
[2015-09-10 15:02:33 - CocosProject_0910] Unable to find a compatible ABI
[2015-09-10 15:02:33 - CocosProject_0910] ABI's supported by the application: armeabi
[2015-09-10 15:02:33 - CocosProject_0910] ABI's supported by the device: x86, armeabi-v7a
解决方法:
在Application.mk文件中增加如下代码:
APP_ABI := armeabi armeabi-v7a
4.4、模拟器的问题
错误提示:
Cannot attach to lwp 2389: Operation not permitted
问题解决: 由于存在上面的权限问题,使用Genymotion模拟器运行cocos2dx程序时,会出现错误提示。解决办法是需要使用android sdk自带的模拟器。
5、备注
5.1、配置后的Application.mk文件
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic
APP_ABI := armeabi armeabi-v7a
ifeq ($(NDK_DEBUG),1)
APP_CPPFLAGS += -DCOCOS2D_DEBUG=1
APP_OPTIM := debug
else
APP_CPPFLAGS += -DNDEBUG
APP_OPTIM := release
endif
5.2、配置后的Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_STATIC_LIBRARIES := cocos2dx_static
include $(BUILD_SHARED_LIBRARY)
$(call import-add-path, C:\Cocos\frameworks/cocos2d-x-3.6)
$(call import-add-path, C:\Cocos\frameworks/cocos2d-x-3.6/cocos)
$(call import-add-path, C:\Cocos\frameworks/cocos2d-x-3.6/external)
$(call import-module,./prebuilt-mk)