android开发之NDK配置开发

article/2025/8/26 12:58:37

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() {@Overridepublic 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。


插入部分
引用系统文件且自定义一个so库

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := playMusic#LOCAL_MODULE := playMusicZeroLOCAL_SRC_FILES := PlayMusic.cpp \Interface.cppLOCAL_SHARED_LIBRARIES := liblog libcutils libutils libtinyalsaLOCAL_MODULE_TAGS := optionalLOCAL_C_INCLUDES += external/tinyalsa/include  //引入其他目录的头文件方式    在cpp文件中使用#include<***>的方式引用LOCAL_CFLAGS += \-Wno-unused-parameter \-Wno-unused-function \-Wno-unused-variable#include $(BUILD_EXECUTABLE)
include $(BUILD_SHARED_LIBRARY)//在Android.mk同目录下面的文件
Interface.cpp
PlayMusic.cpp
PlayMusic.h

在这里插入图片描述


http://www.hkcw.cn/article/wGKlKvMItd.shtml

相关文章

如何在没有计算机的情况下将联系人从 iPhone 传输到安卓

如果您正在考虑从 iPhone 迁移到Android &#xff0c;您可能想知道如何在不丢失任何重要信息的情况下转移联系人。您可能还想避免使用电脑进行此过程。幸运的是&#xff0c;有几种方法可以教您如何在不使用电脑的情况下将联系人从 iPhone 迁移到Android &#xff0c;而且这些方…

如何将数据从 iPhone 传输到 vivo 的 4 种方法

在运行不同操作系统的 iPhone 和 Vivo 之间传输数据时&#xff0c;需要谨慎。廉价或不安全的在线解决方案可能会失败&#xff0c;并使您的个人数据面临风险。避免被“免费”和“快速”服务的承诺所诱惑&#xff0c;因为这可能会危及您的数据。 在本文中&#xff0c;我们整理了…

图片转换之heic转jpg(使用ImageMagick)

缘由&#xff1a;iphone的图库&#xff0c;用jpg拍照保存后内存占比较大&#xff0c;heic格式会微缩不少。问题来了&#xff0c;电脑不能直接小图预览heic。 分析&#xff1a;现在就是解决小图预览的问题&#xff08;大图用wps可以看&#xff09; 解决&#xff1a;查找了一些…

Android导入项目时Gradle下载速度慢\超时\失败解决方法

Android导入项目时Gradle下载速度慢\超时\失败解决方法 原因分析&#xff1a; 这是因为Gradle源服务器在国外&#xff0c;下载速度自然很慢 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.3.3-bin.zip 解决方法&#xff1a; 最可靠的方法就是换源 &…

从 iPhone 传输到Android 3 种简单方法

使用 iPhone 多年后,也许您想切换到Android并尝试一些新的东西?不管您是否相信,如果您确实做出了这样的决定,您很可能会遇到将数据从 iPhone 传输到Android的问题。由于手机数据对于当今的人们来说非常重要,因此当您切换到另一部手机时丢失它是不明智的。 在本指南中,您…

Contactile三轴触觉力传感器的滑动与摩擦力计算能力

Contactile三轴触觉力传感器通过先进的技术设计&#xff0c;实现了滑动与摩擦力的精准计算。传感器通过分析滑动与振动信号的关联&#xff0c;动态计算摩擦系数&#xff0c;同时捕捉力、扭矩及初始滑动等多维数据。这种能力为机器人提供了高度灵活的触觉反馈&#xff0c;满足复…

国产分子动力学引擎——GPUMD本地部署教程:专为 NVIDIA GPU 加速设计

一、简介 GPUMD 是一款开源分子动力学模拟软件&#xff0c;由渤海大学樊哲勇教授团队主导开发&#xff0c;2017年首发1.0版本&#xff0c;持续迭代至3.9.4版本&#xff0c;是国内首个完全基于GPU加速的开源分子动力学软件&#xff0c;专为 NVIDIA GPU 加速设计。它使用 CUDA 提…

PostgreSQL 备份与恢复策略

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

2025年渗透测试面试题总结-匿名[校招]高级安全工程师(代码审计安全评估)(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。、 目录 匿名[校招]高级安全工程师(代码审计安全评估) 渗透基础 1. 自我介绍 2. SQL注入写Shell&#xff08;分数…

Cmake编译glog成功并在QT中测试成功步骤

glog是开源的日志记录系统&#xff0c;下载地址GitHub - google/glog: C implementation of the Google logging module 跟gflags有点相似&#xff0c;编译和测试过程比较周折&#xff0c;所以记录下来具体的编译和测试步骤。 编译环境&#xff1a;WindowsCmakeVs2022Qt5.14.…

【Linux】网络--传输层--深入理解TCP协议

个人主页~ 深入理解TCP协议 一、TCP数据传输问题1、发送数据丢包问题---重传机制&#xff08;一&#xff09;客户端数据发送丢包&#xff08;二&#xff09;服务器确认应答丢包&#xff08;三&#xff09;时间间隔问题 2、三次握手问题---奇数次握手&#xff08;一&#xff09;…

深入理解 SQL 的 JOIN 查询:从基础到高级的第一步

在处理数据库时&#xff0c;我们常常需要从多个表中提取数据。比如想知道一个城市的天气情况&#xff0c;同时又想知道这个城市的具体位置。这就需要将 weather 表和 cities 表结合起来查询。这种操作在 SQL 中被称为 JOIN 查询。 现在看下两种表的情况 1.weather 表&#xff…

【无标题】C++23新特性:支持打印volatile指针

文章目录 前言背景与问题C23的解决方案实现原理使用场景硬件开发多线程调试 总结 前言 在C开发中&#xff0c;volatile关键字常用于修饰变量&#xff0c;以确保编译器不会对这些变量进行优化&#xff0c;从而保证程序能够正确地与硬件交互或处理多线程环境下的特殊变量。然而&…

RPG15.轻攻击

上一篇已经制作了装备和卸下武器 接下来开始做战斗系统 1.先添加Tag ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_EquipAxe);ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_UnEquipAxe); ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Play…

20250529-C#知识:继承、密封类、密封方法、重写

C#知识&#xff1a;继承、密封类、密封方法、重写 继承是面向对象的三大特性之一&#xff0c;通过继承能够减少重复代码的编写&#xff0c;有助于提升开发效率。 1、继承 C#不同于C&#xff0c;只支持单继承当子类出现与父类同名的成员时&#xff0c;父类成员被隐藏&#xff0…

第30次CCF计算机软件能力认证-1-重复局面

时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 下载题目目录&#xff08;样例文件&#xff09; 题目背景 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3次以上&#xff0c;可由任意一方提出和棋。 题目描述 国际象棋每一个局面可以用大小为 88…

【计算机网络】第2章:应用层—DNS

目录 一、PPT 二、总结 DNS&#xff08;域名系统&#xff09;详解 &#xff08;一&#xff09;DNS核心概念 &#xff08;二&#xff09;DNS查询过程&#xff08;重点❗&#xff09; &#xff08;三&#xff09;DNS资源记录&#xff08;RR&#xff09;类型…

[C]基础18.自定义类型:联合和枚举

博客主页&#xff1a;向不悔本篇专栏&#xff1a;[C]您的支持&#xff0c;是我的创作动力。 文章目录 0、总结1、联合体&#xff08;共用体&#xff09;1.1 联合体类型的声明1.2 联合体的特点1.3 联合体大小的计算1.4 联合体的应用场景1.5 联合体练习&#xff1a;判断机器字节序…

目标检测预测框置信度(Confidence Score)计算方式

预测框的置信度&#xff08;Confidence Score&#xff09;是目标检测模型输出的一个关键部分&#xff0c;它衡量了模型对一个预测框中包含特定类别对象的确定程度。 不同的目标检测模型&#xff08;如Faster R-CNN、SSD、YOLO、DETR等&#xff09;在计算置信度时有其特有的机制…

视觉分析开发范例:Puppeteer截图+计算机视觉动态定位

一、选型背景&#xff1a;传统爬虫已无力应对的视觉挑战 在现代互联网环境中&#xff0c;尤其是小红书、抖音、B站等视觉驱动型平台&#xff0c;传统基于 HTML 的爬虫已经难以满足精准数据采集需求&#xff1a; 内容加载由 JS 动态触发&#xff0c;难以直接解析 HTML&#xf…