cocos2d-x游戏从win32平台移植Android平台

跨平台移植

cocos2d-x游戏从win32平台移植Android平台


 

1. Android平台搭建

操作系统:Win7   32

测试手机:联想A880(android 4.3)

需要软件如下:

1.python2.7.5

python环境变量的增加




1.点击开始,右键单击计算机,选择属性

2.选择高级系统设置




3.在高级系统环境变量里面设置路径path,如果存在则在路面最后面加;+你的python.exe的路径即可






使用python脚本创建cocos2dx项目

点击开始,输入cmd回车。

首先用cd命令进入你的cocos2dx项目下\cocos2d-x-2.1.5\cocos2d-x-2.1.5\tools\project-creator目录。

输入pythoncreate_project.py -project PROJECT_NAME -package PACKAGE_NAME -languagePROGRAMING_LANGUAGE命令回车即可,其中PROJECT_NAME的项目名称,PACKAGE_NAMEAndroid项目包名,PROGRAMING_LANGUAGE是语言(C++一般填写cpp即可)。






查看、运行创建的项目

项目存在相对路径cocos2d-x-2.1.5\cocos2d-x-2.1.5\projects下。选择win32项目,点击navalbattle.sln即可

F5运行项目,成功。界面如下图。








 

2.cocos2d-x-2.2.3版本  安装简单,不再啰嗦

3.jdk-8u5-windows-i586

(一共需要新建三个环境变量:

1.变量名:JAVA_HOME   变量值:C:\Program Files (x86)\Java\jdk1.6.0_10(变量值不同的电脑不同,需要看你自己jdk的安装目录就能够找到,也就是把你自己的jdk路径复制下来就可以了。)

2.变量名:Path   变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(这个可以直接复制到变量值中,这个是通用的。)

3.变量名:Calsspath  变量值:%JAVA_HOME%\lib;(这个一样也可以直接复制到变量值中,不解释,你懂的。)

三个环境变量增加好了就可以了,接下来你就可以打开运行窗口运行一个java程序测试一下,如果不行的话可能就是这三个环境变量哪里写错了。这里我就不演示了。)

方法/步骤

1.    安装JDK 选择安装目录 安装过程中会出现两次安装提示 。第一次是安装 jdk ,第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。(不能都安装在java文件夹的根目录下,jdkjre安装在同一文件夹会出错)

如下图所示





2.    1:安装jdk 随意选择目录 只需把默认安装目录 \java 之前的目录修改即可

2:安装jre→更改→ \java之前目录和安装 jdk 目录相同即可

注:若无安装目录要求,可全默认设置。无需做任何修改,两次均直接点下一步。








3.     安装完JDK后配置环境变量  计算机→属性→高级系统设置→高级→环境变量




4.    系统变量→新建 JAVA_HOME 变量。

变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0)

5.    系统变量→寻找 Path 变量→编辑

在变量值最后输入%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)




6.    系统变量→新建 CLASSPATH 变量

变量值填写  .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)

系统变量配置完毕


7.    7

检验是否配置成功 运行cmd 输入 java -version java  -version 之间有空格)

若如图所示 显示版本信息 则说明安装和配置成功。



 

4.2013-10-24_adt-bundle-windows-x86-20130917(含有SDKeclipse)

新建环境变量:ANDROID_SDK 值为:G:\AndroidSDK\platforms;G:\Android SDK\tools(这个是SDK存放的位置)

在系统PATH环境变量种加入:%ANDROID_SDK%  看好了,看下图,是系统变量





5.android-ndk-r9d(不需要cygwin

 

 

2android平台工程创建

1android SDK+NDK安装

1)安装java jdk(如果已经安装了,可以不用此步骤)

进入:http://www.oracle.com/technetwork/java/javase/downloads/index.html 或者直接点击下载。如下图





选择JDK DOWNLOAD(android 开发无需JRE) 





如果是32windows 7选择Windows x86 ,64windows 7选择Windows x64

安装后,配置环境变量:

新建环境变量:JAVA_HOME值为:D:\Program Files\Java\jdk1.7.0

新建环境变量:CLASSPATH 值为:.;%JAVA_HOME%\lib;(注意:点号表示当前目录,不能省略)

在系统变量Path的值的前面加入以下内容:%JAVA_HOME%\bin;(注意:这里的分号不能省略)到这里,JDK安装完毕。 

单击开始”—>“运行”—>输入:cmd命令,在CMD窗口中输入:java -version  

出现如下界面,就表示安装成功:



2)下载eclipse

进入以下页面:

http://www.eclipse.org/downloads/packages/



选择windows 32-bit 下载,解压后直接打开即可。

3)安装android sdkNDK

进入以下页面http://developer.android.com/sdk/index.html




或直接复制此地址下载:http://dl.google.com/android/installer_r18-windows.exe

打开installer_r18-windows.exe

安装时会检查jdk安装情况,如果没安装成功会失败的。

然后运行SDKManager.exe 进行更新sdk(建议根据需要下载对应版本的sdk)。我们用的是r9d版本。




点解installpackages。完成后,为了方便,也配置下环境变量

新建环境变量:ANDROID_SDK值为:G:\Android SDK\platforms;G:\Android SDK\tools(这个是SDK存放的位置)

在系统PATH环境变量种加入:%ANDROID_SDK%

单击开始”—>“运行”—>输入:cmd命令,在CMD窗口中输入:adb -h



进入http://developer.android.com/tools/sdk/ndk/index.html 点击直接下载

下载解压到E:\android-ndk-r8



AndroidNDK包含builddocssamplessourcesGNUmakefilendk-buildndk-gdbreadme等内容。

2Cygwin安装(ndk r8后不需要此步了)

由于NDK开发大都涉及到C/C++GCC环境下编译、运行,所以在Windows环境下,需要模拟Linux模拟编译环境,下载地址:

http://www.cygwin.com/

下载后是个setup.exe文件,使用过程如下:

第一步:运行setup程序,第一步图略,直接点击Next进入下一步。

第二步:选择安装方式,第一次可以采用Direct Connection在线下载安装,如有现成的离线包,可以选择离线安装(Install from Local Directory)。

第三步:选择安装目录,比如C:\Cygwin,注意此目录是指Cygwin最终的安装目录,不是下载文件暂存目录。




第四步:设置本地包暂存路径

暂存目录默认是放到setup.exe的同级目录下,下载后名字类似ftp%3a%2f%2fcygwin.mirrors.pair.com%2f这样格式。



第五步:设置网络连接方式



第六步:选择下载站点地址

起初尝试几个看哪个速度快就用哪个地址(如果感觉不快就点取消,再次来过)。



第七步:等待加载安装项载入,选择安装项

我们编译NDK,在默认设置下,只需选择Devel(点击列表中Devel,将后面的Default改为Install,图中箭头所示),其它均为默认状态。(其实NDK需要的不多,主要autoconf2.1automake1.10binutilsgcc-coregcc- , g++gcc4-coregcc4-g++gdbpcrepcre-develgawkmake)



第八步:等待下载完成

下载完成时间决定于你选择的安装包数量及网络连接速度,比如按照本文默认的选择方式,可能需要2-3个小时(视网速而定),下载后压缩包约1.2G,下载完成后会自动安装到上文设置的安装目录。




提醒:第一次下载完成后,最好把下载的包目录做个备份,下次安装同样的环境可以直接使用离线安装方式(第二步中选择本地安装)。

运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令,会打印出当前cygwin的版本和运行状态,如果statusok的话,则cygwin运行正常。

然后依次输入gcc –vg++  --versionmake –versiongdb –version进行测试,(注意空格和-)如果都打印出版本信息和一些描述信息,这说明cygwin安装成功了。

3安装ADT和配置Cygwin

安装android 开发插件

    (1)打开Eclipse, 在菜单栏上选择help->Install New SoftWare 出现如下界面:



   点击 Add按钮,出现如下界面



    

输入网址https://dl-ssl.google.com/android/eclipse/   (如果出错,请将https改成http)

    名称: Android (这里可以自定义)

  点击OK,将出现如下界面



全部选中。

点击 Next按钮,出现如下界面:




点击 Next 按钮,出现如下界面 :




选择 I accept theterms of the license agreements   点击Next,进入安装插件界面



安装完成后,出现如下界面



点击Yes按钮,重启Eclipse

点击菜单window->preferences,进入如下界面:



选择你的android SDK解压后的目录(ADT 18 默认会扫描你的电脑,找到并配置好SDK位置)

如果没安装好SDK的,也可以在eclipse中选择菜单 window->Android sdk and avdmanager 出现如下界面:





也可以选择你需要的版本的sdk

新建AVD(androidvitural device)和上面一样,进入android sdk and avd manager,选中Vitural Devices 在点击New按钮




点击New按钮后,进入如下界面:



名称可以随便取,target选择你需要的SDK版本,SD卡大小自定义,点击 Create AVD便成功创建。

配置cygwin

在命令行中进入cygwin目录,并执行cygwin.bat,如果你不是用Administrator账号登录的系统,那么会在cygwin\home\文件夹中生成一个以你的登录名命名的新的文件夹。

修改新生成文件夹中的“.bash_profile”文件,用UEeditplus等文本编辑器打开,在最后增加:(e/android-ndk-r8-windows/android-ndk-r8是安装ndk的路径)

NDK_ROOT=/cygdrive/e/android-ndk-r8-windows/android-ndk-r8

exportNDK_ROOT

然后保存关闭。

 

3. Windows平台开发步骤:

 

  开发语言:C++

 环境: Vs2012Vs2013.最好搭配Vs2012+ win7; Vs2013+win8

  vc助手插件VA_X_Setup1827

cocos2d-x-2.2.3版本

Vs2012Vs2013,安装比较简单,不再啰嗦。新建cocos2d工程参照,python命令方式进行。


如果在vs的debug下调试出现以下错误:




LINK1123: failure during conversion to COFF: fileinvalid or corrupt

解决办法如下:

 

VS2010,每运行一个简单的程序总是报error LINK1123: failure during conversion to COFF: file invalid or corrupt的错误。

 

 

 

 


解决方法:

这个错误是因为采用incremental linking(增量式链接)导致的,可以通过禁止工程中incrementallinking的选项避免这个问题。具体操作:
Project(
项目)->Properties(属性)->Linker(连接器)->Gerneral(常规)->EnableIncremental Linking(启动增量链接),把Yes (/INCREMENTAL)改为No (/INCREMENTAL:NO)即可。



 

 

 

上述问题只有在debug版本下才会出现的,是因为release版本会默认关闭增量连接而debug版本默认是启动增量链接的。
incremental linking
是为了节省编译所用时间,加快编译速度。至于为什么会有问题,应该是VS工程的一个BUG


特别注意:

单独运行debug里边的exe文件,是不能运行的,需要把Resources文件夹里边的资源内容拷贝到Debug.win32目录之下,之后再单独运行debug里边的exe文件就可运行。










 

1) VS2012 Debug编译D:\programs\cocos2d-x-2.2.2\cocos2d-x-2.2.2目录下的cocos2d-win32.vc2012工程;

2) cocos2d库文件全部编译完成后,进入D:\programs\cocos2d-x-2.2.2\cocos2d-x-2.2.2\tools\project-creator目录下,命令行执行 python create_project.py projectPlay package com.xyz.play language cpp创建工程;

例如:

pythoncreate_project.py -project lei -package com.hck.lei -language cpp

工程名:lei

cd..

e:

cd cocos2d-x-2.2.3

cd tools

cd project-creator

 

3) 在目录D:\programs\cocos2d-x-2.2.2\cocos2d-x-2.2.2\projects下找到刚刚创建的工程Play,进入proj.win32目录,用VS2012编译Play.sln

4) 编译完成后,就可以在windows平台进行游戏的开发调试了,开发过程中,资源文件放到工程的Resources目录下,代码文件放到Classes目录下;此步在后边搭建Android平台时详细说明。

5) 游戏开发测试完成后,就可以进行Android平台的移植了。

4. Android DNK编译环境设置(配合5一起完成移植,内容有交叉,注意区分)

一是:python创建Android下的工程play

D:\programs\cocos2d-x-2.2.2\cocos2d-x-2.2.2\tools\project-creator目录下,命令行执行pythoncreate_project.py projectPlay package com.xyz.play language cpp创建工程;

二是:Android中导入play工程:

File--àNew---àProject-àAndroidProject from Existing Code




在接下的路径中根据实际情况输入:其中qin为已经建立的android工程名,注意最后的文件夹落在qin/proj.android




之后按下列方法配置环境:

步骤一、配置AndroidDNK编译环境  此步可忽略

 

运行eclipse,配置一下ndk路径就可以了 window->Preferences,如下图

环境搭建好了,下面写个测试程序验证一下

简单创意一个android工程,相当于helloworld,创建好后鼠标右键工程名字Android Tools->Add Native Support...这时你会发现工程多了一个jni目录

测试demo比较简单,实现android端与C++的相互调用

步骤二资源移植

 1.先将D:\cocos2d-x-2.2\cocos2d-x-2.2\cocos2dx\platform\android\java\src下的org目录拷贝到D:\cocos2d-x-2.2\cocos2d-x-2.2\projects\Helloworld\proj.android\src

 2.D:\cocos2d-x-2.2\cocos2d-x-2.2\projects\Helloworld\Classes下的全部C++文件拷贝到D:\cocos2d-x-2.2\cocos2d-x-2.2\projects\Helloworld\proj.android\jni\hellocpp

3.由于第二步转移了C++文件的路径,因此在D:\cocos2d-x-2.2\cocos2d-x-2.2\projects\Helloworld\proj.android\jni下的Android.mk 文件里也要指明这些C++文件的路径,要修改只有如下的项LOCAL_SRC_FILES 

LOCAL_SRC_FILES :=hellocpp/main.cpp \ hellocpp/AppDelegate.cpp \ hellocpp/HelloWorldScene.cpp 即将(AppDelegate.cpp HelloWorldScene.cpp)与main.cpp的相对路径改了。此步重点是把要添加的cpp文件手工加入,后边有实际说明。

4.将路径D:\cocos2d-x-2.2\cocos2d-x-2.2\projects\Helloworld\proj.android下的Android工程导入Ecllipse中 再将路径     D:\cocos2d-x-2.2\cocos2d-x-2.2\projects\Helloworld\Resources下的资源全部拷贝到Android工程的assets目录下 

步骤三、设置编译方式

1.右键移植的Android工程,选择properties,再选择Builders->New->program mian页面填入NDK编译路径和本工程路径,如下:(注意第二项Working Directory 要对应自己的Android工程名称) D:\cocos2d-x-2.2\cocos2d-x-2.2\android-ndk-r9\android-ndk-r9\ndk-build.cmd${workspace_loc:/HelloCpp} 

 2.Environment界面新建环境变量: 内容如下: NDK_MODULE_PATHD:\cocos2d-x-2.2\cocos2d-x-2.2;D:\cocos2d-x-2.2\cocos2d-x-2.2\cocos2dx\platform\third_party\android\prebuilt 

步骤四编译运行成功 (耗时会比较长,一般约20分钟)

步骤五、分辨率 

AppDelegate.cpp boolAppDelegate::applicationDidFinishLaunching() 方法里,加上

CCEGLView::sharedOpenGLView()->setDesignResolutionSize(576,324,kResolutionNoBorder);即可解决分辨率适配问题。

其中,576,324 是在win32设计游戏时采用的宽度和高度,大家改为自己所设置的宽高即可。kResolutionNoBorder是指在屏幕拉伸时采用的其中一种策略,保证拉伸后无边界,但是设计时界面的边缘部分可能在最后被遮盖。通过 "go to definition"操作找到如下的定义。以下即是全部的适配策略了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

enumResolutionPolicy

{

    // The entire application is visible in the specified area without trying to preserve the original aspect ratio.

    // Distortion can occur, and the application may appear stretched or compressed.

    kResolutionExactFit,

    // The entire application fills the specified area, without distortion but possibly with some cropping,

    // while maintaining the original aspect ratio of the application.

    kResolutionNoBorder,

    // The entire application is visible in the specified area without distortion while maintaining the original

    // aspect ratio of the application. Borders can appear on two sides of the application.

    kResolutionShowAll,

 

    kResolutionUnKnown,

};

 

 

5. Android平台移植步骤(配合4一起完成移植,内容有交叉,注意区分)

1) 配置ADT,打卡菜单Window->Preferences->Android->NDK,配置NDK LocationD:/programs/android-ndk-r9c

2) Import Existing Android codeintoworkspace, 选择D:\programs\cocos2d-x-2.2.2\cocos2d-x-2.2.2\cocos2dx\platform\android\java目录,导入工程libcocos2dx(不要选copy projects intoworkspace);

3) Import刚刚创建的工程Play,目录在D:\programs\cocos2d-x-2.2.2\cocos2d-x-2.2.2\projects\Play\proj.android(不要选copy projects into workspace)该工程默认引用libcocos2dx库,可以在Properties->Android里看到,如果选择了copy projectsinto workspace,路径改变后就会破坏cocos2dx所创建项目原本的依赖关系;

如果通过python create_project.py -project lei -package com.hck.lei -languagecpp命令创建Adroid工程,以上2)和3)就可忽略

4) 设置工程属性,选择Propertices->C/C++ BuildBuild command改为:D:/programs/android-ndk-r9c/ndk-build.cmd

5) 选择Propertices->C/C++Build->Environment,添加VariableNDK_MODULE_PATH,值为D:/Programs/cocos2d-x-2.2.2/cocos2d-x-2.2.2;D:/Programs/cocos2d-x-2.2.2/cocos2d-x-2.2.2/cocos2dx/platform/third_party/android/prebuilt

6) 修改jni/Android.mk,在$(call import-module,cocos2dx)之上添加红色的两行

$(callimport-add-path,D:/Programs/cocos2d-x-2.2.2/cocos2d-x-2.2.2)

$(callimport-add-path,D:/Programs/cocos2d-x-2.2.2/cocos2d-x-2.2.2/cocos2dx/platform/third_party/android/prebuilt)

$(callimport-module,cocos2dx)

7) 修改jni/Android.mk,在LOCAL_SRC_FILES中添加自己编写的源码文件;

LOCAL_SRC_FILES := hellocpp/main.cpp \

                  ../../Classes/AppDelegate.cpp \

                  ../../Classes/HelloWorldScene.cpp \

                   ../../Classes/SecondScene.cpp

LOCAL_C_INCLUDES :=$(LOCAL_PATH)/../../Classes
 

上边倒数第二句红色代码:../../Classes/SecondScene.cpp是自己手工添加的,要根据自己编写的程序实际情况添加。

8) 修改jni/Application.mk,最后面添加一行NDK_MODULE_PATH:=D:/Programs/cocos2d-x-2.2.2/cocos2d-x-2.2.2;D:/Programs/cocos2d-x-2.2.2/cocos2d-x-2.2.2/cocos2dx/platform/third_party/android/prebuilt

9) Resources里的资源文件全部复制到android工程的assets目录,没有assets目录,就创建一个;

10) ADT右上角Open Perspective选择C/C++,工具栏点Build,等待编译完成,时间比较长(15分钟左右);

11) 编译完成后Console提示

[armeabi]Install :libcocos2dcpp.so =>libs/armeabi/libcocos2dcpp.so

****Build Finished****

12) 连接Android设备,运行Play工程Run As AndroidApplication,等待安装完毕,Android平台移植完成。

 

总之,以上配置注意各路径必须指向正确,另Adroid.mk  Aplication.mk两文件要做修改:其中Aplication.mk文件最后一句红色代码也是NDK_MODULE_PATH环境变量设置的一种方式。

Adroid.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 \

                   ../../Classes/SecondScene.cpp

 

LOCAL_C_INCLUDES :$(LOCAL_PATH)/../../Classes

 

LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static

LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static

LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static

LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static

LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static

 

include$(BUILD_SHARED_LIBRARY)

$(call import-add-path,e:/cocos2d-x-2.2.3)

$(callimport-add-path,e:/cocos2d-x-2.2.3/cocos2dx/platform/third_party/android/prebuilt)

$(call import-module,cocos2dx)

$(callimport-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)

$(callimport-module,CocosDenshion/android)

$(call import-module,extensions)

$(call import-module,external/Box2D)

$(callimport-module,external/chipmunk)

 

 

 

Aplication.mk文件如下:其中红色代码是手工添加的,注意各自的路径。

 

 

APP_STL :=gnustl_static

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1

NDK_MODULE_PATH :=e:/cocos2d-x-2.2.3;e:/cocos2d-x-2.2.3/cocos2dx/platform/third_party/android/prebuilt

 

最后一句红色代码也是NDK_MODULE_PATH环境变量设置的另一种方法。

 

 

 

附:

Error处理:Conversion to Dalvik formatfailed: Unable to execute dex: java.nio.BufferOverflowException.

 

对于这个问题,凡是经过以下方法处理的都能够正常进行编译和运行。

 

1找到你的项目


2点击右键


3打开Properties属性项


4选中左边Java Build Path项,并在该选项中打开Libraries选项卡,如上图中,将Android Dependencies项和Android PrivateLibraries这两项Remove掉。

5Cleanup该项目


6重新编译运行。

至此就可用C++windows平台开发游戏后,再移植到Android平台,或移植到其他平台。

最终apk程序手机上运行:



 

 

猜你喜欢

转载自blog.csdn.net/zhengleiqing/article/details/38226513