Android.mk增加本地程序和库的常用模版

来源:互联网 发布:数据化 英文 编辑:程序博客网 时间:2024/06/15 22:18

http://blog.csdn.net/netwalk/article/details/40591237



Android.mk增加本地程序和库的常用模版


Android中增加本地程序或者库,这些程序和库与其所在路径没有关系,只与它们的配置文件Android.mk有关。Android.mk文件中能够主要包含一些系统公共的宏。在一个Android.mk中可以生成多个可执行程序、动态库或者静态库。

A,编译C/C++应用程序的模板

 

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #Demo Exe  
  2.  LOCAL_PATH := $(call my-dir)  
  3.  #include $(CLEAR_VARS)  
  4.  LOCAL_SRC_FILES:main.c  
  5.  LOCAL_MODULE:Demo_exe  
  6.  #LOCAL_C_INCLUDES :=  
  7.  #LOCAL_STATIC_LIBRARIES :=  
  8.  #LOCAL_SHARED_LIBRARIES :=  
  9.  include $(BUILD_EXECUTABLE)  


(解释::=是赋值的意思,+=是追加的意思,$是引用某变量的值)BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。

补充说明:

include$(BUILD_PACKAGE) 则是编译出一个apk

include$(BUILD_STATIC_JAVA_LIBRARY)则是编译出jar包。

B,编译静态库的模板

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #Demo Static Lib  
  2. LOCAL_PATH := $(call my-dir)  
  3. include $(CLEAR_VARS)  
  4. LOCAL_SRC_FILES:= /  
  5.          helloworld.c  
  6. LOCAL_MODULE:libdemo_static  
  7. #LOCAL_C_INCLUDES :=  
  8. #LOCAL_STATIC_LIBRARIES :=  
  9. #LOCAL_SHARED_LIBRARIES :=  
  10. include $(BUILD_STATIC_LIBRARY)  

一般的和上面相似,BUILD_STATIC_LIBRARY表示编译一个静态库.a文件。静态库不会复制到的APK包中,但是能够用于编译共享库。

C,编译动态库的模板

 

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #Demo Shared Lib  
  2.  LOCAL_PATH := $(call my-dir)  
  3.  include $(CLEAR_VARS)  
  4.  LOCAL_SRC_FILES:= /  
  5.           helloworld.c  
  6.  LOCAL_MODULE:libdemo_shared  
  7.  TARGET_PRELINK_MODULES :false  
  8.  #LOCAL_C_INCLUDES :=  
  9.  #LOCAL_STATIC_LIBRARIES :=  
  10.  #LOCAL_SHARED_LIBRARIES :=  
  11.   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

 

Android.mk文件中,还可以指定最后的目标安装路径,用LOCAL_MODULE_PATHLOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用以下的宏进行选择:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. TARGET_ROOT_OUT:表示根文件系统out/target/product/generic/root。  
  2. TARGET_OUT:表示system文件系统out/target/product/generic/system。  
  3. TARGET_OUT_DATA:表示data文件系统out/target/product/generic/data。  
  4. OUT_DIR:代码工程编译时的out生成目录  
  5. PRODUCT_OUT:映象生成目录  


用法示例如下:

 

LOCAL_MODULE_PATH :=$(TARGET_ROOT_OUT)


0 0