Android Studio集成讯飞SDK过程中在配置Project的时候有感

在配置讯飞的语音识别SDK(流式版)时候,跟着写了两个Demo,一个是YuYinTestDemo01,另一个是02,demo01比较简单,实现功能图象也比较简陋,没用讯飞SDK提供的图片,也就是没用到assets文件,只将libs包下的三个文件放入到了project中。demo2除了libs包下三个文件,还有assets放到了project/app/src/main/中,这个不需要在app/build.gradle配置任何路径和implement等,直接放入就好。

以上就是讯飞SDK包的图。

这个是SDK的libs包内的三个重要文件,这里重点说这三个文件被放到demo1和demo2的project/app/不同位置的不同的app/build.gradle/的配置方法:

demo1:最简单:

1.将Msc.jar复制到app/libs/目录下,右击选择倒数第二个add.....,然后会自动在app/build.gradle文件生成

复制代码
implementation files('libs\\Msc.jar')

代表它的路径。

2.在app/src/main/目录下右击,然后如图:

选择这个文件夹,将其命名为jniLibs,然后将讯飞SDK的libs里面的另外两个包复制到其中:

然后就结束了,不需要自己手动在app/build.gradle配置一条代码,(自动生成的不算)。

assets包也可以加入到app/src/main中,也不需要在app/build.gradle配置。

demo02:稍微复杂

1。将SDK的libs的三个文件全部复制到app/libs中去:

2.右击Msc.jar,选择倒数第二项,然后app/build.gradle自动生成

复制代码
implementation files('libs\\Msc.jar')//自动生成的

3.在app/build.gradle中配置两块代码,其中:

复制代码
sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}是必须配置的
复制代码
      ndk {
          abiFilters 'armeabi-v7a', 'arm64-v8a'
     }这条不必要写。

结束,assets文件同上。

总结:

demo01不需要在app/build.gradle写任何配置,但需要在app/src/main中新建一个文件夹。而且a/a/M文件没放到一起。

demo02需要在app/build.gradle写一条配置,不用新建文件夹,而且a/a/M文件都放在一起了。

背后的原理:

1. Android 项目的默认配置

在 Android 项目中,Gradle 对 JNI 库文件有默认的查找路径。当你把 arm64 - v8aarmeabi - v7a 文件夹放在 app/src/main/jniLibs 目录下时,这恰好是 Android 项目默认查找 JNI 库文件的位置。

Gradle 在构建项目时,会自动从 app/src/main/jniLibs 目录中查找并打包相应的 .so 文件到 APK 中,所以不需要额外配置 sourceSets 块来指定 JNI 库文件的路径。而前一个项目将库文件放在 app/libs 目录下,这不是默认的查找路径,因此需要通过 sourceSets 配置告诉 Gradle 到哪里去查找这些文件。

2. 关于 abiFilters 的配置

  • 默认行为 :如果不配置 abiFilters,Gradle 会默认将 jniLibs 目录下所有架构的 .so 文件都打包到 APK 中。当你把 arm64 - v8aarmeabi - v7a 文件夹放在 app/src/main/jniLibs 目录下时,即使不配置 abiFilters,这两个架构的库文件也会被正常打包。
  • 前一个项目的需求 :前一个项目配置 abiFilters 可能是为了控制 APK 的大小。通过指定 'armeabi - v7a', 'arm64 - v8a',可以只打包这两种架构的库文件,避免包含其他不必要的架构库文件,从而减小 APK 的体积。如果不配置 abiFiltersapp/libs 目录下存在其他架构的库文件,这些文件也会被打包进 APK,可能导致 APK 体积过大。

追更:

我发现在project的app/src/main/目录下新建jniLibs文件夹的时候,会自动在app/build.gradle中生成一块代码:

复制代码
//新建jniLibs文件夹自动生成的,可以删了也可以留着
sourceSets {
    main {
        jni {
            srcDirs 'src\\main\\jni', 'src\\main\\jniLibs'
        }
    }
}

至于有没有用,好像是没用。

相关推荐
hero_heart5 小时前
vscode中c_cpp_properities.cpp文件生成和作用
ide·vscode·编辑器
雨白5 小时前
Jetpack系列(三):Room数据库——从增删改查到数据库平滑升级
android·android jetpack
Naiva6 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm
花王江不语8 小时前
android studio 配置硬件加速 haxm
android·ide·android studio
喝可乐的布偶猫10 小时前
韩顺平之第九章综合练习-----------房屋出租管理系统
java·开发语言·ide·eclipse
江太翁10 小时前
mediapipe流水线分析 三
android·mediapipe
与火星的孩子对话11 小时前
Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#
android·unity·ios·c#·ip
DO ITNOW11 小时前
Cursor/VScode ,点击运行按钮,就打开新的终端,如何设置为在当前终端运行文件而不是重新打开终端----一招搞定篇
ide·vscode·编辑器
小妖66611 小时前
若 VSCode 添加到文件夹内右键菜单中显示
ide·vscode·编辑器
freshman_y11 小时前
VSCode遇到的一些小毛病(自动保存、运行后光标不再处于编辑区)
ide·vscode·编辑器