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

Android.mk 语法详解

一.Android.mk简介

Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成(exe,so,a,jar,apk)等文件。

二.Android.mk编写

分析一个最简单的Android.mk

LOCAL_PATH := $(call my-dir)  //定义了当前模块的相对路径include $(CLEAR_VARS)  //清空当前环境变量LOCAL_MODULE:= test  //编译生成的目标名称LOCAL_SRC_FILES := test.c  //编译该模块需要的源文件include $(BUILD_EXECUTABLE)  //编译所生成的目标文件格式

三.Android.mk编译静态库动态库

编译动态库:编译类型修改为 BUILD_SHARED_LIBRARY

编译静态库:编译类型修改为 BUILD_STATIC_LIBRARY

Android.mk 编译多个目标文件

编译动态库

C/C++ 文件编译生成静态库.so文件参考如下:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
# 生成libhell.so
LOCAL_MODULE = libhello 
​​​LOCAL_CFLAGS = $(L_CFLAGS) 
LOCAL_SRC_FILES = hello.c 
LOCAL_C_INCLUDES = $(INCLUDES) 
LOCAL_SHARED_LIBRARIES := libcutils 
LOCAL_COPY_HEADERS_TO := libhello 
LOCAL_COPY_HEADERS := hello.h 
#编译动态库 BUILD_SHARED_LIBRARY
include $(BUILD_SHARED_LIBRARY) 

编译静态库

C/C++ 文件编译生成静态库.a文件参考如下:

#编译静态库 
LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
# 生成libhell.a
LOCAL_MODULE = libhello
LOCAL_CFLAGS = $(L_CFLAGS) 
LOCAL_SRC_FILES = hello.c 
LOCAL_C_INCLUDES = $(INCLUDES) 
LOCAL_SHARED_LIBRARIES := libcutils 
LOCAL_COPY_HEADERS_TO := libhello 
LOCAL_COPY_HEADERS := hellos.h 
# 编译 静态库 BUILD_STATIC_LIBRARY
include $(BUILD_STATIC_LIBRARY) 

四.Android引入系统库

引用静态库
LOCAL_STATIC_LIBRARIES += libxxxxx

引用动态库
LOCAL_SHARED_LIBRARIES += libxxxxx

引用第三方库文件
LOCAL_LDFLAGS:=-L/PATH -Lxxx

引用第三方头文件
LOCAL_C_INCLUDES :=path

五.Android编译apk jar包

编译apk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# 生成hello apk
LOCAL_PACKAGE_NAME := hello
include $(BUILD_PACKAGE)

 编译jar包:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# 生成 hello
LOCAL_MODULE := hello
# 编译生成静态jar包
include $(BUILD_STATIC_JAVA_LIBRARY)
#编译生成共享jar
include $(BUILD_JAVA_LIBRARY)

六.Android.mk 中的判断语句

ifeq($(VALUE), x) #ifneqdo_yeselsedo_noendififeq/ifneq:根据判断条件执行相关编译

相关文章:

Android.mk 语法详解

一.Android.mk简介 Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成(exe,so,a,jar,apk)等文件。 二.Android.mk编写 分析一个最简单的Android.mk LOCAL_PATH : $(call my-dir) //定义了…...

ChatGPT高效提问—prompt基础

ChatGPT高效提问—prompt基础 ​ 设计一个好的prompt对于获取理想的生成结果至关重要。通过选择合适的关键词、提供明确的上下文、设置特定的约束条件,可以引导模型生成符合预期的回复。例如,在对话中,可以使用明确的问题或陈述引导模型生成…...

Elasticsearch 中的索引的分区(Shards)和副本(Replicas)的使用

Elasticsearch是一个高性能的、分布式的搜索与数据分析引擎,广泛用于全文搜索、结构化搜索、分析以及这三者的组合场景。在Elasticsearch中,“索引”(Index)是其最基本的数据管理单位,可以类比为传统关系数据库中的“数…...

智慧工地反光衣识别检测系统-自动识别是否穿着制定工作服---豌豆云

智慧工地反光衣识别检测特定地区工作人员不穿反光服装个人行为预警,一旦检测到某些不穿反光服装施工作业人员智慧工地反光衣识别检测马上开启警报。 真真正正做到事前预警、事中检测、过后管理。安全操作规程工作人员从繁杂无趣的盯显示屏的每日任务中抽身出去。 …...

vue绘制语音波形图---wavesurfer.js

文章目录 创建实例optionsmethod接收Blob流 https://wavesurfer.xyz/ 创建实例 引入插件&#xff1a;import WaveSurfer from "wavesurfer.js"创建实例对象&#xff1a;this.wavesurfer WaveSurfer.create(options); <div id"waveform"><!-- t…...

MPLS——多协议标签交换

目录 1 多协议标签交换 MPLS 1.1 MPLS 的工作原理 1.1.1 MPLS 工作特点 1.1.2 MPLS 协议的基本原理 1.1.3 MPLS 的基本工作过程 1.2 转发等价类 FEC 1.2.1 FEC 用于负载平衡 1.3 MPLS 首部的位置与格式 1.3.1 MPLS 首部的位置 1.3.2 MPLS 首部的格式 1.4 新一代的…...

Idea使用Lombok失效解决方案

问题描述 启动项目时&#xff0c;使用lombok插件中slf4g注解后其中的log显示找不到变量 解决方案 在以下位置加入该配置-Djps.track.ap.dependenciesfalse Preferences | Build, Execution, Deployment | Compiler 之后保存应用就好&#xff0c;亲测有效。...

Java实现网上药店系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药品档案模块2.4 药品订单模块2.5 药品收藏模块2.6 药品资讯模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 药品表3.2.3 药品订单表3.2.4 药品收藏表3.2.5 药品留言表…...

谁是嫌疑犯问题

问题描述&#xff1a; 有6名犯罪嫌疑人A、B、C、D、E、F&#xff0c;已知如下事实&#xff1a; A、B至少有1人作案&#xff1b; A、E、F三人中至少有2人参与作案&#xff1b; A、D不可能是同案犯&#xff1b; B、C或同时作案&#xff0c;或与本案无关&#xff1b; C、D中…...

Netty中使用编解码器框架

目录 什么是编解码器&#xff1f; 解码器 将字节解码为消息 将一种消息类型解码为另一种 TooLongFrameException 编码器 将消息编码为字节 将消息编码为消息 编解码器类 通过http协议实现SSL/TLS和Web服务 什么是编解码器&#xff1f; 每个网络应用程序都必须定义如何…...

【漏洞复现】斐讯FIR151M路由器未授权下载漏洞

Nx01 产品简介 斐讯数据通信技术有限公司成立于2009年&#xff0c;是为用户提供智慧家庭领域智能产品和云服务的科技创新性企业。 Nx02 漏洞描述 斐讯 FIR151M路由器配置文件未授权下载漏洞,攻击者可利用该漏洞获取敏感信息。 Nx03 产品主页 fofa-query: app"PHICOMM-F…...

【SpringBoot】application配置(5)

type-aliases-package: com.rabbiter.cm.domaintype-aliases-package: 这个配置用于指定mybatis的别名&#xff0c;别名是一个简化的方式&#xff0c;让你在Mapper xml 文件中引用java类型&#xff0c;而不需要使用使用完整的类名。例如&#xff0c;如果你在 com.rabbiter.cm.d…...

Linux安全技术与iptables防火墙

一.安全技术&#xff1a; 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,…...

QT QCombox 样式表 比起作用

对QCombox在ui编辑器中进行美化&#xff0c;发现外表美化有效果&#xff0c;但下拉框的高度美化的没效果&#xff0c;查看样式表也没有没问题&#xff0c;样式表中内容如下。 QComboBox#curve_comboBox {min-width: 150px;min-height:40;max-width: 150px;max-height:40;borde…...

在 Windows 10 上使用 Visual Studio 2022 进行 C++ 桌面开发

工具下载链接&#xff1a;https://pan.quark.cn/s/c70b23901ccb 环境介绍 在今天的快速发展的软件开发行业中&#xff0c;选择合适的开发环境是非常关键的一步。对于C开发人员来说&#xff0c;Visual Studio 2022&#xff08;VS2022&#xff09;是一个强大的集成开发环境&…...

如何安装x11vnc并结合cpolar实现win远程桌面Deepin

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff…...

C++基础入门Day1

C基础入门Day1 1.1 第一个C程序 编写一个C程序需要四个步骤 创建项目创建文件编写代码运行程序 1.1.1 创建项目 VS2022 1.1.2 创建文件 main.cpp 1.1.3 编写代码 注意&#xff1a;编写时键盘必须调整成英文 基本框架 #include <iostream> using namespace std…...

【高质量精品】2024美赛A题22页word版成品论文+数据+多版本前三问代码及代码讲解+前四问思路模型等(后续会更新)

一定要点击文末的卡片&#xff0c;进入后&#xff0c;即可获取完整资料后续参考论文!! 整体分析:这个题目是一个典型的生态系统建模问题&#xff0c;涉及到动物种群的性比例变化、资源可用性、环境因素、生态系统相互作用等多个方面。这个题目的难点在于如何建立一个合理的数学…...

Spark context stopped while waiting for backend

目录 报错信息 解决办法 解释 报错信息 Spark context stopped while waiting for backend 翻译过来就是 &#xff1a;Spark上下文在等待后端时停止 解决办法 通过在yarn-site.xml中添加如下配置项&#xff0c;并重启yarn&#xff0c;程序在 “–driver-memory 600m --e…...

保研机试算法训练个人记录笔记(三)

目录 基于范围的for循环 push_back return {it->second, i} 基于范围的for循环 for (const string& ageValue : age["Peter"]) 是C中的一种范围基于的for循环&#xff08;也称为基于范围的for循环&#xff09;&#xff0c;它用于遍历容器中的元素。在这个…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...