如何在macox下面配置整合ios和android遊戲教程

來源:互聯網
上載者:User

教程:

 

 

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 image, a 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,因為My Phone安裝的系統是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/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.