上一篇文章說到,執行create-android-project.sh腳本會生成一個android 項目。該android 項目會有三個目錄分別為
cocos2d-x 生成的項目列表
proj.android:上文說過,是android 運行的項目工程
Classes:是上面android 工程運行時的NDK庫,所有可以跨平台的以C++編寫的代碼都放在該目錄,然后以NDK的方式編譯成SO動態庫,供android 項目調用,原生編譯出來的工程有四個文件
Resources:是存放so動態庫需要的資源文件比如圖片、音頻等
cocos2d-x的makefile文件
要清楚的知道它是如何把Classes文件編譯成so動態庫給android 項目調用的,就需要看看它的makefile如何編寫。再次進入proj.android會看到一個jni目錄,cd進去會看到
這里最重要的兩個為Android.mk文件和hellocpp目錄,而Application.mk暫時還不清楚做了什么,好像提供了一些標准模板庫之類的東西,也不是太清楚,這里就不誤導人了。而list.sh是一個腳本文件,這里也不做深究。
Android.mk:jni編譯時需要的makefile文件
我們最主要看上面這四個字段
LOCAL_MODULE_FILENAME:代表編譯出來的so庫名稱,會點ndk 的朋友都知道。
LOCAL_SRC_FILES :所要編譯的CPP文件,這里可以看到,它還是跑到了Classes目錄找那兩個cocos2d的CPP文件。main.cpp是對應的jni文件,感興趣的朋友可以看看它是如何通過jni渲染到android 上面的。自己要多添加自己的Scene界面,就需要將CPP文件按上面的格式添加。
LOCAL_C_INCLUDES :對應Classes目錄的cocos2d-x的h(頭)文件。
LOCAL_WHOLE_STATIC_LIBRARIES :該cocos2d-x在android 環境下需要信賴的靜態庫,一般不需要更改這里,除非自己要添加自己的功能需要信賴到第三方庫才需要添加到這里來
到了這一步,大致了解了它是如何通過jni編譯成動態庫提供給android使用的了。
在cocos2d-x的庫文件中添加日志的支持
其實提供日志支持,只是調用的標准的ndk日志模塊而已,在這里說出來只是方便大家不用再多查找而已 ,也可以在 這里 查看我以前寫過的一篇關於NDK的文章。
cocos2d-x 生成的android 項目,在makefile 文件中以經支持了logcat框架,我們要使用可以直接引入日志的頭文件然后再定義日志的輸出格式即可,方法很簡單,看下方
然后呢,就可以使用LOGD添加調試打印了,如:LOGD("Application -->AppDelegate::applicationDidFinishLaunching");
關於AppDelegate
AppDelegate 是用來通過從你手上的移動設備接收消息的方式跟蹤應用程序的狀態變化。例如,它可以確定什么時候用戶接電話,或者什么時候內存占滿。應用程序接收的第一個消息是AppDelegate::applicationDidFinishLaunching方法。這個地方是所有啟動代碼都會走的函數,也是cocos2d-x初始化的地方。
該文件位於:./template/android/Classes/AppDelegate.h
cocos2d-x 的基本生命周期
1.標准啟動模式從運行應用程序到展示內容給用戶看所經歷的生命周期是
首先經過AppDelegate的構造函數
{
LOGD( " Application -->AppDelegate::AppDelegate ");
}
再進入到應用程序的啟動函數
函數里面初始化HelloWorld這個場景,然后顯示這個場景,場景會自動調用初始化實例,cocos2d大量使用SingleTon設計模式呀。
2.后台模式
在標准模式上,我們按下鎖屏鍵,然后再解鎖屏,這時的生命周期是這樣的
AppDelegate::applicationDidEnterBackground :此時,程序進入后台模式
AppDelegate::applicationWillEnterForeground :此時,程序被激活
好了,到了這一步,總算是對它有些了解了,接下來打算跟着博客園的游戲牛人 nowpaper 把它的一些游戲改成for android的,素材難找呀!!!!