zoukankan      html  css  js  c++  java
  • 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-xquick-cocos2d-xlibproj.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,

  • 相关阅读:
    抽卡 状压DP+期望DP+系数递推
    20190903考试反思
    20190823考试反思
    约瑟夫类问题研究
    树位DP
    20190823考试反思
    20190820考试反思
    20190818考试反思
    20190817考试反思
    PowerBuilder--Aes128加解密
  • 原文地址:https://www.cnblogs.com/vokie/p/3816324.html
Copyright © 2011-2022 走看看