You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何混淆Kotlin Multiplatform代码?及异常与混淆失效问题咨询

KMP库混淆与资源收缩问题解答

异常原因与预期行为

  • isShrinkResources = true 是Android资源收缩工具的配置,负责移除未被使用的资源,并非代码混淆(代码混淆由R8/ProGuard处理)。该配置仅支持在Android应用模块(application类型)中启用,库模块(library类型,包括KMP的Android目标模块)无法使用,因此你遇到的Resource shrinker cannot be used for libraries异常是完全符合预期的。
  • 库模块的资源是否被使用,只有在合并到最终应用后才能确定,所以库层面无法单独执行资源收缩操作。

KMP库未被混淆的原因

代码混淆(R8/ProGuard)的生效需要满足以下条件,你可能混淆了资源收缩和代码混淆的配置:

  • 基础App模块必须开启minifyEnabled = true——这才是触发代码混淆的核心开关,isShrinkResources仅负责资源处理,与代码混淆无关。
  • KMP库的Android目标模块不能禁用混淆,且最好提供自身的混淆规则文件(如proguard-rules.pro),并通过consumerProguardFiles将规则传递给App模块,避免核心代码被误删。
  • 默认情况下,App的混淆规则不会自动应用到依赖库,需确保库的配置允许被混淆。

安全风险与解决方案

  • 若KMP库包含敏感业务逻辑但未被混淆,确实存在安全风险:攻击者可通过反编译工具直接查看、分析库中代码逻辑。
  • 解决步骤:
    1. 在基础App的build.gradle中确保开启minifyEnabled = true,同时保留isShrinkResources = true用于资源优化。
    2. 在KMP的Android目标模块中,添加混淆规则文件,并配置consumerProguardFiles "proguard-rules.pro",让App模块打包时应用这些规则。
    3. 移除KMP库模块中isShrinkResources = true的配置,该配置仅在App模块中设置即可。

内容的提问来源于stack exchange,提问作者Ivan Šimović

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:51:02