z***@iheal.cn
z***@iheal.cn
  • 发布:53 分钟前
  • 更新:36 分钟前
  • 阅读:45

AAR自定义基座问题

分类:HBuilderX

ARR打的自定义基座,一直找不到定义的方法。
查看APK包,LIB中没有有AAR中有JNI包中的SO文件。
感觉没有把我AAR中的内容打到包中。也找不到哪里设置。

目录:utssdk/app-android/libs/mytts-release.aar

{  
  "minSdkVersion": "21",  
   // 如果你的 SO 库使用了 NDK> ,需要在这里声明支持的 CPU 类型  
    "abis": ["armeabi-v7a"],  
    // 依赖配置  
    "dependencies": [  
      "androidx.core:core-ktx:1.6.0",    
        {    
          "id": "mytts-release",    
          "source": "implementation(name: 'mytts-release', ext: 'aar')"    
        }    
    ]  

}

index.uts
export function play(input: string) : void {
com.yyzl.mytts.MyTts.play(input);
}

53 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( HBuilderX技术交流群 ) 咨询,群中有相关专业的管理员和群友。

根据您描述的情况,AAR 文件中的 SO 库未能打包进自定义基座,导致运行时找不到方法,这通常与 SO 文件的打包机制CPU 架构配置 有关。

核心原因分析

SO 文件不能直接参与本地调试,且 AAR 中的 SO 库需要满足特定条件才能被打包:

  1. SO 文件需要封装在 AAR 中(您已做),但 必须重新打自定义基座 才能生效
  2. CPU 架构必须匹配config.json 中配置的 abis 必须与 AAR 中实际包含的 SO 架构一致
  3. HBuilderX 版本差异:4.26 版本前后对 SO 文件的支持方式不同

解决方案

方案一:标准 AAR 集成方式(推荐)

确保按以下步骤操作:

  1. 确认 AAR 位置正确

    项目根目录/uni_modules/你的插件ID/utssdk/app-android/libs/mytts-release.aar  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

  2. 检查 config.json 配置
    您的配置基本正确,但建议简化测试:

    {  
     "minSdkVersion": 21,  
     "abis": ["armeabi-v7a"],  
     "dependencies": [  
       "androidx.core:core-ktx:1.6.0"  
     ]  
    }  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

    注意:本地 AAR 文件放在 libs 目录后,不需要dependencies 中显式声明,系统会自动加载。

  3. 关键步骤:重新打自定义基座

    • 菜单路径:运行 -> 运行到手机或模拟器 -> 制作自定义调试基座
    • 确保已登录 DCloud 账号
    • 打包完成后,必须选择自定义基座运行(不是标准基座)
  4. 验证 AAR 中的 SO 架构

    • 解压您的 mytts-release.aar(改后缀为 zip 解压)
    • 检查 jni/armeabi-v7a/ 目录下是否有 .so 文件
    • 如果 AAR 中只有 arm64-v8a 而您配置的是 armeabi-v7a,则不会打包

方案二:HBuilderX 4.26+ 的混编方式(如果版本支持)

如果您使用 HBuilderX 4.26 或更高版本,可以采用更简单的混编方式:

  1. 将 SO 文件直接放在:

    utssdk/app-android/libs/armeabi-v7a/libyour.so  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

  2. utssdk/app-android/ 目录下创建 Kotlin 文件(如 TtsHelper.kt)加载 SO:

    object TtsHelper {  
       init {  
           System.loadLibrary("your_so_name")  
       }  
    }  

    本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

  3. index.uts 中通过 Kotlin 类调用

这种方式省去了封装 AAR 的环节,SO 文件可以直接参与本地调试。

排查清单

如果仍然找不到类,请按以下步骤排查:

  1. 检查基座是否真的包含插件

    • 打包自定义基座后,查看 APK 包:lib/armeabi-v7a/ 下应有您的 SO 文件
    • 查看 assets/apps/__UNI__xxx/www/ 下应有您的 UTS 插件代码
  2. 检查 AAR 完整性

    • 确认 AAR 中的类名与 index.uts 中调用的完全一致(区分大小写)
    • 确认 AAR 没有混淆(建议先关闭混淆测试)
  3. 清理缓存重新打包

    • 删除项目根目录的 unpackage 文件夹
    • 删除 utssdk/app-android/build 文件夹(如果有)
    • 重新打自定义基座
  4. 查看详细日志

    • 菜单:帮助 -> 查看运行日志
    • 查看云打包日志,搜索 "mytts" 或 "aar" 相关关键词

参考文档

特别提醒:根据社区反馈,类似问题通常是因为 AAR 中的 SO 架构与配置不匹配未重新打基座 导致。请优先检查这两点。

内容为 AI 生成,仅供参考
z***@iheal.cn

z***@iheal.cn (作者)

AAR 中jni/armeabi-v7a/有SO,APK 包中没有。assets/apps/UNIxxx/www/下只有一个manifest.json文件,没有我的代码。

帮助 -> 查看运行日志,没有找到任何"mytts" 或 "aar"

要回复问题请先登录注册