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


    教程截图:

    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 installer
    select the template version to install
    3 for xcode3
    4 for xcode4
    input nothing for all

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

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

    复制代码
    Installing Xcode 4 Box2d iOS template
    ----------------------------------------------------

    ...copying Box2D files
    done!



    Installing Xcode 4 lua iOS template
    ----------------------------------------------------

    ...copying lua files
    done!
    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.html
    4.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-r7b
    export COCOS2DX_ROOT=/Volumes/Mydata/guanghui/cocos2d-x
    export NDK_ROOT=/Volumes/Mydata/android-ndk-r7b
    export ANDROID_SDK_ROOT=/Volumes/Mydata/android-sdk
    export 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 instance
    bool 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-r7b
    use global definition of ANDROID_SDK_ROOT: /Volumes/Mydata/android-sdk
    Input 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.0
    Other 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.0
    Other versions have not tested.

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

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

    接下来会提示你:

    input target id:
    1
    input your project name:

    我输入SimpleGame,然后回车:

    复制代码
    Created project directory: /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame
    Created directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/src/com/andyque/simplegame
    Added file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/src/com/andyque/simplegame/SimpleGame.java
    Created directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res
    Created directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/bin
    Created directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/libs
    Created directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res/values
    Added file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res/values/strings.xml
    Created directory /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res/layout
    Added file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/res/layout/main.xml
    Added file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/AndroidManifest.xml
    Added file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/build.xml
    Added file /Volumes/Mydata/guanghui/cocos2d-x/SimpleGame/proguard.cfg
    cp: /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 params
    NDK_ROOT=/Volumes/Mydata/android-ndk-r7b/
    COCOS2DX_ROOT=../libs/cocos2dx
    GAME_ROOT=../
    GAME_ANDROID_ROOT=$GAME_ROOT/android
    RESOURCE_ROOT=$GAME_ROOT/Resources

    # make sure assets is exist
    if [ -d $GAME_ANDROID_ROOT/assets ]; then
    rm -rf $GAME_ANDROID_ROOT/assets
    fi

    mkdir $GAME_ANDROID_ROOT/assets

    # copy resources
    for 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
    fi
    done

    # build
    $NDK_ROOT/ndk-build -C $GAME_ANDROID_ROOT $*
    复制代码

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

     

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

     

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

    APP_STL := gnustl_static
    APP_CPPFLAGS += -frtti
    APP_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_static

    LOCAL_SRC_FILES := AppDelegate.cpp
    HelloWorldScene.cpp

    LOCAL_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_prebuilt
    LOCAL_STATIC_LIBRARIES += xml2_static_prebuilt
    LOCAL_STATIC_LIBRARIES += jpeg_static_prebuilt
    LOCAL_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.so
    Compile++ thumb : game_logic_static <= HelloWorldScene.cpp
    StaticLibrary : libgame_logic_static.a
    SharedLibrary : libgame.so
    Install : 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 here
    collect2: ld returned 1 exit status
    make: *** [obj/local/armeabi/libgame.so] Error 1
    复制代码


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

    要论坛交流,请点击传送门! 

    参考文章:

    http://gameit.ro/2012/01/creating-an-iphone-and-android-cocos2d-x-hybrid-project-updated/

    http://www.supersuraccoon-cocos2d.com/2011/08/10/cocos2d-x-iphone-androidide-installation-and-setup-under-mac-os/

    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    MySQL数据库:数据完整性及约束的应用
    MySQL数据库:运算符
    MySQL数据库:合并结果集
    MySQL数据库:聚合函数的使用
    spring web mvc环境搭建
    golang中type常用用法
    有些事情,你真的要早点明白
    一个小事例,了解golang通道阻塞模式
    golang中,slice的几个易混淆点
    作为面试官的一点小感想
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4496781.html
Copyright © 2020-2023  润新知