android 使用so库,Android 使用SO库
使用Android Studio调用so 开发.
创建项目 省略......
创建jniLibs目录 在main中创建一个jniLibs文件夹
look,然后把so拷贝进去:
创建JNI 的API:com.robot.msttsdemo.JniApi.java
package 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
android 使用so库,Android 使用SO库相关推荐
- android 6.0权限库,Android 6.0动态权限适配
前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...
- Android 自带图标库 android.R.drawable
在xml文件中调用. android:title="@string/secure_connect" android:orderInCategory="100" ...
- 【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 内存优化】libjpeg-turbo 函数库交叉编译 ( libjpeg-turbo 函数库下载 | libjpeg-turbo 编译文档 | 环境准备 | NASM 安装 )
文章目录 一. libjpeg-turbo 函数库下载与解压 二. libjpeg-turbo 编译文档 三. 编译前环境准备 四. 安装 NASM 汇编工具 1. 下载 NASM 汇编工具 2. 拷 ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )
文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...
- 【Android FFMPEG 开发】Android Studio 中配置 FFMPEG 库注意事项 ( 静态库 链接 libz.so 库 | 导入 FFMPEG 函数库顺序 )
文章目录 I . 导入 z 库 ( FFMPEG 动态库 与 静态库区别 ) II . FFMPEG 库引入顺序 III . Android Studio 中 FFMPEG 静态库引入完整 CMake ...
- 【Android FFMPEG 开发】Android Studio 中 配置 FFMPEG 库最小兼容版本 ( undefined reference to 'atof' )
文章目录 FFMPEG 最小兼容版本 注意事项 FFMPEG 最小兼容版本 注意事项 1 . 最小兼容版本 : 在 Ubuntu 中编译 FFMPEG 时 , 需要指定头文件 与 NDK 的依赖库 , ...
最新文章
- JRE和JDK的区别分别代表什么
- 瑞典皇家理工学院工程实例:Sound localization
- 利用@media screen实现网页布局的自适应
- 转载:CEO如何“养好CIO同时管好CIO”?
- java中date类型如何赋值_Java 中的类型传递问题解惑
- 最适合说故事的插画素材,应用到UI设计中,感情线有了!
- mysql 中的 engine 存储引擎
- BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
- 如何将汇编语言转换为c语言,如何把汇编语言转换成C语言
- win7网络不显示共享计算机,win7系统看不到局域网其他计算机怎么办
- apache ab压测与参数传递
- 瓜大NPUCTF-Misc、Crypto Write Up
- Graph Neural Network-Based Anomaly Detection in Multivariate Time Series 代码配置及解析
- 图片大大了怎么修改大小KB不改变尺寸
- Hive有分区文件到时select不到数据问题-----修复分区命令 msck repair table xxxxx
- linux安装最新版的glib库,GLib库安装与简析
- Redis高级项目实战,西安java程序员工资
- 什么是BGP协议,以及其工作原理
- 史上最全图文精美排版技巧
- 围棋初学者入门知识——必需掌握的29个围棋术语
热门文章
- Timer源码之TaskQueue
- GetLogicalProcessorInformation
- 将Office2010版EXCEL文件保存为2007版.XLS文件格式体积巨增解决方法
- Java 语义网编程系列二: 本体
- [导入]Replace函数vbTextCompare不支持日文韩文
- 剑指offer(C++)-JZ28:对称的二叉树(数据结构-树)
- boot spring 跨域注解_每日一问学技术:@SpringBootApplication注解干了个啥?
- des和aes相比较有哪些特点_高精度的交叉滚子轴承与传统轴承相比较,有哪些优点?...
- Some thoughts on dfs
- 软件测试基础——理论知识