集成Android Tuya SDK遇“找不到DSO加载libc.so”错误求助
问题背景
使用Tuya Smart SDK构建Android应用时,初始化阶段抛出以下错误:
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libc++_shared.so caused by: couldn't find DSO to load: libc.so at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:789) at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:639) at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:577) at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:525) at com.tuya.smart.security.load.TuyaLibraryLoader.securityLoadLibrary(TuyaLibraryLoader.java:17) at com.tuya.smart.security.jni.JNICLibrary.doCommandNative(JNICLibrary.java:9) at com.tuya.sdk.network.OooO00o.OooO00o(TuyaNetworkSecurityInit.java:1) at com.tuya.smart.android.network.TuyaSmartNetWork.initialize(TuyaSmartNetWork.java:35) at com.tuya.smart.sdk.TuyaSdk.initTuyaData(TuyaSdk.java:74) at com.tuya.smart.sdk.TuyaSdk.init(TuyaSdk.java:146) at com.tuya.smart.sdk.TuyaSdk.init(TuyaSdk.java:57) [my code]
使用的依赖:
implementation("com.tuya.smart:tuyasmart:3.26.5")
已尝试操作:
- 调用
TuyaHomeSdk.setDebugMode(true)开启调试模式 - 确认
libc++_shared.so由Tuya SDK依赖提供,libc.so为系统自带库
排查步骤
1. 检查ABI过滤配置
Tuya SDK仅提供部分架构的so库,若应用设置了ABI过滤,可能导致对应架构的libc++_shared.so缺失:
- 打开Module级
build.gradle,检查ndk.abiFilters配置,确保包含Tuya支持的ABI(通常为armeabi-v7a、arm64-v8a):android { defaultConfig { ndk { abiFilters "armeabi-v7a", "arm64-v8a" } } }
2. 调整SoLoader初始化顺序
Tuya SDK依赖Facebook SoLoader加载库,需确保SoLoader在TuyaSdk之前初始化:
- 在自定义
Application的onCreate()中修改初始化顺序:@Override public void onCreate() { super.onCreate(); SoLoader.init(this, false); TuyaHomeSdk.init(this); }
3. 排查依赖冲突
- 执行
./gradlew app:dependencies查看依赖树,确认是否有其他库覆盖或移除了libc++_shared.so - 若存在冲突,可强制依赖Tuya SDK关联的SoLoader版本:
configurations.all { resolutionStrategy.force "com.facebook.soloader:soloader:对应版本" // 从依赖树中获取Tuya关联的版本号 }
4. 验证设备系统兼容性
libc.so为系统库,老旧Android版本(API 21及以下)可能存在路径或版本兼容问题:
- 测试设备是否为Android 5.0(API 21)及以上,Tuya SDK 3.26.5对低版本系统支持有限
- 若需支持低版本,可在
build.gradle中启用旧版打包规则:android { packagingOptions { useLegacyPackaging = true } }
5. 检查APK中的so库是否存在
- 构建APK后解压,查看
lib/[abi]/目录下是否有libc++_shared.so - 若缺失,执行
./gradlew clean build清理缓存后重新构建
6. 临时调试用:禁用SoLoader严格模式(仅测试)
若以上方法无效,可临时跳过SoLoader部分检查(正式发布需移除):
SoLoader.setInTestMode();
额外说明
虽然3.36.5版本需要额外签名,但该版本修复了大量底层兼容性问题。若以上排查均无效,建议先完成签名验证再升级版本,避免后续遇到更多类似问题。
内容的提问来源于stack exchange,提问作者Simone Avogadro
相关产品推荐
相关产品推荐

