android如何使用so库,Android 使用SO库
使用Android Studio调用so 开发.创建项目省略......
创建jniLibs目录在main中创建一个jniLibs文件夹
look,然后把so拷贝进去:
创建JNI 的API:com.robot.msttsdemo.JniApi.javapackage com.robot.msttsdemo;
public class JniApi {
//javah -classpath . -jni com.robot.msttsdemo.JniApi
public static native int tts(String text,String out_file_path,String engine_cfg_data_path);
}生成com_robot_msttsdemo_JniApi.h文件,这个命令是在当前目录:src/main/java/javah -classpath . -jni com.robot.msttsdemo.JniApi/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_robot_msttsdemo_JniApi */
#ifndef _Included_com_robot_msttsdemo_JniApi
#define _Included_com_robot_msttsdemo_JniApi
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_robot_msttsdemo_JniApi
* Method: tts
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_robot_msttsdemo_JniApi_tts
(JNIEnv *, jclass, jstring, jstring, jstring);
#ifdef __cplusplus
}
#endif
#endif
然后将头文件移到jni目录:src/main/jni/,再复制一份改为com_robot_msttsdemo_JniApi.cpp#include
#define TAG "mstts" // 这个是自定义的LOG的标识
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__) // 定义LOGD类型
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__) // 定义LOGE类型
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_robot_msttsdemo_JniApi
* Method: tts
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_robot_msttsdemo_JniApi_tts(JNIEnv *env, jclass jclass1, jstring jstring1, jstring jstring2, jstring jstring3){
const char *text = env->GetStringUTFChars(jstring1, JNI_FALSE);
const char *outfile = env->GetStringUTFChars(jstring2, JNI_FALSE);
const char *cfgdata = env->GetStringUTFChars(jstring3, JNI_FALSE);
LOGE("jni text: %s", text);
LOGE("jni outfile: %s", outfile);
LOGE("jni cfgdata: %s", cfgdata);
return 0;
}
#ifdef __cplusplus
}
#endif编译CMakeLists.txt,文件路径:src/.这个jni需要依赖libTTSEngine.so.cmake_minimum_required(VERSION 3.4.1)
add_library(Tts SHARED
${CMAKE_SOURCE_DIR}/main/jni/com_robot_msttsdemo_JniApi.cpp)
#导入第三方so包,并声明为 IMPORTED 属性,指明只是想把 so 导入到项目中
add_library( TTSEngine
SHARED IMPORTED )
#指明 so 库的路径,CMAKE_SOURCE_DIR 表示 CMakeLists.txt 的路径
set_target_properties(
TTSEngine
PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/main/jniLibs/armeabi-v7a/libTTSEngine.so )
#指明头文件路径,不然会提示找不到 so 的方法
include_directories(${CMAKE_SOURCE_DIR}/main/jni/)
target_link_libraries( # Specifies the target library.
Tts
TTSEngine
android
log )安装NDK,CMake
在app gradle中添加// 配置CMakeLists.txt路径s
externalNativeBuild {
cmake {
path "src/CMakeLists.txt"
}
}
android如何使用so库,Android 使用SO库相关推荐
- android 6.0权限库,Android 6.0动态权限适配
前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...
- 解决 Android 中出现依赖多个版本支持库的问题
解决 Android 中出现依赖多个版本支持库的问题 参考文章: (1)解决 Android 中出现依赖多个版本支持库的问题 (2)https://www.cnblogs.com/lshare/p/1 ...
- Android移动开发之【Android企业级项目实战教程】DAY1-图表库HelloCharts
使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 实际开发中经常会使用第三方的图标库显示数据,其中HelloCharts就是一款非常优秀 ...
- Android 自带图标库 android.R.drawable
在xml文件中调用. android:title="@string/secure_connect" android:orderInCategory="100" ...
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...
- 【Android 逆向】Android 中常用的 so 动态库 ( /system/lib/libc.so 动态库 | libc++.so 动态库 | libstdc++.so 动态库 )
文章目录 一.拷贝并分析 Android 中的 /system/lib/libc.so 动态库 二.拷贝并分析 Android 中的 /system/lib/libc++.so 动态库 三.拷贝并分析 ...
- 【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )
文章目录 一. Android Studio 中导入 libwebp.so 库 二. Android Studio 中测试 libwebp.so 库 三.参考资料 一. Android Studio ...
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )
文章目录 一.项目中配置 OpenSSL 开源库 二.OpenSSL 开源库解密参考代码 三.解密 dex 文件的 Java 代码 四.解密 dex 文件的 Jni 代码 参考博客 : [Androi ...
- 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )
文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...
- 【Android FFMPEG 开发】Android Studio 中配置 FFMPEG 库注意事项 ( 静态库 链接 libz.so 库 | 导入 FFMPEG 函数库顺序 )
文章目录 I . 导入 z 库 ( FFMPEG 动态库 与 静态库区别 ) II . FFMPEG 库引入顺序 III . Android Studio 中 FFMPEG 静态库引入完整 CMake ...
最新文章
- 在VS2010中创建自定义的代码段
- c# 建立到数据源的连接 以及获取项目配置文件的属性
- 关于mvc、mvp和mvvm的理解
- 如何在C#中使用Win32和其他库之三
- 提交数据库访问性能一些简单措施
- 第6章:可维护性软件构建方法 6.1可维护性的度量和构造原则
- 云服务器选择、腾讯云轻量应用服务器面板介绍
- eNSP华为路由器与交换机连接
- 力扣LeetCode刷题笔记总结1
- 锁的优化机制了解嘛?请进!
- 进入BeOS的花花世界 系列一
- live555库安装_live555生成库文件
- mysql三m架构为什么_AnalyticDB for MySQL 3.0 技术架构解析
- HTML+CSS学习笔记整理-七七八八
- div+css静态网页设计:三亚旅游网站设计——三亚旅游网页设计(6页) html网页设计期末大作业_网页设计平时作业
- 基于Altium Designer进行可变电阻元件封装
- 初次体验PDF.JS,非常好用的pdf前台包
- 国内常见的IT认证都有哪些?这几个入大厂必备
- Linux 已修改ip地址(ONBOOT=yes),但是不显示ip地址
- Cobo钱包v2公测版来了,手把手教你怎么玩
热门文章
- activiti使用mysql,启动报错。
- 牛客练习赛30-A/C
- 汉洛塔问题(c解决)
- 国内云桌面架构有哪些?为什么VDI能成为主流
- 速解元宇宙 / Metaverse 迷雾下的行动指南
- Hadoop伪分布式
- 笔记《Graph Neural Tangent Kernel: Fusing Graph Neural Networks with Graph Kernels》-NeurIPS 2019
- 全国总决赛前八名成绩
- 【注释说明】pcl库中OBB和AABB包围盒头文件pcl/features/moment_of_inertia_estimation.h,中文翻译注释说明,欢迎补充
- 人生如逆旅,我亦是行人——与余光中先生握一次手(二)