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)