教程截图:

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/

如何在macox下面配置集成ios和android游戏教程的更多相关文章

  1. 转 iOS和android游戏纹理优化和内存优化(cocos2d-x)

    iOS和android游戏纹理优化和内存优化(cocos2d-x) (未完成) 1.2d游戏最占内存的无疑是图片资源. 2.cocos2d-x不同平台读取纹理的机制不同.ios下面使用CGImage, ...

  2. 暗黑战神客户端(IOS和Android)打包教程

    先说下遇到的严重问题: 1.暗黑战神的资源管理有2套流程,一套开发使用(Resources.Load),一套正式上线使用(AssetBundles, 流畅),而走AssetBundles流程的代码则有 ...

  3. iOS和android游戏纹理优化和内存优化(cocos2d-x)(转载)

    转自http://blog.csdn.net/langresser_king/article/details/8426708 (未完成) 1.2d游戏最占内存的无疑是图片资源. 2.cocos2d-x ...

  4. iOS和android游戏纹理优化和内存优化(cocos2d-x)

    1.2d游戏最占内存的无疑是图片资源. 2.cocos2d-x不同平台读取纹理的机制不同.ios下面使用 CGImage,android和windows下是直接调用png库.我测试了下,使用png库直 ...

  5. cocos2dx 在mac下开发ios和android游戏

    这里主要说android,因为ios开发在文章 http://blog.csdn.net/itcastcpp/article/details/24792323 中已经说过. 1)打开工程 打开ecli ...

  6. (译)cocos2d-x跨android&ios平台开发入门教程

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  7. 如何在Xamarin中快速集成Android版认证服务-手机号码篇

    Xamarin作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称AGC)也在逐步的支持Xamarin的SDK.认证服务也是支持Xam ...

  8. 如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇

    Xamarin 作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称 AGC)也在逐步的支持 Xamarin 的 SDK.认证服务也是 ...

  9. 集成IOS 环信SDK

    集成IOS SDK 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. 下载SDK 通过Cocoapods下载地址 不包含实时语音版本SDK(EaseMobC ...

随机推荐

  1. WL(Wear leveling)磨损平衡

    前面说过,闪存寿命是以P/E次数来计算的,而WL就是确保闪存内每个块被写入的次数相等的一种机制.若没有这个机制,SSD内的闪存颗粒就无法在同一时间内挂掉,那对用户来说就是灾难.       会出现这种 ...

  2. 《火球——UML大战需求分析》(0.1)——开篇废话

    说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  3. android 解决ViewPager双层嵌套的滑动问题

    解决ViewPager双层嵌套的滑动问题 今天我分享一下ViewPager的双层嵌套时影响内部ViewPager的触摸滑动问题 之前在做自己的一个项目的时候,遇到广告栏图片动态切换,我第一时间想到的就 ...

  4. MyEclipse中jsp的凝视报错解决

    jsp页面中凝视报错: 出错现场:在eclipse中没有报错.在MyEclipse中报错. <!-- To use express install, set to playerProductIn ...

  5. eclipse中tomcat启动项目 修改java代码不重启服务

    1.双击tomcat 2.选择modules 3.选中项目点击edit 4.去掉勾.去除auto reloading enabled 的选中 ,点击OK,

  6. les nationalités et les pays

    masculin  féminin pays français  française  la France chinois  chinoise  la Chine   suisse  suisse  ...

  7. iOS 支持arm_64 和 x86_64 的OpenSSL 静态库(libcrypto.a, libssl.a)

    下载链接

  8. [转]如何理解c和c ++的复杂类型声明

    本文作者girlrong是网易广州社区的C语言版版主,这篇文章被选在精华区.很是不错,不敢独享!据说她乐于助人,虚心诚恳,颇受网友欢迎.只可惜现在已退隐江湖了.在最近学习C语言过程中,了解些前辈大牛的 ...

  9. C++ 面向对象学习1

    #include "stdafx.h" #include <iostream> //不要遗漏 否则不能使用cout using namespace std; class ...

  10. 转: vim简明教程

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...