1,C:\CocosCreator\resources\cocos2d-x\cocos\platform\android\libcocos2dx  这是一个纯AS工程,没有NDK的内容。

不会编译脚本是在工程代码中app下的gradle中决定的

有个externalNativeBuild

入口在工程文件的 jni下面的application.mk和android.mk;

application.mk定义了编译的目标cpu架构和编译选项。

android.mk 定义的编译的输入和输出

 

 

LOCAL_PATH := $(call my-dir) //指定了当前的目录,宏函数‘my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)

include $(CLEAR_VARS) //CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等…),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。

LOCAL_MODULE := cocos2djs_shared //生成的模块名,这个变量必须定义,表示make后将要生成的文件的名字

LOCAL_MODULE_FILENAME := libcocos2djs //生成的模块名

ifeq ($(USE_ARM_MODE),1) //arm 架构赋值
LOCAL_ARM_MODE := arm
endif

LOCAL_SRC_FILES := hellojavascript/main.cpp \ //本次需要编译的源文件
../../../Classes/AppDelegate.cpp \
../../../Classes/jsb_module_register.cpp \

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes //本次编译需要包含的头文件,一个相对于当前目录可选的路径名单,当编译所有的源文件(C,C++和汇编)时,它将被添加进include搜索路径

ifeq ($(USE_ANY_SDK),1) //是否使用AnySDK
LOCAL_SRC_FILES += ../../../Classes/anysdk/SDKManager.cpp \
../../../Classes/anysdk/jsb_anysdk_basic_conversions.cpp \
../../../Classes/anysdk/manualanysdkbindings.cpp \
../../../Classes/anysdk/jsb_anysdk_protocols_auto.cpp

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../Classes/anysdk

LOCAL_WHOLE_STATIC_LIBRARIES := PluginProtocolStatic
endif

LOCAL_STATIC_LIBRARIES := cocos2d_js_static //静态链接库文件  尾部指定了生成这个文件的模块

LOCAL_EXPORT_CFLAGS := -DCOCOS2D_DEBUG=2 -DCOCOS2D_JAVASCRIPT //定义LOCAL_EXPORT_CFLAGS变量

include $(BUILD_SHARED_LIBRARY) //就是指定在/system/lib/目录下生成一个lib$(LOCAL_MOUDULE).so文件

$(call import-module, scripting/js-bindings/proj.android) //导入外部模块的.mk文件 后面是路径 这个模块路径在NDK_MODULE_PATH中 NDK_MODULE_PATH+这里的路径

1,    app jni目录下的mk文件

2,cocos/scripting/js-bindings/proj.android 下的mk文件

3,cocos/下的mk文件 一层包一层  这个文件包含了很多的目录下的mk文件  总之是一层套一层