Android SDK集成第三方项目时iso parser依赖异常问题求助
我们的SDK基于com.googlecode.mp4parser:isoparser实现视频压缩功能,在测试项目中运行正常,但将快照版本1.2.19-SNAPSHOT集成到其他项目时,iso parser功能异常——视频压缩后丢失音频。
临时解决方案(非最佳实践)
目前通过手动排除SDK中的isoparser依赖并强制指定版本解决问题,配置如下:
implementation('com.name.lib:Library:1.2.19-SNAPSHOT') { exclude group: 'com.googlecode.mp4parser', module: 'isoparser' } implementation('com.googlecode.mp4parser:isoparser:1.0.6') { force = true }
建议的ProGuard规则
有人提出通过添加ProGuard规则尝试解决:
-keep class com.googlecode.mp4parser.isoparser.** { *; }
合理解决方案
1. 统一SDK内部的依赖版本管控
在SDK的build.gradle中,明确锁定isoparser的依赖版本,并通过依赖解析策略强制该版本,避免集成项目出现版本冲突:
// SDK的build.gradle dependencies { implementation 'com.googlecode.mp4parser:isoparser:1.0.6' } configurations.all { resolutionStrategy { // 强制所有依赖路径下的isoparser使用指定版本 force 'com.googlecode.mp4parser:isoparser:1.0.6' } }
这样集成方无需手动排除或强制版本,SDK自身会处理依赖一致性。
2. 配置SDK的消费者混淆规则
如果问题是混淆导致的isoparser类被误删,在SDK的src/main/resources/consumer-rules.pro中添加以下规则,确保集成项目自动应用该混淆规则:
-keep class com.googlecode.mp4parser.** { *; } -keep interface com.googlecode.mp4parser.** { *; }
相比让集成方手动添加,这种方式更符合SDK封装的最佳实践,避免遗漏配置。
3. 检查快照版本的依赖变更
对比SDK稳定版本与快照版本的依赖配置,确认是否在快照版本中意外修改了isoparser的依赖范围(比如从固定版本改为1.0.+动态版本),导致引入了不兼容的新版本。若存在此类变更,恢复为固定版本即可。
4. 排查集成项目的依赖冲突
让集成方通过以下方式检查依赖树:
./gradlew app:dependencies --configuration debugImplementation
或使用Android Studio的View > Tool Windows > Gradle > 项目名 > Tasks > android > androidDependencies查看是否有其他依赖引入了不同版本的isoparser。若存在冲突,可在SDK侧通过resolutionStrategy统一版本,而非让集成方手动处理。
内容的提问来源于stack exchange,提问作者user2357113

