android开发之NDK配置开发

news2024/11/28 10:34:39

1、打开项目后,一次点击Tools>SDK Manager
2、点击SDK Tools标签页
3、选中NDK(Side by Side)和CMake复选框
在这里插入图片描述
4、点击OK
此时系统会显示一个对话框,告诉你NDK软件包占用了多少磁盘空间
5、点击OK
6、安装完成后,点击finish
7、您的项目会同步build文件并执行构建,修改构建过程中所有的错误
如果您想要使用SDK管理器未包含的CMake版本,请按以下步骤操作:
1、从CMake官方网站下载并安装CMake
2、在模块的build.gradle文件中指定您想要让gradle使用的CMake版本
3、将CMake的安装路径添加到PATH环境变量,或将其添加到项目的local.properties文件中,如下所示。如果Gradle找不到您在build.gradle文件中指定的CMake版本,就会出现构建错误。

If you set this property, Gradle no longer uses PATH to find CMake.
cmake.dir = “path-to-cmake”

4.可以不安装,如果您尚未在工作站上安装Ninja构建系统,请访问Ninja官网 ,然后下载并安装适用于您的操作系统最新版Ninja。此外,请务必将Ninja的安装路径也添加到PATH环境变量。
5、在local.properties的文件添加NDK的路径和SDK的路径

sdk.dir=C:\Users\admin\AppData\Local\Android\Sdk
ndk.dir=C:\Users\admin\AppData\Local\Android\Sdk\ndk

6、在Project Structure配置SDK和NDK的路径
在这里插入图片描述
7、配置gradle.properties文件,输入图中红色框内的内容
在这里插入图片描述
8、在build.gradle文件中ndk的模块
在这里插入图片描述
9、指定android编译中c代码不用gradler编译,jniLib的库的加载目录
在这里插入图片描述
10、目录的结构如图
10
Application.mk和Android.mk

//Application.mk
APP_STL := c++_static
APP_CPPFLAGS := -frtti -fexceptions -std=c++0x
APP_ABI := arm64-v8a
APP_PLATFORM := android-19

//Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := playMusic
LOCAL_SRC_FILES := playMusic.so
include $(PREBUILT_SHARED_LIBRARY)
//上面的部分是指引用第三方so的配置
include $(CLEAR_VARS)
LOCAL_MODULE := tinyplayJni
LOCAL_SRC_FILES := com_aac_richtap_PlayMusic.cpp
LOCAL_LDLIBS += -llog
LOCAL_SHARED_LIBRARIES := playMusic
LOCAL_EXPORT_C_INCLUDES := src/main/jni
include $(BUILD_SHARED_LIBRARY)

11、以上配置完成后
在Terminal终端输入ndk-build 出现下图所示就表示成功了
在这里插入图片描述
12、最后一步就是使用System.loadLibrary将so加载到java代码

public class PlayMusic {

    public static native void setDeviceAndCard(int card,int device);

    public static native void playMusicByName(String name);

    static {
        System.loadLibrary("tinyplayJni");
    }
}
//在需要的activity中调用
 PlayMusic music = new PlayMusic();

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                music.setDeviceAndCard(3,0);
                Log.d("Main", "onClick: ");
            }
        });

最后留言:为了直接将java文件编译成jni的头文件可以在配置以上的环境之后使用
输入命令javah -jni com.example.mr5.jnidemo.JniUtil --------包名+类名

如果报找不到该类的错误,用javah -classpath . -jni com.example.mr5.jnidemo.JniUtil。

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

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

相关文章

Web3 游戏的用户留存的挑战与机遇:从经济模型与游戏设计谈起

作者:lesleyfootprint.network 在开发和运营 Web3 游戏时,会面临许多挑战,因此有效地应对这些挑战对游戏的成功至关重要。其中一些策略包括在正式发布之前进行全面测试,并持续提供新的游戏玩法和内容,以确保游戏经济系…

二叉树中的链式结构实现

树的概念与结构 线性表:是一种具有n个相同特性的数据元素的有限序列。线性表逻辑上是线性结构,也就是连成的一条直线,但一条直线上的数据元素并不是一定要物理结构连续的。 讲到二叉树之前,我们要先了解一下什么是树,首…

【RocketMQ】RocketMQ标签、过滤及消息重复消费

【RocketMQ】RocketMQ标签、过滤及消息重复消费 文章目录 【RocketMQ】RocketMQ标签、过滤及消息重复消费1. 标签(Tag)1.1 示例 2. 键(Keys)2.1 示例 3. 消息重复消费3.1 示例 参考文档: 官方文档 1. 标签(Tag) Topic 与 Tag 都是业务上用来归类的标识&#xff0c…

Vue学习2

文章目录 引入vue的分析render修改脚手架的默认配置修改步骤 refpropsmixin局部:全局总结 插件(install)总结 scoped案例总结浏览器本地存储保存读取删除清空 组件自定义事件绑定传递数据的两种方式解绑坑this使用原生的总结 全局事件总线消息…

攻防世界 mfw(Git源码泄露与命令执行漏洞)

目录 Git 源码泄露: 1、strpos() 函数 2、assert()函数 3、file_exists() 函数 4、die() 函数 代码审计: 命令执行漏洞: 打开链接 在About里发现网站是使用Git、PHP、Bootstrap搭建的 使用dirsearch扫一下 从结果可以看出确实存在.git …

在Centos7.9中安装postgresql15最新版本_参考官网说明安装---PostgreSQL工作笔记002

现在我要实现利用nifi同步,postgresql中的增量数据,也就是如果postgresql中出现增删改数据的时候,数据要自动同步到我们远程的mysql数据库中. 又难到我了...首先:去安装postgresql在centos7.9中,之所以在centos7.9中又安装了一遍,因为,我的大体思路,是利用postgresql的逻辑复制…

搭建flask后端和微信小程序前端

目录 一、准备工作 (1)我的前端代码 (2)我的后端代码 (3)后端运行成功的截图 (4)前端运行成功的截图 (5)整体运行成功的截图 二、部署后端 &#xff08…

【C++】什么是函数模板/类模板?

文章目录 一、函数模板1.什么是函数模板?2.函数模板格式3.函数模板原理4.函数模板实例化(1)隐式实例化(2)显示实例化 二.类模板1.类模板定义格式2.类模板的实例化 总结 一、函数模板 1.什么是函数模板? 函…

VBA之正则表达式(42)-- 提取代码中变量名称

实例需求:待处理代码段如下所示,现在需要提取其中的变量名称。 Public pFactor As Integer Sub TestCode() Dim reg As New RegExp, a As Workbook Dim ms As VBScript_RegExp_55.MatchCollection Dim m As VBScript_RegExp_55.Match Dim i, j Dim x1, y…

记一次udp服务性能优化经历

目录 概述磁盘io网络io减少重复计算减少内存复制减少互斥锁 概述 手上有个go项目,接收udp信息(主要是syslog和snmp trap)并查询设备信息,将信息结构化(设备ip名称,匹配了什么规则之类的)后发送…

生态系统NPP及碳源、碳汇模拟(土地利用变化、未来气候变化、空间动态模拟)

前言 由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。碳中和可以从碳排放(碳源)和碳固定(碳汇)这两个侧面来理解。陆地生态系统在全球碳循环过程中有着…

综述:图像分割

综述 图像分割(segmentation、cut)指的是将数字图像划分成多个图像子区域的过程。 在实际场景中具有诸多重要应用 在广义的图像分割中,传统方法和深度方法对于分割有不同的定义。 传统方法:对于图像进行区域划分,核心问题在于:区…

饿了么太狠:面个高级Java,抖这多硬活、狠活(饿了么面试真题)

前言: 在40岁老架构师尼恩的(50)读者社群中,经常有小伙伴需要面试饿了么、 头条、美团、阿里、京东等大厂。有很多的小伙伴,完成了人生的逆袭,拿到了高端的offer。 最近一个6年经验的小伙伴,年…

linux进程间通信(共享内存)

共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进 程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可 以将同一段物理内存连接到他们自己的地址空间中&#xff0…

win10 编译 openssl

环境:系统win10 编译器:VS2015 准备: 一、openssl下载 官网:www.openssl.org 安装Perl,安装NASM. cmd下运行perl --version得出下面信息就说明安装perl安装成功. nasm --version得出下面信息,说明nasm安装成功 我以vs2015为例: 打开这个终端,之所以打开这个是因…

适合每一个对高光谱技术感兴趣,并想用python进行实践的人

总结了高光谱遥感技术领域的基础原理与核心概念,采用编程语言复现经典数据处理和应用方法,追踪了最新的技术突破,在消化理解、触类旁通之后,用即使是遥感“小白”也容易接受的方式分享给你。 高光谱遥感学习的第一季:提…

HTTP的缓存机制是什么?

HTTP 缓存机制是一种在 Web 开发中常用的技术,它旨在提高性能和减少网络流量。通过缓存,可以避免不必要的网络请求,减少服务器负载,并加快页面加载速度。下面是关于 HTTP 缓存机制的详细介绍。 HTTP 缓存机制的基本原理是将 Web …

LNMP网站框架搭建(yum方式)

目录 一、Nginx的yum安装 1)搭建nginx相关的yum源 2)刷新yum仓库,安装启动nginx服务 二、mysql的 yum 安装 1)卸载一切与mysql有关的包 2)wget mysql相关的yum源 附加:第二种方式(与上…

单卡轻松打造 ChatGPT 竞争者“原驼”,QLoRA 革新大语言模型微调技术

出品人:Towhee 技术团队 作者:顾梦佳 由 OpenAI 推出的聊天机器人ChatGPT 爆火,带动 AI 受到了前所未有的关注。随之市面上也涌现出了各类开源的大语言模型(LLM),其中 LLaMA “羊驼系列”最受关注、最具潜力…

Vue实现订单确认界面禁止浏览器返回操作导致重复提交订单的问题

哈喽 大家好啊 最近遇到一个问题,就是在提交订单成功后的页面,然后用户去浏览器返回,就导致又提交了一次 然后就想到了如果提交成功页面,就阻止浏览器返回操作 主要实现如下: 1.在mounted的钩子函数: 2.…