編輯:關於Android編程
Cocos2d-x移植到Android平台編譯的兩個文件Android.mk和Application.mk
2014年6月11日
本篇博客主要講NDK編譯Android項目的兩個文件Android.mk和Application.mk,筆者在使用NDK編譯Cocos2d-x生成的Android項目的時候遇到配置編譯環境的問題,網上雖然有些配置教程,但並未把一些原理性的東西描述清楚,雖然有時候可以把編譯環境配置成功了,但並不了解為什麼要這麼來配,有時候出現問題也無從下手去查。筆者是帶著疑問去配置NDK的編譯環境的,其中就遇到Android.mk和Application.mk這兩個文件,筆者並不知道這兩個文件是用來干嘛的,打開來看之後也有一堆自己不認識的語法,所以才想著寫這篇博客來整理總結一下。
下面進入正題:
筆者下載的NDK版本是:android-ndk-r9d
這兩個文件相關的文檔在android-ndk-r9d/docs路徑下,原汁原味,你值得擁有。
Android.mk文件的作用:
An
Android.mk
file is written to describe your sources to the build system.
中文意思是:寫一個Android.mk文件是為了向生成系統描述你的源代碼。
Application.mk文件的作用:
The purpose of Application.mk is to describe which native 'modules' (i.e. static/shared libraries) are needed by your application.An Application.mk file is usually placed under $PROJECT/jni/Application.mk, where $PROJECT points to your application's project directory.
中文意思是:Application.mk用來描述你的工程下的native模塊, 一般放在$PROJECT/jni/Application.mk, 其中$PROJECT表示你的工程目錄,這樣就可以被ndk-build腳本文件找到.(注:在這種方式下,進入jni目錄,即$PROJECT/jni/,然後執行ndk-build,就可以直接編譯jni生成.so文件了).
上面就簡單的描述了Android.mk和Application.mk的文件的作用,下面拿Cocos2d-x中最簡單的例子來簡單介紹一下這兩個文件。
筆者使用的是Cocos2d-x 2.2.3,創建一個Cocos2d-x項目這裡請參考前面筆者發表的博客:http://blog.csdn.net/wwj_748/article/details/23677829
筆者在cocos2d-x-2.2.3\projects下創建了一個Test項目,導入proj.android到Eclipse中,會發現有如下的文件目錄結構:
、
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD48cD7U2mpuac7EvP680M/C09DV4sG9uPbOxLz+o6zO0sPHtPK/qr/J0tS/tLW90tTPwrT6wuujrLHK1d+808nPttTTprXE16LKzcHLo7o8L3A+PHA+L1Rlc3Qvam5pL0FuZHJvaWQubWs8YnIgLz48L3A+PHA+PHByZSBjbGFzcz0="brush:java;">#1.這個變量用於給出當前文件的路徑,my-dir返回當前Android.mk所在目錄的路徑
LOCAL_PATH := $(call my-dir)
#2.CLEAR_VARS:指向一個編譯腳本。這個必須在開始一個新模塊之前包含
include $(CLEAR_VARS)
#3.這個模塊的名字,它必須是唯一的,而且不能包含空格
LOCAL_MODULE := cocos2dcpp_shared
#4.設置你的模塊的二進制文件的名稱,獨立於LOCAL_MODULE
LOCAL_MODULE_FILENAME := libcocos2dcpp
#5.這是要編譯的源代碼文件列表
LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp
#6.可選變量,表示頭文件的搜索路徑
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
#7.LOCAL_WHOLE_STATIC_LIBRARIES會加載整個靜態庫,LOCAL_STATIC_LIBRARIES只是加載靜態庫中用到的函數。
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
#8.BUILD_SHARED_LIBRARY:指向編譯腳本,根據所有的在 LOCAL_XXX 變量把列出的源代碼文件編譯成一個共享庫。
include $(BUILD_SHARED_LIBRARY)
#9.將一個新的路徑加入NDK_MODULE_PATH變量。
$(call import-add-path,$(LOCAL_PATH)/platform/third_party/android/prebuilt)
#10.在Android.mk中引用模塊
$(call import-module,CocosDenshion/android)
$(call import-module,extensions)
$(call import-module,external/Box2D)
$(call import-module,external/chipmunk)
以上代碼筆者已經進行了具體的解釋,每一行代碼代表的作用可以從中得到。更多具體的語法,請讀者參考ndk提供的文檔。
/Test/jni/Application.mk
#1.指定application裡要鏈接的標准c++庫 APP_STL := gnustl_static #2.編譯選項 APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1
現在常見的廣告欄效果,自動切換廣告,也可手動滑動切換。 我用ViewPager實現的,廢話不多說,上代碼: 1、布局文件 layout_a
Android WebView常見問題解決方案匯總:就目前而言,如何應對版本的頻繁更新呢,又如何靈活多變地展示我們的界面呢,這又涉及到了web app與native ap
本文為大家解析Android中如何獲取手機屏幕大小,提供一個解決方法,分享給大家供大家參考,具體內容如下運行效果圖:運行程序後,當我們點擊Button按鈕時,可以看到下面
微信對話列表滑動刪除效果很不錯的,借鑒了github上SwipeListView(項目地址:https://github.com/likebamboo/SwipeList