Android studio 利用cmake编译和使用so文件

devtools/2024/11/28 17:05:53/

1.编译出so文件

1.1 创建支持c++的项目

需要在sdk-tools下载ndk和cmake

Android studio会自动给一个含有jni的demo,运行打印出 hello c++;

 //这边你文件project
static {System.loadLibrary("withnewest");}
//声明需要调用的方法
public native String stringFromJNI();
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_withnewest_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */) {std::string hello = "Hello from C++";return env->NewStringUTF(hello.c_str());
}

这边需要注意包名_类名_方法名(与后面调用so文件的方法很重要)

1.2 jni方法

删掉原先方法,不建议在MainActivity里面书写jni然后生成so文件

package com.example.sotry;public class Radio {public native String kisstheradio();
}
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_sotry_Radio_kisstheradio(JNIEnv* env,jobject /* this */){std::string hello = "Hello  kiss the radio";return env->NewStringUTF(hello.c_str());
}

以下是结构

运行截图

1.3 生成so文件

#cmake 最小需要的版本 
cmake_minimum_required(VERSION 3.22.1)project("sotry")#最前面是文件名字,如果是使用的第三方库要放好路径 如果出现错误 检查是否是绝对路径
add_library(${CMAKE_PROJECT_NAME} SHARED# List C/C++ source files with relative paths to this CMakeLists.txt.native-lib.cpp)target_link_libraries(${CMAKE_PROJECT_NAME}# List libraries link to the target libraryandroidlog)

build_cxx_Debug_obj里面存储的就是对应的so文件

2.使用第三方so文件

当你有一个下载下来现成的so文件(版本适用),你需要知道的,类名,方法名,包名;这样才能正确调用,以下将以刚才生成的so文件为例做例子,其次以soundtouch的so文件为例进行运行尝试。

2.1 同上创建一个支持c++的android项目

创建方法相同,不作赘述

2.2 导入so文件

在main文件夹以下新建一个jniLibs文件夹 与cpp文件夹和java文件夹同级别,放入需要使用的so文件

jniLibs文件夹就不需要修改build.gradle了,如果文件夹名字自定义 需要在app级别的build.gradle添加

    sourceSets{main{jniLibs.srcDirs=['src/main/jniLibs']}}

2.3 创建与so文件打包时候对应的包-类-方法

在java文件夹底下创建与之前jni方法makefile时同级别的包,相同的类名和之前声明过的方法

public class Radio {public native String kisstheradio();static {System.loadLibrary("sotry");}
}

后在需要的地方调用即可

运行截图同上,如果需要测试是否正确可以在之前项目里面把jni实现里面打印的语句修改,修改之后发现新项目打印的语句还是同修改之前即so文件生成时一样。

2.4 soundtouch开源库so文件使用测试

 


http://www.ppmy.cn/devtools/137713.html

相关文章

Vscode进行Java开发环境搭建

Vscode进行Java开发环境搭建 搭建Java开发环境(Windows)1.Jdk安装2.VsCode安装3.Java插件4.安装 Spring 插件5.安装 Mybatis 插件5.安装Maven环境6.Jrebel插件7.IntelliJ IDEA Keybindings8. 收尾 VS Code(Visual Studio Code)是由微软开发的一款免费、开…

ffmpeg命令详解

原文网址:ffmpeg命令详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍ffmpeg命令的用法。 命令示例 1.mp4和avi的基本互转 ffmpeg -i D:\input.mp4 E:\output.avi ffmpeg -i D:\input.avi E:\output.mp4 -i 表示input,即输入。后面填一个输入地址和一…

数据源的统一与拆分 apache calcite 的雄心与现实

随笔 从千万粉丝“何同学”抄袭开源项目说起,为何纯技术死路一条? 数据源的统一与拆分 apache calcite 的雄心与现实 报警系统的指标、规则与执行闭环 java 老矣,尚能饭否? 一骑红尘妃子笑,无人知是荔枝来! 数据…

C#设计模式——抽象工厂模式(重点)

文章目录 项目地址一、抽象工厂模式1.1 特性1.2 使用反射获取特性标记的类1.3 完整代码 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、抽象工厂模式 工厂方法模式依然存在一个问题就是&…

git命令备忘录

1、git rebase 把某个分支的commit重新应用到另一个分支的基础上: A0————A1————A2————A3————A4 \ B1————B2————B3 假如有两个分支A和B,在A1的变更提交到A分支后以此作为基准拉取B分支,此后A分支提交了A2、A3、A4变更…

VsCode 插件推荐(个人常用)

VsCode 插件推荐(个人常用)

pgadmin安装后运行不能启动界面的问题

在本人机器上安装了pgsql10后,自带的pgadmin安装后运行时能打开edge并显示数据库server和数据库的,后来又安装了pgsql17,结果安装后想打开pgadmin,结果一直在等待最后,爆出类似于下面的错误。 pgAdmin Runtime Enviro…

Qt中CMakeLists.txt解释大全

‌Qt从Qt5.15版本开始正式推荐使用CMake进行项目管理‌。 在Qt 5.15之前,虽然可以使用CMake进行构建,但Qt官方更推荐使用qmake。 然而,从Qt5.15开始,Qt官方正式推荐使用CMake作为主要的构建系统,并在Qt 6中进一步加强了…