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:根据判断条件执行相关编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见web安全漏洞和解决思路

一、常见安全漏洞 服务器类安全漏洞: 服务器含服务器软件类型较多,此次不再一一列举; WEB访问类安全漏洞: XSS漏洞检测 (key: xss) SQL 注入检测 (key: sqldet) 命令/代码注入检测 (key: cmd-injection) …

解决计算机“缺失ffmpeg.dll”报错?修复ffmpeg.dll文件方案

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“ffmpeg.dll丢失”。ffmpeg.dll是FFmpeg多媒体框架中的一个重要组件,它负责处理音频和视频的编解码。当打开某些软件时,如果系统找不到该文件,就会出现这…

每天分享5款软件,让大家工作学习更顺心

​ 快乐不是在于拥有什么,而在于我们和别人分享什么。每天分享五款工具,让大家工作办公更顺心就是我最大的快乐。 1.图片放大增强——Upscayl ​ Upscayl是一款图片放大增强软件,可以利用人工智能技术将低分辨率的图片转换为高分辨率的图片&#xff0c…

Java应用中各类环境变量的优先级及最佳实践

1.引言 Java应用程序的开发和部署过程中,合理利用各类环境变量是关键之一。不同类型的环境变量,如系统环境变量、进程级环境变量、Java启动参数设置的系统属性以及Spring Boot配置文件中的环境变量,它们之间存在优先级差异。 深入理解这些环…

【C生万物】C语言数据类型、变量和运算符

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有…

【日志记录】——单片机可执行文件合并

一:需求场景 现在有一片单片机,执行程序包括自定义boot和应用程序app, 在将打包好的固件给到生产时有以下问题,由于要通过jlink烧录boot,然后上电启动boot,通过boot烧录初始化程序,过程过于复杂&#xff0…

Java Map HashMap集合的基本操作与使用

Java Map HashMap集合的基本操作与使用 package com.zhong.mapdemo.map;import jdk.jfr.Description;import javax.swing.plaf.synth.SynthOptionPaneUI; import java.util.*;/*** ClassName : MapDemo* Description : map 的基本使用* Author : zhx* Date: 2024-02-07 10:29*/…

jsp课程管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 课程管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

[每周一更]-(第85期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要: 应用: 利用NLP技术从医疗文档中自动生成病历摘要,以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类: 应用: 使用文本分类技术自动分类法律文件&#xf…

Maven - 编译报错:程序包 XXX 不存在(多模块项目)

问题描述 编译报错&#xff1a;程序包 XXX 不存在&#xff08;多模块项目&#xff09; 原因分析 检查依赖模块 pom 文件&#xff0c;看是不是引入了如下插件 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-pl…

搜索引擎DuckDuckGo代理指南

DuckDuckGo作為一款搜索引擎&#xff0c;同時擁有自己的流覽器&#xff0c;高度保護用戶隱私&#xff0c;使其有別於其他收集和利用用戶數據進行定向廣告的搜索引擎。然而&#xff0c;單獨使用DuckDuckGo並不能保證線上完全匿名。如果你想進一步保護隱私&#xff0c;那就需要使…

新版MQL语言程序设计:键盘快捷键交易的设计与实现

文章目录 一、什么是快捷键交易二、使用快捷键交易的好处三、键盘快捷键交易程序设计思路四、键盘快捷键交易程序具体实现1.界面设计2.键盘交易事件机制的代码实现 一、什么是快捷键交易 操盘中按快捷键交易是指在股票或期货交易中&#xff0c;通过使用快捷键来进行交易操作的…

Web课程学习笔记--flex布局的基本概念

flex 布局的基本概念 Flexible Box 模型&#xff0c;通常被称为 flexbox&#xff0c;是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力。本文给出了 flexbox 的主要特性&#xff0c;更多的细节将在别的文档中探索。 我们说 flexbox 是一种一维的…

搭建个人网站

一.领取一个免费域名和SSL证书&#xff0c;和CDN 1.打开网站链接&#xff1a;https://www.rainyun.com/z22_ 2.在网站主页上&#xff0c;您会看到一个"登陆/注册"的选项。 3.点击"登陆/注册"&#xff0c;然后选择"微信登录"选项。 4.使用您的…

机器学习-梯度下降法

不是一个机器学习算法是一种基于搜索的最优化方法作用&#xff1a;最小化一个损失函数梯度上升法&#xff1a;最大化一个效用函数 并不是所有函数都有唯一的极值点 解决方法&#xff1a; 多次运行&#xff0c;随机化初始点梯度下降法的初始点也是一个超参数 代码演示 impor…

【Spring Boot】第一篇 创建简单的Spring Boot项目

导航 一. 简介二. 创建简单的Spring Boot项目1. 工具选择和版本确定2. 创建步骤 三. 部署项目四. 测试验证 一. 简介 Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的创建和配置过程&#xff0c;同时提供了很多开箱即用的功能&am…

JavaScript入门学习

JavaScript 一.什么是JavaScript与作用 JavaScript&#xff08;简称“JS”&#xff09; 是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言 嵌入HTML中&#xff0c;与Css一样。对浏览器事件作出响应操作HTML元素及节点。可以动态操作CSS样式。在数据被提交…

NLP中的嵌入和距离度量

本文将深入研究嵌入、矢量数据库和各种距离度量的概念&#xff0c;并提供示例和演示代码。 NLP中的嵌入 嵌入是连续向量空间中对象、单词或实体的数值表示。在NLP中&#xff0c;词嵌入捕获词之间的语义关系&#xff0c;使算法能够更好地理解文本的上下文和含义。 让我们试着用…

毫无基础的人如何入门 Python ?

对于毫无基础的人想要入门Python&#xff0c;以下是一些建议&#xff1a; 了解Python基础知识&#xff1a;首先需要了解Python的基本语法和数据类型&#xff0c;以及如何进行变量赋值、条件判断、循环等操作。可以通过在线教程、书籍、视频教程等途径学习。 选择适合的学习资…

Docker实战01

七十八、compse是什么能干嘛 docker-compose容器编排&#xff08;你的容器实例太多了&#xff0c;你如何管理&#xff0c;容器之间涉及到启动的顺序&#xff0c;容器之间涉及到网络通信的调用&#xff09; 1、是什么&#xff1f; Docker-Compose是Docker官方的开源项目&…