当前位置: 首页 > news >正文

Android.mk的用法

前言

Android.mk 文件是 Android 编译系统中用于描述项目源文件、库和模块的 Makefile。它采用 GNU Make 的语法,但也包含了一些特定于 Android 编译系统的规则和变量。以下是对其语法和使用方法的详细解释及示例。

一:模块种类

一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块(具体类型取决于模块的功能和构建输出)。按类型主要有以下种类:

  • 共享库 (Shared Libraries)

    • 模块输出一个共享库(动态链接库),可以被其他模块在运行时动态加载。
    • 使用 include $(BUILD_SHARED_LIBRARY) 包含构建规则。
  • 静态库 (Static Libraries)

    • 模块输出一个静态库,编译时将其链接到其他模块。
    • 使用 include $(BUILD_STATIC_LIBRARY) 包含构建规则。
  • 可执行文件 (Executables)

    • 模块输出一个可执行文件。
    • 使用 include $(BUILD_EXECUTABLE) 包含构建规则。
  • 预编译库 (Prebuilt Libraries)

    • 模块使用预编译的库,而不是源代码编译的库。
    • 预编译共享库使用 include $(PREBUILT_SHARED_LIBRARY)
    • 预编译静态库使用 include $(PREBUILT_STATIC_LIBRARY)
  • Java 库 (Java Libraries)

    • 模块输出一个 Java 库(.jar 文件)。
    • 使用 include $(BUILD_STATIC_JAVA_LIBRARY)include $(BUILD_SHARED_JAVA_LIBRARY)
  • Android 应用 (Android Applications)

    • 模块输出一个 Android 应用(.apk 文件)。
    • 使用 include $(BUILD_PACKAGE)
  • 多媒体插件 (Multimedia Plugins)

    • 模块输出一个多媒体插件,通常用于媒体框架中。
    • 使用 include $(BUILD_PLUGIN)
  • 静态预编译头文件 (Static Prebuilt Headers)

    • 模块使用预编译的头文件。
    • 使用 include $(BUILD_PREBUILT)
  • 测试模块 (Test Modules)

    • 模块输出用于测试的可执行文件或库。
    • 例如 Google Test 使用 include $(BUILD_NATIVE_TEST)

二:各模块示例

共享库

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := my_shared_lib
LOCAL_SRC_FILES := my_shared_lib.cpp
include $(BUILD_SHARED_LIBRARY)

静态库

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := my_static_lib
LOCAL_SRC_FILES := my_static_lib.cpp
include $(BUILD_STATIC_LIBRARY)

可执行文件

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := my_executable
LOCAL_SRC_FILES := main.cpp
include $(BUILD_EXECUTABLE)

预编译共享文件 

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := prebuilt_shared_lib
LOCAL_SRC_FILES := $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libprebuilt.so
include $(PREBUILT_SHARED_LIBRARY)

java静态库

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := my_java_lib
LOCAL_SRC_FILES := $(call all-java-files-under, src)
include $(BUILD_STATIC_JAVA_LIBRARY)

Android应用

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := my_app
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
include $(BUILD_PACKAGE)

 多媒体插件

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := my_plugin
LOCAL_SRC_FILES := plugin.cpp
include $(BUILD_PLUGIN)

静态预编译头文件

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := prebuilt_header
LOCAL_SRC_FILES := $(LOCAL_PATH)/include/prebuilt_header.h
include $(BUILD_PREBUILT)

Google Test模块

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := my_test
LOCAL_SRC_FILES := test.cpp
LOCAL_STATIC_LIBRARIES := gtest
include $(BUILD_NATIVE_TEST)

通过这些示例,可以看到 Android.mk 文件可以配置各种类型的模块,每种类型都有其特定的构建规则和变量配置。根据项目需求选择合适的模块类型,配置相应的构建规则,可以有效地管理和构建 Android 项目。

下面是一个综合示例(包含一些不常用的语法):

# 获取当前目录
LOCAL_PATH := $(call my-dir)  # 获取当前 Android.mk 文件所在的路径# ========== 模块 1: 共享库 ==========
include $(CLEAR_VARS)  # 清除以前定义的所有 LOCAL_ 变量
LOCAL_MODULE := mysharedlibrary  # 定义共享库模块名称为 mysharedlibrary
LOCAL_SRC_FILES := main.cpp util.cpp  # 指定共享库的源文件列表
LOCAL_C_INC

相关文章:

Android.mk的用法

前言 Android.mk 文件是 Android 编译系统中用于描述项目源文件、库和模块的 Makefile。它采用 GNU Make 的语法,但也包含了一些特定于 Android 编译系统的规则和变量。以下是对其语法和使用方法的详细解释及示例。 一:模块种类 一个Android.mk file用来向编译系统描述你的源…...

android studio CreateProcess error=2, 系统找不到指定的文件

【问题记录篇】 在AndroidStudio编译开发jni相关工程代码的时候,编译遇到的这个报错: CreateProcess error2, 系统找不到指定的文件。排查处理步骤: 先查看Build Output的具体日志输出 2.了解到问题出在了NDK配置上,此时需要根据自己的gra…...

jQuery如何把单选框设置为选中状态

在网页开发中,我们经常需要使用表单元素来收集用户数据。其中,单选框(radio button)是一种常见的表单元素,用于从一组选项中选择一个。使用jQuery,我们可以轻松地控制这些单选框的状态,包括将它…...

Mware Fusion Pro 13 mac版:一键掌控虚拟世界

VMware Fusion Pro 13是一款功能卓越的虚拟化软件,专为Mac操作系统量身打造。这款软件为用户提供了一个一站式的虚拟化解决方案,能够满足各种多样化的需求。 VMware Fusion Pro 13 Mac获取 VMware Fusion Pro 13的强大之处在于其采用了最 先进的虚拟化…...

PTA - 函数的定义与调用

编写一个名为collatz()的函数,它有一个名为number的参数: 如果number是偶数,那么collatz()就打印number加上2如果number是奇数,那么collatz()就打印number乘以2 函数接口定义: def collatz(number)裁判测试程序样例: /* 请在这里填写答案…...

Solr7.4.0报错org.apache.solr.common.SolrException

文章目录 org.apache.solr.common.SolrException: Exception writing document id MATERIAL-99598435990497269125316 to the index; possible analysis error: cannot change DocValues type from NUMERIC to SORTED_NUMERIC for field "opt_time"Exception writing…...

从2-3-4树开始理解红黑二叉树(JAVA代码手撸版)

经典的红黑二叉树在新增/删除数据时维持自平衡始终对应着一个2-3-4 树。本文只关注2-3-4 对应的经典红黑二叉树。 暂时不考虑 2-3 树对应的左倾红黑二叉树。 背景知识 2-3-4 树简介 一棵 2-3-4 树的结点分为 内部结点 (internal nodes) 和 叶子结点 (leaf nodes) ,…...

模板类与继承

1模板类继承普通类&#xff08;常见&#xff09; #include<iostream> using namespace std; class AA { public:int m_a;AA(int a) :m_a(a) { cout << "调用了AA的构造函数\n"; }void func1() { cout << "调用func1&#xff08;&#xff09;…...

随手记:uniapp图片展示,剩余的堆叠

UI效果图&#xff1a; 实现思路&#xff1a; 循环图片数组&#xff0c;只展示几张宽度就为几张图片边距的宽度&#xff0c;剩下的图片直接堆叠展示 点击预览的时候传入当前的下标&#xff0c;如果是点击堆叠的话&#xff0c;下标从堆叠数量开始计算 <template><…...

微服务迁移、重构最佳经验

1. 了解现有的单体应用: - 应用架构和技术栈 要了解现有的应用架构和技术栈&#xff0c;可以采取以下几个步骤&#xff1a; 1. 了解应用的背景和目标&#xff1a;首先要了解应用的背景和目标&#xff0c;包括应用所属的行业、应用的类型&#xff08;例如Web应用、移动应用等…...

【Python】从0开始的Django基础

Django框架基础 unit01一、Django基础1.1 什么是Django?1.2 安装与卸载1.2.1 Python与Django的版本1.2.2 安装1.2.3 查看Django版本1.2.4 卸载 二、Django项目2.1 概述2.2 创建项目2.3 启动项目2.4 项目的目录结构2.5 配置 三、URL 调度器3.2 定义URL路由3.2 定义首页的路由3.…...

红黑树(数据结构篇)

数据结构之红黑树 红黑树(RB-tree) 概念&#xff1a; 红黑树是AVL树的变种&#xff0c;它是每一个节点或者着成红色&#xff0c;或者着成黑色的一棵二叉查找树。对红黑树的操作在最坏情形下花费O(logN)时间&#xff0c;它的插入操作使用的是非递归形式实现红黑树的高度最多是…...

高级视频编码器性能对比(H265、VP9、AV1)

1、背景介绍 目前在视频编解码器中&#xff0c;H264已经成为绝对的主流&#xff0c;被大部分设备、浏览器所支持。虽然有更先进的编码器推出&#xff0c;但是受限于推广速度和设备支持成本&#xff0c;一直未能成为主流。 今年公司目标是持续降本增效&#xff0c;现在将”屠刀…...

示例:WPF中DataGrid简单设置合并列头

一、目的&#xff1a;应用DataGridTemplateColumn列模板&#xff0c;去拆分列头和单元格布局的方式设置列头合并样式 二、实现 效果如下 三、环境 VS2022 四、示例 应用DataGridTemplateColumn自定义列头信息和单元格信息 <DataGrid AutoGenerateColumns"False"…...

Matlab图像处理——细胞图像的分割和计数显示

一. 项目介绍 使用MATLAB编写的细胞图像分割及计数系统&#xff0c;实现了对图像内细胞的计数&#xff0c;以及对每个细胞周长和面积的测量&#xff0c;并分别展示了分割后的每个细胞的图像。实验步骤共分为图像预处理、图像预分割、空洞填充、黏连细胞分割、细胞个数统计、细胞…...

六爻排盘神机

选修课留了3000字的论文......确实&#xff0c;削微有那么一点小困难…… 但是&#xff0c;倘若我拿出已经占了6419个字符的 “六爻排盘神机” &#xff0c;阁下…应该…不会…骂我吧 且看&#xff0c;六爻排盘神机&#xff01; import random import datetime from lunarcale…...

【ARMv8/v9 GIC 系列 2.1 -- GIC SPI 中断的 pending 和 clear pending 配置】

文章目录 GIC Pending 和 Clear PendingGICD_ISPENDR<n>GICD_ICPENDR<n>参数<n>编号解释使用举例设置中断ID 100为挂起状态清除中断ID 100的挂起状态 代码实现小结 GIC Pending 和 Clear Pending 在ARMv8体系结构中&#xff0c;GICD_ISPENDR<n> 和 GI…...

SpringBoot集成logback初始化源码解析(部分)

一.SpringBoot配置扩展点 SpringBoot日志模块使用监听的方式进行初始化&#xff0c;在SpringBoot项目启动后&#xff0c;会通知日志监听器 在日志监听器中ApplicationStartingEvent事件用来确定到底使用哪个日志系统&#xff0c;logback log4j等 在日志监听器中ApplicationEn…...

【Linux工具】yum软件包管理器与Vim编辑器的高效运用

目录 Linux 软件包管理器 YUM 什么是软件包 安装工具 rzsz 及注意事项 查看软件包 安装和卸载软件 安装软件 卸载软件 Linux 开发工具 编辑器 - Vim 使用 ​编辑 Vim 与 Vi 的区别 Vim 的基本概念 三种模式 Vim 的基本操作 操作尝试&#xff1a; Vim 命令集解释…...

Matlab数学建模实战应用:案例4 - 图像处理

目录 前言 一、图像处理基础 二、Matlab图像处理工具箱 三、案例&#xff1a;图像锐化、去噪和分割 步骤 1&#xff1a;读取和显示图像 步骤 2&#xff1a;图像锐化 步骤 3&#xff1a;图像去噪 步骤 4&#xff1a;图像分割 完整代码示例 四、实际应用 实例总结 总…...

Studying-代码随想录训练营day15| 222.完全二叉树的节点个数、110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

第十五天&#xff0c;二叉树part03&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 257.完全二叉树的节点个数 110.平衡二叉树 257.二叉树的所有路径 404.左叶子之和 总结 257.完全二叉树的节点个数 文档讲解&#xff1a;代码随想录完全二叉树的节点个数 视频讲解…...

Python 基础:异常

目录 一、异常概念二、处理异常2.1 抛出异常2.2 使用 try-except 代码块2.3 使用 try-except-else 代码块2.4 静默失败 三、总结 遇到看不明白的地方&#xff0c;欢迎在评论中留言呐&#xff0c;一起讨论&#xff0c;一起进步&#xff01; 本文参考&#xff1a;《Python编程&a…...

XML 应用程序

XML 应用程序 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。它是一种自我描述的语言&#xff0c;允许用户定义自己的标签和文档结构。XML广泛应用于各种应用程序中&#xff0c;包括网站开发、数据交换、文档管理等。本文将探讨XML的一些主要…...

SprringCloud Gateway动态添加路由不重启

文章目录 前言&#xff1a;一、动态路由必要性二、SpringCloud Gateway路由加载过程RouteDefinitionLocator接口PropertiesRouteDefinitionLocator类DiscoveryClientRouteDefinitionLocatorInMemoryRouteDefinitionRepositoryCompositeRouteDefinitionLocator类CachingRouteDef…...

Windows安装mysql

首先去官网下载社区版本的mysql&#xff08;如果连不上&#xff0c;挂梯子&#xff09; https://www.mysql.com/downloads/ 2. 去配置环境变量path 3. 在cmd里面初始化数据库&#xff08;在搜索框输入cmd&#xff0c;或者在资源管理器下搜索烂输入cmd回车就行&#xff09; my…...

chatgpt: linux 下用纯c 编写ui

在Linux下用纯C语言编写用户界面&#xff08;UI&#xff09;&#xff0c;通常会使用GTK或Xlib。GTK是一个更高级的库&#xff0c;提供了丰富的控件和功能&#xff0c;而Xlib则是一个更底层的库&#xff0c;提供了直接操作X Window系统的功能。 下面是一个使用GTK在Linux上创建…...

Java十六进制Dump打印数据

代码 package test;import java.io.IOException;import sun.misc.HexDumpEncoder;@SuppressWarnings("restriction")...

某棋牌渗透测试

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、信息收集 这里通过fofa进行收集&#xff0c;语法为&#xff1a;body某棋牌 && titlexxx 图1-1 fofa资产收集 …...

JAVA面试(六)

缓存 MemcachedredisRedis常见数据类型和使用Redis缓存持久化RDB-快照AOF-追加文件 Redis数据过期机制惰性删除定期删除Redis缓存淘汰策略&#xff08;8种&#xff09;算法LRU &#xff08;Least Recently Used&#xff09;&#xff1a;最近最少使用LFU&#xff08;Least Frequ…...

【C语言】手写学生管理系统丨附源码+教程

最近感觉大家好多在忙C语言课设~ 我来贡献一下&#xff0c;如果对你有帮助的话谢谢大家的点赞收藏喔&#xff01; 1. 项目分析 小白的神级项目&#xff0c;99%的程序员&#xff0c;都做过这个项目&#xff01; 掌握这个项目&#xff0c;就基本掌握 C 语言了&#xff01; 跳…...

哪个网站做加盟的比较靠谱/南京seo优化公司

报错信息&#xff1a;指明了是Attribute name cannot be null or empty&#xff0c;但是就是不告诉你具体是哪行代码出错了。我真的是吐了。 org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resou…...

网站开发中要做哪些东西/seo是怎么优化

当用户单击一个非激活的顶级窗体&#xff0c;或非激活的顶级窗体的子窗体时&#xff0c;系统就会发送WM_MOUSEACTIVATE消息&#xff08;还包括其他消息&#xff09;给顶级窗体或子窗体&#xff0c;该消息在WM_NCHITTEST消息之后&#xff0c;但在button-down消息之前。当把 WM_M…...

做怎样的网站能赚钱/南京seo公司教程

生命周期 Activity包含5种状态&#xff0c;涉及7种方法 1. 启动状态 2. 运行状态 *** 即使内存不足&#xff0c;Android先销毁栈底的Activity&#xff0c;来确保当前Activity正常运行 3. 暂停状态 &#xff08;可见&#xff0c;无法获取焦点 4. 停止状态 &#xff08;完全不可…...

做网站需要什么/建站公司最新报价

实现swap操作的方法有多种&#xff0c;此博客用于更新记录一些swap方法 通过临时存储值进行交换 int temp a; a b; b temp;通过位运算来进行交换&#xff0c;代码如下&#xff1a; a^b; b^a; a^b;此处主要应用的知识是与异或有关的知识&#xff0c;补充如下&#xff1a; …...

旅游网站建设功能意义/五种关键词优化工具

for i in ipcs |grep wqq|awk {print $2} do ipcrm -m $i ipcrm -s $i done 是linux/uinx上提供关于一些进程间通信方式的信息&#xff0c;包括共享内存&#xff0c;消息队列&#xff0c;信号 ipcs用法ipcs -a 是默认的输出信息 打印出当前系统中所有的进程间通信方式的信息ip…...

网站建设开发教程视频/抖音代运营大概多少钱一个月

Win10我的电脑怎么放在桌面上?Win10桌面显示我的电脑方法图解Win10我的电脑怎么放在桌面上?Win10桌面显示我的电脑方法图解 随着Win10正式发布&#xff0c;如今很多电脑爱好者朋友都下载安装了最新的Win10预览版&#xff0c;不过Win10系统令不少小白用户摸不着头脑&#xff0…...