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

Android库集成Jetpack Compose后报ClassNotFoundException异常

问题产生原因

这个问题和代码压缩、混淆没有关系,核心是Gradle依赖配置规则不符合AAR发布的预期:

  1. Android库模块默认输出的AAR不会包含implementation声明的第三方依赖字节码,同时implementation标记的依赖不会作为传递依赖暴露给引入AAR的宿主应用。
  2. 你当前所有Compose相关依赖都用implementation声明,既没有打包进AAR,也不会通知宿主应用拉取这些依赖。而你的目标宿主本身没有接入Jetpack Compose,运行时启动你写的Compose Activity时,自然找不到androidx.compose.material.ColorsKt、androidx.compose.runtime.internal.ComposableLambdaKt这类Compose核心类,抛出ClassNotFoundException。
  3. 额外配置问题:你的依赖声明里重复添加了两次androidx.compose.ui:ui-tooling-preview,属于冗余配置,虽然不会直接导致类找不到,但会增加不必要的配置复杂度。
修复方案

优先选择符合Android开发规范的依赖传递方案,避免冲突:

  • 将所有运行时必需的Compose相关依赖、以及其他对外暴露接口需要用到的依赖,从implementation修改为api。api声明的依赖会作为传递依赖,在宿主引入你的AAR时自动被Gradle拉取,即使宿主没有主动接入Compose,也能拿到所有需要的类。
  • 检查库模块的build.gradle配置,确保已经开启Compose编译支持,配置示例如下(和你当前的版本匹配):
android {
    // 省略compileSdk、defaultConfig等常规配置
    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.1"
        kotlinCompilerVersion = "1.6.10"
    }
}
  • 删除冗余的重复依赖:去掉重复声明的那行implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"。
  • 重新编译发布AAR后,可以在宿主工程执行./gradlew app:dependencies检查依赖树,确认Compose相关依赖已经被正确拉取,即可解决运行时类找不到的问题。

如果你需要输出不依赖外部传递依赖的单文件AAR(不推荐,极易引发依赖冲突),可以引入FatAAR类插件,在编译阶段将所有依赖的字节码合并进AAR包内,但这种方案如果宿主本身也引入了相同的依赖(比如Glide、Kotlin协程、Compose组件),会出现重复类的编译错误。

内容的提问来源于stack exchange,提问作者TareK Khoury

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:42:26