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)
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
以下宏进行选择。
TARGET_ROOT_OUT:表示根文件系统
TARGET_OUT_DATA:表示data文件系统
用法如:CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)