Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Cocos2d-x移植到Android平台編譯的兩個文件Android.mk和Application.mk

Cocos2d-x移植到Android平台編譯的兩個文件Android.mk和Application.mk

編輯:關於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

以上就是本篇博客的內容,下篇博客將給大家分享一下如何不用Cygwin來配置NDK編譯環境,而直接在Eclipse配置NDK編譯環境。



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved