• Android.mk学习 笔记


    感谢:

           原创作品 转载请注明出处:http://www.cnblogs.com/langlang/

          作者email: dayhappyhappy@163.com

      1 LOCAL_PATH := $(call my-dir)
      2 {
      3     首先需要指定LOCAL_PATH变量,用于查找源文件
      4     上面的语句的意思是将LOCAL_PATH变量定义成本文件所在目录路径
      5 }
      6 
      7 #Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始
      8 #以include $(BUILD_XXX)结束。
      9 include $(CLEAR_VARS) //开始
     10 {
     11     问: CLEAR_VARS是什么??
     12     答: CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,
     13     如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。    
     14 }
     15 #包含的头文件
     16 LOCAL_C_INCLUDES += 
     17     hardware/led/include/
     18 
     19 LOCAL_PRELINK_MODULE := false  // :=是赋值的意思
     20 LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw 
     21 {
     22     //LOCAL_MODULE_PATH: 最后的目标安装路径
     23     
     24     问: TARGET_OUT_SHARED_LIBRARIES是什么?
     25     答: 在build/core/envsetup.mk中定义。TARGET_OUT_SHARED_LIBRARIES:= $(TARGET_OUT)/lib
     26     TARGET_ROOT_OUT:表示根文件系统。
     27     TARGET_OUT:表示system文件系统。
     28     TARGET_OUT_DATA:表示data文件系统。
     29     
     30 }
     31 LOCAL_SHARED_LIBRARIES := liblog  //LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称
     32 LOCAL_SRC_FILES := led.cpp
     33 LOCAL_MODULE :=led.default   //LOCAL_MODULE表示模块最终的名称
     34 #LOCAL_MODULE的定义规则,led后面跟有default,led.default能够保证我们的模块总能被硬象抽象层加载到
     35 LOCAL_MODULE_TAGS := eng
     36 include $(BUILD_SHARED_LIBRARY) // 结束
     37 {
     38     include $(BUILD_STATIC_LIBRARY)表示编译成静态库
     39     include $(BUILD_SHARED_LIBRARY)表示编译成动态库。
     40     include $(BUILD_EXECUTABLE)表示编译成可执行程序
     41 }
     42 
     43 LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,
     44 LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称,
     45 LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,
     46 LOCAL_MODULE表示模块最终的名称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。
     47 
     48 
     49 
     50 hardwareledAndroid.mk
     51 include $(call all-subdir-makefiles)
     52 
     53 
     54 frameworksbaseservicesforlinx_led_jniLedService.cpp
     55 frameworksbaseservicesforlinx_led_jniAndroid.mk
     56 {
     57 
     58     LOCAL_PATH:= $(call my-dir) //LOCAL_PATH变量定义成本文件所在目录路径
     59     include $(CLEAR_VARS)
     60     
     61     # [optional, user, eng] 
     62     # eng = required
     63     # optinal = no install on target
     64     LOCAL_MODULE_TAGS := eng
     65     {
     66         LOCAL_MODULE_TAGS :=optional -->> out/target/product/OK6410/symbols/system/
     67         LOCAL_MODULE_TAGS :=eng    -->> out/target/product/Ok6410/system/
     68     }
     69     
     70     # This is the target being built.
     71     LOCAL_MODULE:= libforlinx_runtime
     72     
     73     # Target install path.
     74     LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)
     75     
     76     # All of the source files that we will compile.
     77     LOCAL_SRC_FILES:= 
     78         LedService.cpp
     79     
     80     # All of the shared libraries we link against.
     81     LOCAL_SHARED_LIBRARIES := 
     82         libandroid_runtime 
     83         libcutils 
     84         libhardware 
     85         libhardware_legacy 
     86         libnativehelper 
     87             libsystem_server 
     88         libutils 
     89         libui 
     90             libsurfaceflinger_client
     91         
     92     
     93     # Also need the JNI headers.
     94     LOCAL_C_INCLUDES += 
     95         $(JNI_H_INCLUDE) 
     96             hardware/led/include
     97     
     98     
     99     # No specia compiler flags.
    100     LOCAL_CFLAGS +=
    101     {
    102         LOCAL_CFLAGS += -O3 -fstrict-aliasing -fprefetch-loop-arrays
    103         通过设定编译器操作,优化级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
    104         LOCAL_CFLAGS += -W -Wall
    105         LOCAL_CFLAGS += -fPIC -DPIC
    106         LOCAL_CFLAGS += -O2 -g -DADB_HOST=1 -Wall -Wno-unused-parameter
    107         LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE -DSH_HISTORY
    108         LOCAL_CFLAGS += -DUSEOVERLAY2
    109         根据条件选择相应的编译参数
    110     }
    111     
    112     # Don't prelink this library.  For more efficient code, you may want
    113     # to add this library to the prelink map and set this to true.
    114     LOCAL_PRELINK_MODULE := false
    115     {
    116             Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,
    117         是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。程序运行时的
    118         动态链接尤其是重定位(relocation)的开销对于大型系统来说是很大的。
    119         动态链接和加载的过程开销很大,并且在大多数的系统上, 函数库并不会常常被更动, 每次程序被执行时所进行的链接
    120         动作都是完全相同的,对于嵌入式系统来说尤其如此。因此,这一过程可以改在运行时之前就可以预先处理好,即花一些时间
    121         利用Prelink工具对动态共享库和可执行文件进行处理,修改这些二进制文件并加入相应的重定位等信息,节约了本来在程序
    122         启动时的比较耗时的查询函数地址等工作,这样可以减少程序启动的时间,同时也减少了内存的耗用。 
    123         Prelink的这种做法当然也有代价:每次更新动态共享库时,相关的可执行文件都需要重新执行一遍Prelink才能保
    124         证有效,因为新的共享库中的符号信息、地址等很可能与原来的已经不同了,这就是为什么 android framework代码一改动,
    125         这时候就会导致相关的应用程序重新被编译。
    126         这种代价对于嵌入式系统的开发者来说可能稍微带来一些复杂度,不过好在对用户来说几乎是可以忽略的。
    127     }
    128     
    129     include $(BUILD_SHARED_LIBRARY)
    130 }
  • 相关阅读:
    数据增强
    变态跳台阶
    跳台阶
    数据分析--简单回测框架开发
    数据分析--羊驼交易法则(选股)
    数据分析--动量策略vs反转策略(选股)
    数据分析--PEG策略(选股)
    数据分析--布林带策略(择时)
    数据分析--均值回归策略(选股)
    数据分析--单因子选股策略、多因子选股策略(选股)
  • 原文地址:https://www.cnblogs.com/cy568searchx/p/4135102.html
Copyright © 2020-2023  润新知