在閱讀這篇文章前、請先查看一下這兩篇文章
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的使用方法、代碼編譯錯誤?請參考樣本程式碼吧~ ^___^