Cocos2d-x的Android工程之Android.mk与Application.mk分析

1、位置

这两个文件的位置位于proj.android/jni目录下,该目录是Cocos2d-x与Android的native的Java代码互调的中转站。

2、Android.mk

LOCAL_PATH := $(call my-dir)//#1设置当前文件路径,my-dir返回当前Android.mk所在的目录路径,用于在开发树种查找源文件
//#2CLEAR_VARS:指向编译脚本,必须在开始一个新模块之前包含。由编译系统提供,指定GUN MAKEFILE清除LOCAL_XXX变量,因为所有的控制文件都在同一个GUN MAKE
include $(CLEAR_VARS)    //执行环境中,<span style="color:#cc0000;">所有的变量都是全局的</span>。
//#3将新的路径加入NDK_MODULE_PATH变量
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
//4#模块名字,必须是唯一的,且不能包含空格。编译系统会自动产生适合的前缀和后缀。即libXXX.so文件。
LOCAL_MODULE := cocos2dcpp_shared
//#5设置模块的二进制文件名称,独立于LOCAL_MODULE
LOCAL_MODULE_FILENAME := libcocos2dcpp
//6#将要编译的源码文件列表,不用包含头文件和包含文件,编译系统自动找出依赖,只需列出源码文件即可。
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 := cocos2dx_static
//#8指向编译脚本,根据所在的LOCAL_XXX变量,把列出的源码文件编译成一个共享库
include $(BUILD_SHARED_LIBRARY)
//在Android.mk中引用模块
$(call import-module,.)

3、Application.mk

APP_STL := c++_static//指定连接的标准C++库
NDK_TOOLCHAIN_VERSION=clang
//编译选项
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic


ifeq ($(NDK_DEBUG),1)
  APP_CPPFLAGS += -DCOCOS2D_DEBUG=1
  APP_OPTIM := debug
else
  APP_CPPFLAGS += -DNDEBUG
  APP_OPTIM := release
endif

4、编译应用程序的模板

#Test Exe
LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_SRC_FILES:= main.c
LOCAL_MODULE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)
1)等号表示赋值,$表示引用某个变量的值。
2)LOCAL_SRC_FILES:加入源文件路径。
3)LOCAL_C_INCLUDES:加入所需包含的头文件的路径。
4)LOCAL_STATIC_LIBRARIES:加入所需要链接的静态库(*.a)
5)LOCAL_SHARED_LIBRARIES:加入所需链接的动态库(*.so)
6)LOCAL_MODULE:表示模块的最终名称
7)BUILD_EXECUTABLE:表示以一个可执行程序的方式进行编译

5、编译静态库模板

#Test Static Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY) 
含义与4一致,BUILD_STATIC_LIBRARY:表示编译一个静态库

6、编译动态库模板

#Test Shared Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_shared
TARGET_PRELINK_MODULES := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)
和上面含义相似。BUILD_SHARED_LIBRARY:表示编译一个动态库

以上三者的生成结果分别在如下,generic依具体target会变:
out/target/product/generic/obj/EXECUTABLE
out/target/product/generic/obj/STATIC_LIBRARY
out/target/product/generic/obj/SHARED_LIBRARY
每个模块的目标文件夹分别为:
可执行程序:XXX_intermediates
静态库: XXX_static_intermediates
动态库: XXX_shared_intermediates

最后还需指定目标安装路径,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定,不同的文件
以下宏进行选择。
TARGET_ROOT_OUT:表示根文件系统
TARGET_OUT:表示system文件系统
TARGET_OUT_DATA:表示data文件系统
用法如:CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...