quick cocos 或者 Cocos2dx 项目下的Android.mk文件的学习

android.mk文件的作用:编译需要的cpp文件,生成.so动态库,供android端调用。

先上一个android.mk文件:

第一次创建项目,在Android平台编译时,都需要通过android.mk文件编译整个cocos2dx的库(第一次编译我们需要等待很长的时间.....)。

首先知道$(call import-module,dir_name)的作用,然后顺着lib/proj.android目录继续找对应目录下的android.mk文件

类似于递归一样,把所有目录下的android.mk文件都编译一次,最终把Cocos2dx库和自己的cpp文件打包成.so文件。

1)LOCAL_WHOLE_STATIC_LIBRARIES := quickcocos2dx

上面这句意思是包含quickcocos2dx的静态库,但是where is quickcocos2dx 的静态库呢?

移步进D:\quick-x\quick-cocos2d-x\lib\proj.android,查看该目录下的android.mk文件,大概内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := quickcocos2dx   #库名
LOCAL_MODULE_FILENAME := libquickcocos2dx

....

....

include $(BUILD_STATIC_LIBRARY)   #编译静态的quickcocos2dx库

$(call import-module,cocos2dx)                            #继续编译cocos2dx目录下的android.mk文件
$(call import-module,CocosDenshion/android)        #继续编译CocosDenshion/android目录下的android.mk文件
$(call import-module,extensions)                          #继续编译extensions目录下的android.mk文件
$(call import-module,scripting/lua/proj.android)      #继续编译scripting/lua/proj.android目录下的android.mk文件

...

...

从上面的android.mk可以看到,quickcocos2dx 的静态库就是这个。

就这样,通过不断的编译android.mk文件,将cocos2dx的几个静态库生成,最终生成了目标的.so动态库。

这样,在android平台下,可以使用jni调用cocos2dx的库,这样就可以在手机上玩游戏了。

2)LOCAL_MODULE 跟 LOCAL_MODULE_FILENAME的区别

看具体的代码:

LOCAL_MODULE := quickcocos2dx
LOCAL_MODULE_FILENAME := libquickcocos2dx

上面两句代码,我的理解:

在android.mk文件编译的过程中,

使用的名字是quickcocos2dx(android.mk运行期使用的变量名,其它的mk文件可以通过quickcocos2dx来引用这个MODULE),

但是当编译完成,存储到外存,也就是硬盘上时(LOCAL_MODULE_FILENAME),使用的名字是:libquickcocos2dx

网上关于android.mk的文档一大把,推荐个讲的不错的,给我拨云见月的blog:

http://www.cnblogs.com/yaozhongxiao/archive/2012/03/06/2382362.html

并摘录些实用的文字:

++++++++++++++++++++++++++分割线++++++++++++++++++++++++++++++

1. Android编译系统分析 --- 系统变量解析

LOCAL_PATH                        - 编译时的目录
       LOCAL_MODULE                   - 编译的目标对象
       LOCAL_SRC_FILES               - 编译的源文件
       LOCAL_C_INCLUDES            - 需要包含的头文件目录
       LOCAL_SHARED_LIBRARIES  - 链接时需要的外部库
       LOCAL_PRELINK_MODULE    - 是否需要prelink处理

BUILD_STATIC_LIBRARY   - 指明要编译成静态库
       BUILD_SHARED_LIBRARY  - 指明要编译成动态库

(1).  LOCAL_PATH - 编译时的目录

$(call 目录,目录….) 目录引入操作符:   如该目录下有个文件夹名称 src,则可以这样写 $(call src),那么就会得到 src 目录的完整路径

(2). include $(CLEAR_VARS) -清除之前的一些系统变量
       CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
在 build/core/config.mk 定义 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk
通过include 包含自定义的.mk文件(即是自定义编译规则)或是引用系统其他的.mk文件(系统定义的编译规则)。

(3). LOCAL_SRC_FILES - 编译的源文件
       可以是.c, .cpp, .java, .S(汇编文件)或是.aidl等格式, 不同的文件用空格隔开。

如果编译目录子目录,采用相对路径,如子目录/文件名。

也可以通过$(call 目录),指明编译某目录下所有.c/.cpp/.java/.S/ .aidl文件.    追加文件 LOCAL_SRC_FILES += 文件

(4). LOCAL_C_INCLUDES - 需要包含的头文件目录
       可以是系统定义路径,也可以是相对路径. 如该编译目录下有个include目录,写法是include/*.h

(5). LOCAL_MODULE - 编译的目标对象
       module 是指系统的 native code,通常针对c,c++代码
              ./system/core/sh/Android.mk:32:LOCAL_MODULE:= sh
              ./system/core/libcutils/Android.mk:71:LOCAL_MODULE := libcutils

(6). LOCAL_PACKAGE_NAME 
       Java 应用程序的名字用该变量定义
              ./packages/apps/Music/Android.mk:9:LOCAL_PACKAGE_NAME := Music
              ./packages/apps/Browser/Android.mk:14:LOCAL_PACKAGE_NAME := Browser

(7).  依赖库
         LOCAL_SHARED_LIBRARIES - 链接时需要的外部共享库
         LOCAL_STATIC_LIBRARIES - 链接时需要的外部外部静态
         LOCAL_JAVA_LIBRARIES 加入jar包

(8). BUILD_SHARED_LIBRARY - 指明要编译成动态库。编译的目标,用include 操作符
       BUILD_STATIC_LIBRARY  --- 来指明要编译成静态库。
       如果是java文件的话,用 BUILD_PACKAGE 来指明。会用到系统的编译脚本host_java_library.mk,

quick cocos 或者 Cocos2dx 项目下的Android.mk文件的学习,布布扣,bubuko.com

时间: 2024-10-27 09:33:35

quick cocos 或者 Cocos2dx 项目下的Android.mk文件的学习的相关文章

cocos2d-x避免手动修改android.mk文件来编译

编辑android.mk文件,替换为如下内容 LOCAL_PATH := $(call my-dir) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp FILE_LIST := hellocpp/main.cpp FILE_LIST += $(wildcard $(LOCAL_PATH)/../..

cocos2d-x 3.0 引用第三方库 及编译成apk时android mk文件写法

cocos2d-x 3.0 中,如果你需要使用CocosStudio.Extensions扩展库 等等,都需要自己手动添加. 添加步骤如下:(比如说现在我要添加libExtensions,libCocosStudio , libGUI) 1.添加附加项目 右击解决方案--->添加现有项目--->添加:项目目录\cocos2d\extensions\proj.win32\libExtensions,然后你会发现左边多了一个libExtensions扩展库 右击解决方案--->添加现有项目-

Cocos2d-x Android.mk文件自动修改器

做cocos2d-x的项目,一般是用电脑进行开发,然后移植到手机平台上.移植到安卓手机需要用eclipse等工具重新编译打包成apk文件.而用eclipse打包的话,要把项目的cpp文件一条条加入到Android.mk配置中,文件少无所谓,但如果文件很多,手工添加就比较麻烦了,特别是有些时候,要和原先的Andriod.mk配置做比较,本次新增了哪些文件,然后把新增的文件添加进去. 总之,打包成apk,手工修改Android.mk配置很麻烦.所以,我做了一个自动修改器.如下图: 我的Cocos2d

cocos2d-x 3.0 android mk文件 之 自动遍历*.cpp文件

还记得上一篇android mk 文件的写法吗?传送门, 我们需要手动去添加 cpp文件,如果cpp一多,那不是要累死? LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp LOCAL_SRC_FILES := hellocpp/main.cpp ../../Classes/AppDelegate.cp

使用cocostudio 需要在Android.mk文件的配置

直接贴上Android.mk文件吧. 对了,是cocos2d3.0的,不知道2.x是否一样. LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp LOCAL_SRC_FILES := hellocpp/main.cpp ../../Classes/AppDelegate.cpp ../../Classe

Android NDK开发指南---Application.mk文件和android.mk文件

https://android.googlesource.com/platform/development/+/donut-release/ndk/docs/OVERVIEW.TXT https://android.googlesource.com/platform/ndk/+/4e159d95ebf23b5f72bb707b0cb1518ef96b3d03/docs/ANDROID-MK.TXT https://android.googlesource.com/platform/ndk/+/4

基于Android2.3.5系统:Android.mk文件解析

*************************************************************************************************************************** 作者:EasyWave                                                                                                               时间:2

Android.mk文件简单分析

Android.mk文件简单分析 一个Android.mk文件用来向编译系统描述需要编译的源代码.具体来说:该文件是GNUMakefile的一小部分,会被编译系统解析一次或多次.可以在每一个Android.mk中定义一个或多个模块,也可以在几个模块中使用同一个源代码文件. 每个模块属下列类型之一: 1)APK程序,一般的Android程序,编译打包生成apk文件 2)JAVA库,java类库,编译打包生成jar文件 3)  C\C++应用程序,可执行的C\C++应用程序 4)C\C++静态库,编

Android.mk 文件语法详解

转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html ===================================================================================== 0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次