使用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库相关推荐

  1. android 6.0权限库,Android 6.0动态权限适配

    前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...

  2. Android 自带图标库 android.R.drawable

    在xml文件中调用. android:title="@string/secure_connect" android:orderInCategory="100" ...

  3. 【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )

    文章目录 一. Android Studio 中导入 libwebp.so 库 二. Android Studio 中测试 libwebp.so 库 三.参考资料 一. Android Studio ...

  4. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )

    文章目录 一.项目中配置 OpenSSL 开源库 二.OpenSSL 开源库解密参考代码 三.解密 dex 文件的 Java 代码 四.解密 dex 文件的 Jni 代码 参考博客 : [Androi ...

  5. 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )

    文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...

  6. 【Android 内存优化】libjpeg-turbo 函数库交叉编译 ( libjpeg-turbo 函数库下载 | libjpeg-turbo 编译文档 | 环境准备 | NASM 安装 )

    文章目录 一. libjpeg-turbo 函数库下载与解压 二. libjpeg-turbo 编译文档 三. 编译前环境准备 四. 安装 NASM 汇编工具 1. 下载 NASM 汇编工具 2. 拷 ...

  7. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  8. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

  9. 【Android FFMPEG 开发】Android Studio 中配置 FFMPEG 库注意事项 ( 静态库 链接 libz.so 库 | 导入 FFMPEG 函数库顺序 )

    文章目录 I . 导入 z 库 ( FFMPEG 动态库 与 静态库区别 ) II . FFMPEG 库引入顺序 III . Android Studio 中 FFMPEG 静态库引入完整 CMake ...

  10. 【Android FFMPEG 开发】Android Studio 中 配置 FFMPEG 库最小兼容版本 ( undefined reference to 'atof' )

    文章目录 FFMPEG 最小兼容版本 注意事项 FFMPEG 最小兼容版本 注意事项 1 . 最小兼容版本 : 在 Ubuntu 中编译 FFMPEG 时 , 需要指定头文件 与 NDK 的依赖库 , ...

最新文章

  1. JRE和JDK的区别分别代表什么
  2. 瑞典皇家理工学院工程实例:Sound localization
  3. 利用@media screen实现网页布局的自适应
  4. 转载:CEO如何“养好CIO同时管好CIO”?
  5. java中date类型如何赋值_Java 中的类型传递问题解惑
  6. 最适合说故事的插画素材,应用到UI设计中,感情线有了!
  7. mysql 中的 engine 存储引擎
  8. BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
  9. 如何将汇编语言转换为c语言,如何把汇编语言转换成C语言
  10. win7网络不显示共享计算机,win7系统看不到局域网其他计算机怎么办
  11. apache ab压测与参数传递
  12. 瓜大NPUCTF-Misc、Crypto Write Up
  13. Graph Neural Network-Based Anomaly Detection in Multivariate Time Series 代码配置及解析
  14. 图片大大了怎么修改大小KB不改变尺寸
  15. Hive有分区文件到时select不到数据问题-----修复分区命令 msck repair table xxxxx
  16. linux安装最新版的glib库,GLib库安装与简析
  17. Redis高级项目实战,西安java程序员工资
  18. 什么是BGP协议,以及其工作原理
  19. 史上最全图文精美排版技巧
  20. 围棋初学者入门知识——必需掌握的29个围棋术语

热门文章

  1. Timer源码之TaskQueue
  2. GetLogicalProcessorInformation
  3. 将Office2010版EXCEL文件保存为2007版.XLS文件格式体积巨增解决方法
  4. Java 语义网编程系列二: 本体
  5. [导入]Replace函数vbTextCompare不支持日文韩文
  6. 剑指offer(C++)-JZ28:对称的二叉树(数据结构-树)
  7. boot spring 跨域注解_每日一问学技术:@SpringBootApplication注解干了个啥?
  8. des和aes相比较有哪些特点_高精度的交叉滚子轴承与传统轴承相比较,有哪些优点?...
  9. Some thoughts on dfs
  10. 软件测试基础——理论知识