如何在macox下面配置集成ios和android游戏教程

来源:互联网 发布:淘宝上的快排能买吗 编辑:程序博客网 时间:2024/04/30 04:01

 

 

1.准备工作,配置开发环境:

开发环境:mac ox 10.7.3  +   xcode4.2  + ndk r7 + eclipse helios

部署环境:中兴v880  root过了 刷2.3.5的rom, 模拟器是api 7 ,android 2.1

 

a、首先安装好xcode和eclipse,关于这两个工具的 安装就不多说了。xcode直接一个安装包next进行到底,而eclipse也有macos版的,不需要安装,绿色版。

b、然后,安装好cocos2d-x。我安装的版本是最新版cocos2d-1.0.1-x-0.11.0 release。(推荐使用git把源代码仓库clone下来,这样每次有更新的时候,只需要pull,然后花费少量的时间就可以获得最新版本了。关于git怎么使用,大家可以上网查,这个工具变得越来越流行了,现在说自己不会git都不好意思说自己是程序员了,呵呵,这话不是我说滴,别人说滴,但是确实有一定的道理在里面。大家不喜勿喷哈。)

下载完毕后,解压,打开终端(terminal),cd到刚刚解压的目录下面去,然后运行

./install-templates-xcode.sh -u -f

接下来,你会得到如下的输出:

cocos2d-x template installerselect the template version to install3 for xcode34 for xcode4input nothing for all

这里让你选择安装的模板类型,由于我使用的是xcode4,所以我输入4,如果你们喜欢3的话,这里就输入3,或者直接回车的话,就可以同时安装3和4.

选择4,回车,如下图所示:

复制代码
Installing Xcode 4 Box2d iOS template----------------------------------------------------...copying Box2D filesdone!Installing Xcode 4 lua iOS template----------------------------------------------------...copying lua filesdone!done!
复制代码

当出现这样的提示的时候,就表示成功安装了。


c、接下来,配置android开发环境并安装NDK,同时设置一些环境变量。

这个过程,supersuraccoon已经在他的博客里面写好了,我这里拿来主义,不要见怪哈:)

复制代码
4.1 确认已经安装JDK可以使用命令 “java -version”4.2 确认已经安装Ant (最好使用1.8.0或更新的版本)可以使用命令 “ant -version”4.3 安装Eclipse我使用的是helios版本 (eclipse-jee-helios-SR1-macosx-cocoa), 其中包含了一些需要的插件(刚开始使用的是eclipse-SDK-3.7-macosx-cocoa,但是因为之后装ADT插件的时候报了一些错,于是就换掉了)4.4 安装ADT插件安装步骤:http://developer.android.com/sdk/eclipse-adt.html4.5 安装 Android SDK如果有网络连接的话可以参考 安装步骤:http://developer.android.com/sdk/installing.html但是如果你和我一样没有网络连接的话过程就麻烦了:4.5.1 下载所有需要的包可以参考这个:http://qdevarena.blogspot.com/2010/05/download-android-sdk-standalone-for.html或者http://azerdark.wordpress.com/2011/04/21/android-sdk-offline-installation/4.5.2 把包解压到对应的位置4.5.3 创建&&运行模拟器
复制代码


然后,下载ndk r7,把它解压到一个比较容易找到的目录。我的是/Volumn/Mydata/android-ndk-r7b,然后sdk的安装目录是/Volumn/Mydata/android-sdk.我是联网安装的sdk,当时只选择了api7和api15,也就是android2.1和android3.0.


接下来是配置环境变量,打开terminal,然后输入下列语句:

vim ~/.bash_profile

然后按shift+g就会跳到文件最后,然后依次输入a,回车,把下面的语句复制到.bash_profile里面即可,路径根据自己安装sdk和ndk的路径作相应的修改即可:

export ANDROID_NDK_ROOT=/Volumes/Mydata/android-ndk-r7bexport COCOS2DX_ROOT=/Volumes/Mydata/guanghui/cocos2d-xexport NDK_ROOT=/Volumes/Mydata/android-ndk-r7b                             export ANDROID_SDK_ROOT=/Volumes/Mydata/android-sdkexport PATH=$PATH:$ANDROID_NDK_ROOT

然后按esc ,再:wq(回车)保存好之后,就可以了。如果大家不喜欢vim,可以用其它编辑器,不过,由于./bash_profile是隐藏文件,所以你还要百度一下如何显示隐藏文件,呵呵。接下来,正式开始我们的跨平台游戏之旅啦。


2.创建一个iphone项目

这个非常简单,打开xcode,File->New->New project,然后选择cocos2d-x template,如下图所示:

然后把下载a Player imagea Projectile image, and a Target image.这三张图片,然后把它们放到工程的Resource目录下面去,并添加引用。

然后把HelloWorldScene.cpp的init方法替换成下面的代码:

复制代码
// on "init" you need to initialize your instancebool HelloWorld::init(){    //////////////////////////////    // 1. super init first    if ( !CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)))    {        return false;    }    //add a ninjia sprite to the left screen center    CCSprite *ninjiaSprite = CCSprite::spriteWithFile("Player.png");    CCDirector *director = CCDirector::sharedDirector();    CCSize screenSize = director->getWinSize();    ninjiaSprite->setPosition(ccp(ninjiaSprite->getContentSize().width / 2.0f,                              screenSize.height / 2.0f));    this->addChild(ninjiaSprite);        CCSprite *targetSprite = CCSprite::spriteWithFile("Target.png");    targetSprite->setPosition(ccp(screenSize.width / 2.0f, screenSize.height / 2.0f));    this->addChild(targetSprite);                return true;}
复制代码

编译并运行,你会看到如下图所示的输出:


好了,iphone项目创建好了,很简单吧,呵呵。接下来,让我们来创建android项目。


3.创建一个android项目

首先,打开终端,并输入:

cd $COCOS2DX_ROOT(回车)
./create-android-project.sh(回车)

然后,这时候,它会出现如下提示:

use global definition of NDK_ROOT: /Volumes/Mydata/android-ndk-r7buse global definition of ANDROID_SDK_ROOT: /Volumes/Mydata/android-sdkInput package path. For example: org.cocos2dx.example

前面两句提示脚本正式使用我们之前定义的环境变量,分别是我的android的sdk和ndk的安装路径。如果之前没有定义这两个变量,就会报错。

然后它要求我们输入java包的路径,还给出了sample,这里我输入com.andyque.simplegame,然后回车。

接下来,它就会出现:

复制代码
Now cocos2d-x supports Android 2.1-update1, 2.2, 2.3 & 3.0Other versions have not tested.Available Android targets:----------id: 1 or "android-7"     Name: Android 2.1     Type: Platform     API level: 7     Revision: 3     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854     ABIs : armeabi----------id: 2 or "android-15"     Name: Android 4.0.3     Type: Platform     API level: 15     Revision: 2     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800     ABIs : no ABIs.input target id:
复制代码

这里指的是脚本检测到我当前系统安装的api,之前我说过了,我只安装了api7和api15.注意,上面还有一行:

Now cocos2d-x supports Android 2.1-update1, 2.2, 2.3 & 3.0Other versions have not tested.

如果读者使用其它android版本,有可能会有问题哦,因为没有被测试过,大家可以帮忙测试一下,说不定还会被采纳,哈哈。

这里我选择1,因为我的手机安装的系统是2.3.5,等下我还要在我手机上跑呢。

接下来会提示你:

input target id:1input your project name:

我输入SimpleGame,然后回车:

复制代码
Created project directory: /Volumes/Mydata/guanghui/cocos2d-x/SimpleGameCreated directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/src/com/andyque/simplegameAdded file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/src/com/andyque/simplegame/SimpleGame.javaCreated directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/resCreated directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/binCreated directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/libsCreated directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res/valuesAdded file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res/values/strings.xmlCreated directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res/layoutAdded file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res/layout/main.xmlAdded file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/AndroidManifest.xmlAdded file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/build.xmlAdded file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/proguard.cfgcp: /Volumes/Mydata/guanghui/cocos2d-x/HelloWorld/Resource/*: No such file or directory
复制代码

这时cocos2d-x的android项目就建立好了。为了确保你的这个工程没有问题,你可以运行$COCOS2DX_ROOT/SimpleGame/android/build_native.sh这个脚本。

方法很简单,打开终端,输入

cd $COCOS2DX_ROOT/SimpleGame/android/

然后是:

./build_native.sh

tips:linux下面的命令和文件可以用tab键补全,windows下面也一样,不过有些童鞋有可能不知道,特此提醒一下。这样就不用一个字母一个字母去打了,麻烦不说,还容易出错。


默认情况下,所有的android项目都会建立在cocos2d-x的安装目录下面,同时里面的mk文件都是引用cocos2d-x下面的库和文件的。

但是,我们需要创建一个独立的,能够同时支持ios和android的项目,所以,接下来,我将教大家如果把刚刚创建的android项目集成到iphone项目里面去。


4.把android项目合并到iphone项目里面去

这一步比较繁琐,也比较容易出错,大家要看仔细了。

先看看,配置好后,xcode里面的工程文件Group布局吧:

这里面新添加了一个android文件夹,但是,xcode里面只看到一些sh和mk文件,但是,实际上,这些都只是引用,具体还要拷贝其它文件到项目里面来。

(说明:操作步骤就是,先把整个android文件夹拷贝到ios的同级目录,然后只添加上图中的引用。其实也可以不copy过来,直接添加引用,但是,那样就有问题。就是哪一天,你的文件移动了,会造成该项目的引用找不到。所以,为了方便管理,还是把android目录拷贝到项目中来。)

具体请往下看:


首先,选择一个你最喜欢的文本编辑器,然后cd到刚刚这个SimpleGame的android目录下面,然后打开terminal,输入:

复制代码
vim makefile//然后会创建一个新的窗口,接着输入i进入编辑模式,然后键入下面3条语句clean:    rm -rf libs/    rm -rf obj/
复制代码

请特别注意,这里的clean:是顶格输入的,而两条rm语句是使用tab键缩进的。如果不缩进,则输入make clean的时候会报错。

输入完后,esc(回到命令模式) :wq 回车,保存并退出。ok,搞定,然后输入make clean,如果出现下面的输出,则表示ok了:

rm -rf libs/rm -rf obj/

接下来,把一些android相关的文件拷贝到之前建好的ios项目下面去。(注意$符号+环境变量名,是你之前定义的目录的别名,即$COCOS2DX_ROOT表示你的cocos2dx的解压缩目录

第一步,把android这个文件夹从$COCOS2DX_ROOT/SimpleGame/android/拷贝到iphone的工程目录下面去,和ios这个文件夹在同一目录。(最终的目录是SimpleGame/SimpleGame/android/)

第二步,把Android.mk这个文件从$COCOS2DX_ROOT/SimpleGame/Classes/拷贝到SimpleGame/SimpleGame/Classes/下面

第三步,把Android.mk从$COCOS2DX_ROOT/cocos2dx/拷贝到SimpleGame/SimpleGame/libs/cocos2dx/下面

第四步,把android文件夹从$COCOS2DX_ROOT/CocosDenshion拷贝到SimpleGame/SimpleGame/libs/CocosDenshion/下面去。

最后一步,把platform这个文件夹从$COCOS2DX_ROOT/cocos2dx/platform拷贝到SimpleGame/SimpleGame/libs/cocos2dx/下面去。

当然,这个platform有点大,大约有114M,其中除了android,third_party和ios这三个文件夹不能删除之外,其它文件夹全部可以删除,特别注意!!!!

不要删除那些文件,一个文件也不能删除!!!!

接下来,我们配置一下build_native.sh脚本,把它替换成如下所示:

复制代码
# set paramsNDK_ROOT=/Volumes/Mydata/android-ndk-r7b/COCOS2DX_ROOT=../libs/cocos2dxGAME_ROOT=../GAME_ANDROID_ROOT=$GAME_ROOT/androidRESOURCE_ROOT=$GAME_ROOT/Resources# make sure assets is existif [ -d $GAME_ANDROID_ROOT/assets ]; then    rm -rf $GAME_ANDROID_ROOT/assetsfimkdir $GAME_ANDROID_ROOT/assets# copy resourcesfor file in $RESOURCE_ROOT/*do    if [ -d $file ]; then        cp -rf $file $GAME_ANDROID_ROOT/assets    fi    if [ -f $file ]; then        cp $file $GAME_ANDROID_ROOT/assets    fidone# build$NDK_ROOT/ndk-build -C $GAME_ANDROID_ROOT $*
复制代码

注意,这里的NDK_ROOT要改成你自己的路径。


然后修改android/jni/Android.mk,修改成下面的样子:


同时把Application.mk修改成下面的样子:

APP_STL := gnustl_staticAPP_CPPFLAGS += -frttiAPP_MODULES := cocos2dx_static cocosdenshion_shared game_logic_static game_static

然后,把android/jni/helloworld/Android.mk修改成下面的样子:


然后把Classes/Android.mk修改成下面的样子:(以后游戏越做越大,则可以在LOCAL_SRC_FILES里面再添加源文件即可,当然,如果要使用box2d或者其它第三方库,

那么请期待下一篇教程:))

复制代码
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := game_logic_staticLOCAL_SRC_FILES := AppDelegate.cpp \                   HelloWorldScene.cppLOCAL_C_INCLUDES := $(LOCAL_PATH)/../libs/cocos2dx \                    $(LOCAL_PATH)/../libs/cocos2dx/platform \                    $(LOCAL_PATH)/../libs/cocos2dx/include \                    $(LOCAL_PATH)/../libs/CocosDenshion/include \LOCAL_STATIC_LIBRARIES := png_static_prebuiltLOCAL_STATIC_LIBRARIES += xml2_static_prebuiltLOCAL_STATIC_LIBRARIES += jpeg_static_prebuiltLOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static                LOCAL_SHARED_LIBRARIES := cocosdenshion_shared            include $(BUILD_STATIC_LIBRARY)$(call import-module,cocos2dx/platform/third_party/android/modules/libpng)$(call import-module,cocos2dx/platform/third_party/android/modules/libxml2)$(call import-module,cocos2dx/platform/third_party/android/modules/libjpeg)
复制代码


然后打开终端,依次输入:

make clean./build_native.sh

如果一切顺利,你将得到如下输出:

复制代码
。。。(上面还有一大堆编译信息,注意不要有错误哦,有错误请贴出来)Install        : libcocosdenshion.so => libs/armeabi/libcocosdenshion.soCompile++ thumb  : game_logic_static <= HelloWorldScene.cppStaticLibrary  : libgame_logic_static.aSharedLibrary  : libgame.soInstall        : libgame.so => libs/armeabi/libgame.so
复制代码


最后,打开eclipse,然后选择File->New->Project...,接着会出现如下对话框:

选择Android Project,Next

然后,选择从现有工程导入:(纠正一下,应该是选择Create project from exisiting source,然后Browse,定位到刚刚的android目录下面去。我有点懒,就不重新截图了)

然后,Next,选择android2.1:然后选择Finish。

最后,右键点工程,Run As Android Application。

过一会,模拟器就起来,时间有点长,不过一旦起来以后,之后编译安装程序还是比较快的。但是,感觉还是不如ios模拟器爽啊。

成功之后,就可以看到一个忍者还有一个妖怪啦。

不过,我不走运,黑屏,呵呵,不过没有关系,我们android/bin目录下面的SimpleGame.apk复制到我的sd卡里面,然后安装,运行结果正确。

下面是小v的截图:



 后记:由于我刚开始学习android,所以配置用ndk编译cocos2dx的时候遇到了不少的问题。之后通过网络查找,基本上问题都得到了解决。特在此把解决方案跟大家分享一下,避免大家犯和我一样的错误。下面是一些我遇到的错误及解决方案。如果大家配置有什么问题,也请留言,或者我有遗漏什么地方,也请留言让我知道。我再补充完善。

 

trouble shooting:

1.如果把cocodension也配置也静态库,则会出现如下错误:

复制代码
./obj/local/armeabi/libcocosdenshion.a(SimpleAudioEngineJni.o): In function `JNI_OnLoad':/Volumes/Mydata/MyToolBox/Cocos2dxLib/SimpleGame/SimpleGame/android/jni/http://www.cnblogs.com/libs/CocosDenshion/android/jni/SimpleAudioEngineJni.cpp:21: multiple definition of `JNI_OnLoad'./obj/local/armeabi/objs-debug/game_static/main.o:/Volumes/Mydata/MyToolBox/Cocos2dxLib/SimpleGame/SimpleGame/android/jni/helloworld/main.cpp:16: first defined herecollect2: ld returned 1 exit statusmake: *** [obj/local/armeabi/libgame.so] Error 1
复制代码


2.有时候模拟器上显示黑屏,但是程序没有出错误提示,这时候不妨把程序安装到真机上面试试