Android NDK开发(一)生成指定平台的ndk及根据native接口生成jni接口

server/2024/9/20 8:58:11/ 标签: android

为了初步了解Android NDK开发,本文记录了Android Studio使用过程中的部分内容。


本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习,梳理总结后写下文章,对音视频相关内容感兴趣的读者,可以点击观看课程网址:零声教育


CPU架构

Android⽬前⽀持以下7种ABIs(Application Binary Interface的缩写,即应⽤⼆进制接⼝):mips,mips64,X86,X86–64,arm64-v8a,armeabi,armeabi-v7a

CPU框架描述市场占有
arm64-v8a第8代ARM,64位⽬前主流版本
armeabi-v7a第7代ARM,32位⼀些⽼旧⼿机从2011年起⼤规模使⽤
armeabi第5代ARM,32位,NDK r17不再⽀持极少,可忽略
x86_64
X86
intel,64位/32位,可兼容arm的so库1%以下
mips64/mipsNDK r17不再⽀持极少⽤于⼿机,可以忽略

Cpu架构会向下兼容

app->cpp->CMakeLists.txxt 内容注释:

cmake_minimum_required(VERSION 3.4.1)
add_library( # 库名native-lib# 是否生成动态库SHARED# 源文件.native-lib.cpp)
find_library( # Sets the name of the path variable.log-lib# Specifies the name of the NDK library that# you want CMake to locate.log)target_link_libraries(# Specifies the target library.native-lib# 自定义的变量,用的时候用${var}${log-lib})

生成指定平台的ndk

修改app中的build.gradle,分为两种方法

externalNativeBuild {cmake {cppFlags ""//配置动态库 对so有影响
//                arguments '-DANDROID_STL=c++_shared'
//                abiFilters 'armeabi-v7a', 'arm64-v8a'//第一种方法}}ndk { //第二种方法abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'}

javah根据native接口生成jni接口

JNI接⼝命名规则:Java_
javah工具设置:File -> settings ->Tools ->External Tools
在这里插入图片描述
使用:右键->External Tools
在这里插入图片描述


http://www.ppmy.cn/server/41876.html

相关文章

国际学术会议论文发表后还能撤稿吗?

当作者朋友们将国际学术会议的论文发表后&#xff0c;可能会遇到各种情况&#xff0c;从而导致作者朋友们希望进行撤稿。但是&#xff0c;是否能够撤稿&#xff0c;以及撤稿的后果和影响&#xff0c;是许多作者关心的问题。 首先&#xff0c;我们必须明确一点&#xff1a;一旦…

TikTok机房ip好还是住宅ip好?

住宅ip比较好&#xff0c;机房数据中心IP高效、低价&#xff0c;所以使用的人多且用处复杂&#xff0c;这类ip极大可能存在滥用的黑历史&#xff0c;通过此类ip访问tiktok&#xff0c;被禁止的可能性更高&#xff0c;更容易被拉入黑名单。所以我们推荐tiktok独享原生ip搭建节点…

vue3中的watch侦听器

在有些情况下&#xff0c;我们需要在状态变化时执行一些“副作用”&#xff1a;例如更改 DOM &#xff0c;或是根据异步操作的结果去修改另一处的状态。在组合式 API 中&#xff0c;我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数。 watch 函数可以侦听被 ref…

Prosys OPC UA Simulation Server工程文件备份方法

Prosys OPC UA Simulation Server是一款免费的OPC UA服务器仿真软件&#xff0c;具体的使用和下载参考官网&#xff1a; Prosys OPC - OPC UA Simulation Server Downloads 他的免费版本不提供工程文件的备份、导入导出功能&#xff0c;每次退出时保存。如果需要工程备份&a…

Shuffle Cards (STL rope平衡树库)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例1&#xff1a; 输入 5 1 2 3 输出 2 3 4 1 5 样例2&#xff1a; 输入 5 2 2 3 2 3 输出 3 4 1 2 5 样例3&#xff1a; 输入 5 3 2 3 1 4 2 4输出 3 4 1 5 2 思路&#xff1a; 这道题&…

【环境安装】nodejs 国内源下载与安装以及 npm 国内源配置

前言 Node.js 是一个基于 Chrome V8 引擎构建的 JavaScript 运行时环境&#xff0c;它能够使 JavaScript 在服务器端运行。它拥有强大的包管理器 npm&#xff0c;使开发者能够轻松管理和共享 JavaScript 代码包。 在中国&#xff0c;由于众所周知的原因&#xff0c;我们可能会…

Java 如何实现跳转到指定页面?

在Java中&#xff0c;实现页面跳转主要涉及到Web开发&#xff0c;而这通常通过使用Java的Web框架&#xff08;如Servlet、Spring MVC&#xff09;来完成。 下面讲解一下如何在不同的Java Web框架中实现页面跳转&#xff0c;包括Servlet和Spring MVC。此外&#xff0c;还会说明…

前端css中线性渐变(linear-gradient)的使用

前端css中线性渐变 一、前言二、关键词句三、主要内容说明&#xff08;一&#xff09;、线性渐变方向1.角度调整方向2.负值角度&#xff0c;源码13.源码1运行效果4.关键字调整方向5.to right向右线性渐变&#xff0c;源码26.源码2运行效果 &#xff08;二&#xff09;、线性渐变…

用ffmpeg和EasyDARWIN实现推流

步骤&#xff1a; 1.配置easydarwin-ini里面的端口&#xff0c;打开easydarwin.exe 查看端口号是否成功&#xff0c;若不成功&#xff0c;则需要修改 2.在web网页打开 http://localhost:10008/ 看是否成功 3.用ffmpeg打开视频 ffmpeg.exe -re -i C:/22/Rec_20200903.mp4 -v…

python发票真伪查验开发文档、票据OCR、数电票查验

想象一下&#xff0c;只需一行行简洁的代码&#xff0c;复杂繁琐的发票审核工作瞬间变得井然有序。翔云发票查验开发文档详尽易懂&#xff0c;即便是Python新手也能迅速上手&#xff0c;搭建起自己的发票真伪查验系统。无论是纸质发票的扫描图像&#xff0c;还是电子发票的数据…

Linux Kernel 6.9 释出

2024-05-13 Linus Torvalds 在内核邮件列表上宣布释出 Linux Kernel 6.9。 主要新特性包括&#xff1a; 支持为各个线程创建文件描述符 pidfds&#xff1b; BPF arena 子系统&#xff1b; BPF token 安全机制&#xff1b; io_uring 支持 truncate()&#xff1b; 64 位 Arm (AR…

Spring注解开发

文章目录 第三方资源配置管理管理DataSource连接池对象管理Druid连接池管理c3p0连接池对象 加载properties属性文件基本用法配置不加载系统属性加载properties文件写法 Spring容器Spring核心容器介绍创建容器获取bean对象容器类层次结构BeanFactory Spring核心容器总结容器相关…

python turtle 升国旗

​一、导语 大家好,前段时间,我们画出了五星红旗,今天我们要用Python的Turtle库来绘制一个五星红旗,并让国旗上升,让我们一起来感受编程与艺术的完美结合吧!领略国家的强大!爱祖国,做一个遵纪守法的好公民。 二、效果展示 升国旗 三、开发过程 一、准备工作 首先我们…

未授权访问:MongoDB未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章&#xff1a; 这里附上大佬…

javaSE:类和对象

面向对象 java是一种面向对象的编程语言&#xff0c;面向对象就是把能为我们所用的东西直接拿来使用&#xff0c;省去中间过程&#xff0c;比如洗衣服&#xff0c;要完成这一个动作&#xff0c;我们本来需要一个盆&#xff0c;放水&#xff0c;放衣服&#xff0c;换水&#xf…

Linux交叉编译

一. 交叉编译 1.使用环境要求 新版本的orangepi-build是在Ubuntu22.04的x64电脑或虚拟机上运行的 lsb_release -a //查看自己的虚拟机版本 因为编译出的SDK大概有16G大小&#xff0c;因此&#xff0c;至少给虚拟机分配50G的大小。 2.获取Linux SDK 方法一&#xff1a;从…

【数据结构】栈的实现(链式栈)

文章目录 栈的实现&#xff08;链式栈&#xff09;栈的定义初始化栈进栈判断是否为空栈出栈销毁栈获取栈顶元素获取栈的长度栈的打印 完整代码&#xff08;包括测试代码&#xff09;Stack.hStack.ctest.c 栈的实现&#xff08;链式栈&#xff09; 首先新建一个工程&#xff1a…

记一次跨域问题

线上跨域问题&#xff0c;在自己配置确认没问题下&#xff0c;要及时找运维看看是不是nginx配置问题。 两个方面&#xff1a; 项目代码 nginx配置 SpringBoot 解决跨域问题的 5 种方案&#xff01; SpringBoot解决CORS跨域问题 SpringBoot-实现CORS跨域原理及解决方案

itext5.5.13 PDF预览权限问题

PdfUtils.htFile.createNewFile&#xff08;&#xff09; createNewFile 创建文件错误错误原因方式一方式二实例代码-生成PDF表格数据 createNewFile 创建文件错误 ht getResourceBasePath() "\\templates\\ht.pdf"; htFile new File(ht);代码含义是创建源文件路…

LeetCode73.矩阵置零

题目链接&#xff1a; 73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a;普通的模拟问题&#xff0c;我们按照题目的要求进行模拟&#xff0c;把需要的位置置0即可。 算法思路&#xff1a;题目要求原地计算&#xff0c;所以迁移这个矩阵是不现实的。这…