NDK编译脚本

news2024/11/24 13:29:29

一、如何通过NDK进行编译。

1、新建jni文件夹,并将Android.mk、Applicatio n.mk、源文件都放入其中。

 2、编写Android.mk文件。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= test
LOCAL_C_ALL_FILES := test.c
LOCAL_SRC_FILES := $(LOCAL_C_ALL_FILES)
LOCAL_MODULE_PATH := $(LOCAL_PATH)/bin
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
include $(BUILD_EXECUTABLE)

3、编写Application.mk文件。

APP_ABI := armeabi-v7a

 4、执行ndk-build命令生成bin文件。

二、Android.mk基本语法

1、Android.mk基本语法格式示例:

配置环境变量:定义当前模块的相对路径。这个变量被用来寻找C/C++源文件。在该例中,my-dir 是一个由编译系统提供的宏函数,用于返回Android.mk所在目录的路径。

LOCAL_PATH := $(call my-dir)

CLEAR_VARS是编译系统预定义的一个变量,它指向一个特殊的Makefile,这个Makefile负责清除 LOCAL_xxx 的变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES 等)但不会清除 LOCAL_PATH。之所以需要清理这些变量是因为所有的编译控制文件是在一趟make执行过程中完成的,而所有的变量都是全局的,会对其他Android.mk文件产生影响。

include $(CLEAR_VARS)

LOCAL_MODULE 用来给每个模块定义一个名字,不同模块的名字不能相同,不能有空格。这里的名字会传给NDK编译系统,然后加上lib前缀和.so后缀 (例如,变成libhello-jni.so)。注意,如果你在LOCAL_MODULE定义中自己加上了lib前缀,则ndk在处理的时候就不会再加上lib前缀了(为了兼容Android系统的一些源码)。

LOCAL_MODULE := test

编译该模块所需的源文件:使用连接符“\”连接多个源文件

LOCAL_SRC_FILES := test.c

编译所生成的目标文件的格式(类型):

include $(BUILD_EXECUTABLE)

2、编译生成的目标文件类型:

BUILD_EXECUTABLE二进制可执行文件
BUILD_SHARED_LIBRARY动态库.so文件
BUILD_STATIC_LIBRARY静态库.a文件,静态库不会被拷贝到你的安装包中去,它往往用来编译其他动态库。
BUILD_STATIC_JAVA_LIBRARY静态Jar包,使用.class文件打包而成的JAR文件,可以在任何java虚拟机运行
BUILD_JAVA_LIBRARY动态Jar包,在静态jar包基础上使用.dex打包而成的Jar文件,.dex是Android系统使用的文件格式
BUILD_PACKAGEapk文件

3、Android.mk中引用资源:

LOCAL_STATIC_LIBRARIES+=libxxx引用系统静态库
LOCAL_SHARED_LIBRARIES += libxxx引用系统动态库
 LOCAL_LDFLAGS := -L/PATH -lxxx

引用第三方库文件

引入第三方动态库:

LOCAL_LDFLAGS := -L ./lib/ -ltest3 或

LOCAL_LDFLAGS := -L$(LOCAL_PATH)/lib/ -ltest3

引入第三方静态库:

LOCAL_LDFLAGS := $(LOCAL_PATH)/lib/libtest2.a

 LOCAL_C_INCLUDES := path引入第三方头文件
LOCAL_STATIC_JAVA_LIBRARIES := libarity android-support-v4 guava引入共享Jar包

 

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

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

相关文章

centos7虚拟机在集群zookeeper上面配置hbase的具体操作步骤

系列文章目录 centos7配置静态网络常见问题归纳_centos7网络问题 centos7克隆虚拟机完成后的的一些配置介绍 虚拟机centos7配置Hadoop单节点伪分布配置教程 卸载centos7自带的jdk的操作步骤 centos7配置zookeeper本地模式与集群模式的详细教程 centos7虚拟机配置集群时间…

HTML引入Typescript编译JS文件 :Uncaught ReferenceError: exports is not defined

初学TypeScript,尝试在html引入ts编译出来的js文件: 报错:Uncaught ReferenceError: exports is not defined 以下是代码: 创建了TS:加入export {}形成独立的作用域,其他ts文件重复声明相同名称的变量。 export {} let str &…

Python和Java二选一该学啥?

首先我们需要了解Python和 Java分别是什么 根据IEEE Spectrum 2022年编程语言排名前十的分别是:Python,C,C,C#,Java,SQL,JavaScript,R,HTML,TypeScript。从该…

专访丨AWS量子网络中心科学家Antía Lamas谈量子计算

​ Anta Lamas Linares(图片来源:网络) 47岁的Anta Lamas Linares出生于西班牙西北部的圣地亚哥德孔波斯特拉。她在当地学习物理学,然后在牛津大学和加利福尼亚继续深造。后来,她在新加坡领导了亚马逊网络服务&#xf…

Java中线程的常用操作-后台线程、自定义线程工厂ThreadFactpry、join加入一个线程、线程异常捕获

场景 Java中Thread类的常用API以及使用示例: Java中Thread类的常用API以及使用示例_霸道流氓气质的博客-CSDN博客 上面讲了Thread的常用API,下面记录下线程的一些常用操作。 注: 博客:霸道流氓气质的博客_CSDN博客-C#,架构之…

Doris(4):建表

可以通过在mysql-client中执行以下 help 命令获得更多帮助: help create table 1 基本概念 在 Doris 中,数据都以表(Table)的形式进行逻辑上的描述。 1.1 Row & Column 一张表包括行(Row)和列&#…

从零开始:如何集成美颜SDK到你的应用中

现在,随着人们对于美的追求不断提升,美颜应用已经成为了人们生活中不可或缺的一部分。在应用中,美颜功能的实现离不开美颜SDK的支持。那么,如何集成美颜SDK到你的应用中呢?下面,我们就来一步步了解。 第一…

Linux复习 / 线程相关----线程互斥 QA梳理

文章目录前言线程互斥Q:什么是临界资源?临界区呢?Q:什么是互斥?Q:数据不一致的本质是什么?Q:用锁对共享资源进行保护的前提是:锁也要作为共享资源被其他线程使用。那么用…

独家 | 招商银行:玩转校园招聘新方式 挖掘金融科技新人才

数字经济时代,金融科技人才队伍的引进与培养是招商银行人才体系建设的关键任务。 01.金融科技校招2大核心课题 招商银行数字化转型过程中,线上化、生态化、平台化、智能化、数据化全面加速发展,对人才队伍能力提出新要求。 2大核心课题&am…

Git的一些使用

虽然说这也不是啥重要的内容,但是作为计算机人也得学学,了解了解。 一些预备内容 首先得下载git,这个就不多说了。 安装完了之后,首先要做的就是设置用户名称和邮箱地址,因为每次Git提交都会使用该信息,…

I.MX6ULL_Linux_驱动篇(33) pinctrl与gpio子系统

上一章我们编写了基于设备树的 LED 驱动,但是驱动的本质还是没变,都是配置 LED 灯所使用的 GPIO 寄存器,驱动开发方式和裸机基本没啥区别。 Linux 是一个庞大而完善的系统,尤其是驱动框架,像 GPIO 这种最基本的驱动不可…

Linux实战学习

文章目录一、Linux权限信息权限控制信息chmodifconfigpingnmap netstatps killzip unzip常用快捷键二、搭建Java环境yumJDKTomcatMysql三、部署Web项目到服务器一、Linux权限信息 Linux中,拥有最大权限的账户为: root(超级管理员),而普通用户在很多地方…

UWB成为智慧工厂时代的代表技术

UWB成为智慧工厂时代的代表技术 随着智慧工厂的到来,在人员安全问题较为重要的行业中,为了避免人员安全事故的出现,各家企业都逐步装备了UWB定位系统。UWB信号的辐射非常低,通常只有手机辐射的千分之一,因此在工业上应…

【 Spring MVC 核心功能(二) - 获取参数(上)】

文章目录一、获取单个参数二、获取多个参数三、获取对象四、后端参数重命名4.1 使用 RequestParam 重命名参数4.2 RequestParam 中参数必传4.3 设置非必传参数五、使用 PathVariable 获取URL中参数一、获取单个参数 在 Spring MVC 中可以直接⽤⽅法中的参数来实现传单个参&…

uni-app:登录与支付-- 三秒后自动跳转

三秒后自动跳转 三秒后自动跳转到登录页面 需求描述:在购物车页面,当用户点击 “结算” 按钮时,如果用户没有登录,则 3 秒后自动跳转到登录页面 在 my-settle 组件的 methods 节点中,声明一个叫做 showTips 的方法&am…

Vue:生命周期

1、定义 生命周期函数(俗称:钩子函数) 根据vue整个渲染机制,在渲染的每个关键点上,提供对应的函数,进行一些相关的业务操作。 2、四个阶段 初始阶段:beforeCreate():可以加loadi…

vue-qr 生成二维码-使用

1、vue-qr官网说明 vue-qr - npm 2、使用 2.1 安装 vue-qr npm install vue-qr --save 2.2 代码 import vueQr from vue-qr; <el-dialog title"摘要" :visible.sync"openSummary" width"700px" append-to-body> <el-row> <el…

Oracle基础(表空间、用户、授权、表、数据类型、数据导入导出等)

Oracle基础(表空间、用户、授权、表、数据类型、数据导入导出等1 创建表空间1.1 概述1.2 语法&#xff1a;1.3 示例&#xff1a;2 创建用户2.1 语法2.2 示例2.3 用户授权类型3 表的创建、修改、删除3.1 表创建3.1.1 概述3.1.2 语法3.1.3 示例3.1.4 表的数据类型3.2 表修改3.2.1…

Oracle系列之七:表的创建与管理

Oracle表的创建与管理1. 表的创建2. 表的修改3. 表中数据的增删改查4. 表的Merge5. 表的删除6. 表的重命名7. 表的索引8. 表的约束9. dual表表是Oracle数据库中最基础的存储对象&#xff0c;用于存储数据。本文主要介绍了Oracle表的创建与管理&#xff0c;包括表的创建、修改、…

图像处理:双边滤波算法

今天主要是回顾一下双边滤波&#xff0c;我曾经在这篇——图像处理&#xff1a;推导五种滤波算法中推导过它&#xff0c;其中包含了我自己写的草稿图。 目录 双边滤波算法原理 &#xff08;1&#xff09;空间域核 &#xff08;2&#xff09;值域核 理解双边滤波 空域权重​…