cocos2d-x的android環境搭建與win32程式移植至android(查漏補缺版)

來源:互聯網
上載者:User

在閱讀這篇文章前、請先查看一下這兩篇文章

I、Cocos2d-x學習之windows 7 android環境搭建

http://www.cnblogs.com/lhming/archive/2012/06/27/2566460.html

 

如果邇已經看完這篇文章並且沒什麼問題、請忽略這裡吧、囧

 

一、這裡莪首先給邇關於版本的建議:

 

1、如果邇是個完全的新手、建議邇下載cocos2d-x 1.x的版本、因為自從2.0版本開始、cocos2d將會使用opengles2.0、這意味著更強的圖形功能、也意味著更少的相容性、囧、部分老版本的android機器不支援gles2.0、而且也絕大部分PC機器使用android模擬器時並不能運行基於gles2.0的版本、這意味著邇使用cocos2d-x 2.x編譯的android程式並不能即時在PC機上調試、只能灌錄到較新的android實機進行Just-in-Time 偵錯、開發起來是非常的不方便、

 

當然了、如果使用cocos2d 1.x開發的遊戲如果運行在較低端的機器上、是無法把cocos2d-x引擎的effect特效表現出來的。

 

2、建議邇使用的jdk版本要在1.6以上、最好1.7、因為1.6以下版本的jdk不支援一些語言特性、比如@overload、這樣會使得基於cocos2d-x產生的java連結檔案會報錯、雖然說邇直接把@overload關鍵字直接去掉就可以了、但也總是麻煩的、

 

3、關於android ndk的版本選擇、官網上有說了、由於r4和r4以下版本的ndk不支援stl、而cocos2d又恰好需要、所以務必使用r5或以上的版本、本文最新的版本是r8、

 

二、配置環境變數的建議:

1、關於NDK的環境變數的配置作用是到時編譯c++成android程式時調用編譯器時使用的、極其重要、一旦錯誤或者無法生效都會導致編譯失敗、這個配置環節是在cygwin上進行的、因為android的c++編譯必須在linux環境上進行、cygwin是個類比linux環境的冬冬、文章說要在使用者目錄的.bash_profile檔案中加上

NDK_ROOT=/cygdrive/e/android-ndk-r8-windows/android-ndk-r8export NDK_ROOT

這裡的意思是、一但進入系統、就把ndk的路徑送進linux的環境變數裡頭、.bash_profile檔案負責把檔案裡頭的命令在linux系統啟動時執行一次、這裡也就是每次啟動linux時把ndk的路徑匯入到linux的環境變數中、添加後請重新登入cygwin環境、執行一次cd $NDK_ROOT、如果能成功進入ndk目錄則是已經添加成功了、如果沒反應、邇可以嘗試在.bashrc檔案中添加相同的內容、再重新登入一次cygwin、通常就會成功了、

 

這裡再說一下cygwin的目錄結構、cygwin的根目錄就是cygwin的安裝目錄、如果邇想跳到其它的盤符、只需要進入/cygdrive/目錄中、就可以看見邇的電腦的相應盤符了、比如這裡、邇想進入e盤、便是/cygdrive/e/目錄

 

 

完事後、邇就可以看第二篇文章了

II、 Cocos2d-x學習之建立Android工程和編譯

http://www.cnblogs.com/lhming/archive/2012/06/27/2566467.html

 

仍然是上面的建議、如果邇無甚問題就當莪是打醬油的吧、囧

 

1、這個create-android-project.bat一定要把目錄配置好了、cygwin、android sdk和android ndk、一定要正確!!!

 

2、邇產生的java連結檔案、jdk版本低於1.6的一定會報錯、這點不再重複了

 

3、在產生的android目錄下(android目錄是cocos2d-x的1.x版本、2.x版本這個目錄叫proj.android)、assets是android程式的所有資源檔、一定要記住、不能有任何壓縮檔、包括zip、rar、tar.gz等等、邇匯入eclipse的目的就是使用eclipse來打包程式為apk、打包工作是eclipse做的、自己千萬別代勞

 

4、邇產生了的java連結檔案、記得一定要在java主檔案中添加相應的so庫檔案、是哪個檔案呢、比如邇的專案檔名是testcocos2d、那麼必定有一個叫testcocos2d.java的檔案在android目錄下的src檔案夾裡面、在這個java檔案的最後、肯定會有類似這樣的代碼

static {         System.loadLibrary("game");}

這裡的意思就是匯入game這個庫檔案、那麼莪們究竟要在這裡匯入哪些庫檔案呢、籠統的說就是邇程式需要的所有庫檔案、囧、確切的說是在android目錄下

android\libs\armeabi這個檔案夾裡的所有so檔案、比如莪這個項目包含了一個libgame.so檔案、那麼就是去掉前面的lib和尾碼.so、所以莪在java檔案裡寫的匯入"game"庫、如果邇還看見libcocosdenshion.so之類的些庫、一定要把這些統統加入到java的主檔案中、不然的話雖然能成功產生apk檔案、但是運行時肯定會報錯!!原因自然狠明顯、運行時未指明庫檔案、自然會報錯

 

 

這裡有篇文章是教邇如果把在windows編寫好的程式轉化成android程式的、可以參照看一下

III、cocos2d-x學習筆記06:如何將win32移植到android

http://4137613.blog.51cto.com/4127613/758783

 

最下面還有個附件、如果邇覺得太麻煩、莪這裡可以把它貼出來

 

以在HelloWorld中添加Box2D為例,記錄一下需要注意的坑。BallCC是HelloWorld對應的Android工程,紅色字型是需要改動的地方,希望對別人有協助。第一步:Additional Include Directories中加入$(SolutionDir)第二步:Additional Dependencies中加入libbox2d.lib前兩步是保證在VS中能夠運行,與Android無關。第三步:F:\Dev\cocos2d-1.0.1-x-0.10.0-Clent\BallCC\Classes下的Android.mk修改為LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := game_logicLOCAL_SRC_FILES := AppDelegate.cpp \                   HelloWorldScene.cpp \                   sdBall.cpp \                   sdDangBan.cpp \                   ODSocket.cpp                   LOCAL_C_INCLUDES := $(LOCAL_PATH)/http://www.cnblogs.com/cocos2dx \                    $(LOCAL_PATH)/http://www.cnblogs.com/cocos2dx/platform \                    $(LOCAL_PATH)/http://www.cnblogs.com/cocos2dx/include \                    $(LOCAL_PATH)/http://www.cnblogs.com/CocosDenshion/include \                    $(LOCAL_PATH)/http://www.cnblogs.com/cocos2dx/lua_support \                    $(LOCAL_PATH)/../..                    LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../android/libs/$(TARGET_ARCH_ABI)) \                -lcocos2d -lcocosdenshion -lbox2d \                -L$(call host-path, $(LOCAL_PATH)/http://www.cnblogs.com/cocos2dx/platform/third_party/android/libraries/$(TARGET_ARCH_ABI)) -lcurl            include $(BUILD_SHARED_LIBRARY)第四步:F:\Dev\cocos2d-1.0.1-x-0.10.0-Clent\BallCC\android\jni下的Android.mk修改為LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)subdirs := $(addprefix $(LOCAL_PATH)/http://www.cnblogs.com/../,$(addsuffix /Android.mk, \           Box2D \           cocos2dx \           CocosDenshion/android \    ))subdirs += $(LOCAL_PATH)/http://www.cnblogs.com/Classes/Android.mk $(LOCAL_PATH)/helloworld/Android.mkinclude $(subdirs)第五步:F:\Dev\cocos2d-1.0.1-x-0.10.0-Clent\BallCC\android\jni下的Application.mk修改為# it is needed for ndk-r5APP_STL := stlport_staticAPP_MODULES := cocos2d cocosdenshion box2d game_logic game第六步F:\Dev\cocos2d-1.0.1-x-0.10.0-Clent\BallCC\android\src\com\android\BallCC下的BallCC.java中增加     static {         System.loadLibrary("cocos2d");         System.loadLibrary("cocosdenshion");         System.loadLibrary("box2d");         System.loadLibrary("game_logic");         System.loadLibrary("game");     }哎。。。花了一天搞最後一步啊,怎麼就這麼多坑啊。最後一步不搞的話,編譯都沒問題,但是在手機上跑就會崩潰。

 

 

最後的最後、如果遇到錯誤、請多看看樣本檔案、每次cocos2d-x發包、都會內建有例子tests和helloworld的、一個是示範所有功能的一個是介紹程式架構的、不懂就看看、非常的重要、比如邇不會編譯android的包、或者遇到了錯誤、看一看tests目錄那裡的test.android目錄設定檔是怎麼寫的android.mk是怎麼寫的、對了、android.mk檔案一共有3個、一個在頂層的Classes目錄、一個在android目錄下的jni、還有一個在該目錄的子目錄下、編譯出錯了的話請仔細對比android.mk這三個檔案的差別、、

 

 

而且樣本程式對於尋找cocos2d-x的api用法也是相當有協助的!cocos2d-x本來就版本更新快、一些api的用法也已經完全不一樣了、網上的範例程式碼就會陳舊、但是大概的概念是一樣的、所以這時邇就可以查看邇自己cocos2d-x版本的樣本檔案、那裡會介紹最新api的使用方法、代碼編譯錯誤?請參考樣本程式碼吧~ ^___^

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.