当前位置: 首页 > news >正文

如何在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/


from:http://www.cnblogs.com/andyque/archive/2012/02/23/2364163.html

相关文章:

  • Store Kit Guide(In App Purchase)翻译
  • IAP(程序内购买): 完全攻略
  • iOS应用IAP设置总结
  • Contracts, Tax, and Banking 填写流程
  • iOS图标去掉阴影和反光
  • leftBarButtonItem
  • cocos2d-x 开发网络游戏(http postsocket)
  • cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
  • cocos2d-x 控制android硬件音量大小调节按钮
  • c++ 判断字符串只包含字母、数字、汉字
  • APP STORE 付费验证(IAP)服务端验证全过程
  • 浅谈MVC模式在游戏开发的应用
  • android广告赚钱[转]
  • 关于苹果PUSH(APNS)机制的那点事
  • .net的socket示例
  • Angular2开发踩坑系列-生产环境编译
  • gf框架之分页模块(五) - 自定义分页
  • github从入门到放弃(1)
  • laravel 用artisan创建自己的模板
  • MySQL几个简单SQL的优化
  • Python爬虫--- 1.3 BS4库的解析器
  • 关于List、List?、ListObject的区别
  • 那些年我们用过的显示性能指标
  • 双管齐下,VMware的容器新战略
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 新书推荐|Windows黑客编程技术详解
  • 学习Vue.js的五个小例子
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • HanLP分词命名实体提取详解
  • Java总结 - String - 这篇请使劲喷我
  • ​什么是bug?bug的源头在哪里?
  • #define、const、typedef的差别
  • #考研#计算机文化知识1(局域网及网络互联)
  • #预处理和函数的对比以及条件编译
  • (+4)2.2UML建模图
  • (13)Hive调优——动态分区导致的小文件问题
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (四)图像的%2线性拉伸
  • (五)MySQL的备份及恢复
  • (一)Neo4j下载安装以及初次使用
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)创业的注意事项
  • .bashrc在哪里,alias妙用
  • .cfg\.dat\.mak(持续补充)
  • .gitignore文件—git忽略文件
  • .htaccess配置重写url引擎
  • .NET Framework 4.6.2改进了WPF和安全性