Android.mk添加本地程序和库的经常使用模版



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

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

  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。编译静态库的模板

  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,编译动态库的模板

  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_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用下面的宏进行选择:

  1. TARGET_ROOT_OUT:表示根文件系统out/target/product/generic/root
  2.  
  3. TARGET_OUT:表示system文件系统out/target/product/generic/system
  4.  
  5. TARGET_OUT_DATA:表示data文件系统out/target/product/generic/data
  6. OUT_DIR:代码project编译时的out生成文件夹
  7. PRODUCT_OUT:映象生成文件夹

使用方法示比例如以下:

LOCAL_MODULE_PATH :=$(TARGET_ROOT_OUT)

Android.mk添加本地程序和库的经常使用模版的更多相关文章

  1. 在Android Studio添加本地aar包引用

    1.如何在Android Studio添加本地aar包引用 https://jingyan.baidu.com/article/2a13832890d08f074a134ff0.html 2.完成上述 ...

  2. Android.mk添加第三方jar包

    最近引入第三方的jar包进工程,发现光红色的两条并不起作用,加入include $(BUILD_MULTI_PREBUILT) 才起作用,而且顺序很重要,在这里把我参考的两个例子都列出来. 以下为引用 ...

  3. Android.mk添加第三方jar包(转载)

    转自:www.cnblogs.com/hopetribe/archive/2012/04/23/2467060.html LOCAL_PATH:= $(call my-dir)include $(CL ...

  4. 安卓之Android.mk多文件以及动态库编译

    1.多文件编译 多文件编译共有两种方式: (1) 在Android.mk中一一添加 LOCAL_PATH:= $(call my-dir) #定义当前模块的相对路径 include $(CLEAR_V ...

  5. 避免修改Android.mk添加cpp文件路径

    手工输入项目需要编译的cpp文件到Android.mk里的缺点 1)繁琐,如果cpp文件很多,简直无法忍受 2)手工输入过程中容易出现错误 3)如果cpp文件更改名称,需要修改android.mk文件 ...

  6. Android.mk的用法和基础【转】

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  7. Android.mk的用法和基础

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  8. Android.mk 详解

    Android中增加本地程序或者库,这些程序与其所在路径没有关系,只和它们的Android.mk有关系. Android.mk与普通的makefile略有不同,Android.mk具有统一的写法,主要 ...

  9. Android.mk 用法介绍

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

随机推荐

  1. 基于STM32的学习型通用红外遥控设备的设计实现(三)

    CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9 http://blo ...

  2. 单词数 (STL set集合)

    单词数 Problem Description lily的好朋友xiaoou333近期非常空.他想了一件没有什么意义的事情.就是统计一篇文章里不同单词的总数.以下你的任务是帮助xiaoou333解决问 ...

  3. POJ 题目3461 Oulipo(KMP)

    Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26479   Accepted: 10550 Descript ...

  4. maven的pom.xml配置标签

    转自:https://blog.csdn.net/wf787283810/article/details/76188595 <project xmlns="http://maven.a ...

  5. ubuntu中不能远程连接解决

    今天装好ubuntu19.04之后不能远程连接,网上找了很久终于自己解决了.ap 步骤如下:希望对各位有用,哪里不对请指出 第一步我们需要加载openssh-server   等待加载完毕后,     ...

  6. Tomcat配置自签名https

    从JDK中找到keytool.exe,随便复制到一个方便的目录,在命令行中进入这个目录. 第一步:为服务器生成证书 tomcat.keystore,命令中如果是IP方式访问用-ext SAN=ip:1 ...

  7. javascript动画函数封装

    function animate(obj, target) { clearInterval(obj.timer); obj.timer = setInterval(function () { var ...

  8. spring mvc 项目 相关配置文件小结

    web.xml文件主要配置如下: 需要加载的配置文件: 类路径下,可以使用通配符配置  类似:classpath:conf/spring/*/*.xml, <context-param> ...

  9. ​Java面向对象的概念整理

    Java中一切皆是对象! 注意:8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有成员变量.方法可以被调用. 为解决8种基本数据类型不能当成Object类型(所有 ...

  10. 产品开发也要看阵容,APP开发只需五步变得靠谱

    最早认识的一个朋友是程序员,曾经到一家外包公司接单子,小外包公司经常遇到的问题就是和需求方谈产品功能.客户要做外包,对方让他一次性报价,但是客户连功能点自己都不清楚,这时朋友说还是按照具体功能点来做吧 ...