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

升级到Android 15、AGP 8.8.1及Kotlin 2.0后APK体积增大且androidx.compose.*未被混淆的问题咨询

升级到Android 15、AGP 8.8.1及Kotlin 2.0后APK体积增大且androidx.compose.*未被混淆的问题咨询

嘿,看起来你在升级到Android 15(target/compile SDK 35)、AGP 8.8.1和Kotlin 2.0后,遇到了挺头疼的APK体积问题——androidx.compose.*相关类没被R8/ProGuard混淆,直接导致了2.4MB的体积增长,而之前AGP<7、Kotlin 1.9.0、SDK 34的配置下一切正常对吧?我来给你梳理几个大概率能解决问题的排查方向,都是这类升级场景里的常见坑:

先查AGP 8.x带来的R8默认规则变化

AGP 8.x开始对R8的默认配置做了不少调整,尤其是针对Compose这种依赖注解和反射的框架。为了避免Compose运行时崩溃,AGP 8+可能默认给androidx.compose.*类加了保护规则,不让它们被混淆。

你可以先开启混淆日志,看看是不是默认规则在搞鬼:
在你的release build配置里加上这些参数,生成详细的混淆报告:

android {
    buildTypes {
        release {
            minifyEnabled true
            debuggable false
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            
            // 开启混淆日志,方便排查
            extraProguardArgs = [
                '-printconfiguration', "$buildDir/outputs/proguard/release/configuration.txt",
                '-printseeds', "$buildDir/outputs/proguard/release/seeds.txt",
                '-printmapping', "$buildDir/outputs/proguard/release/mapping.txt"
            ]
        }
    }
}

编译后打开seeds.txt,如果里面有一大堆androidx.compose.*的类,那就实锤是默认规则在保护它们了。这时候你可以在空的proguard-rules.pro里手动加规则,允许混淆Compose类的同时保留必要的运行时逻辑:

# 保留Composable函数,避免运行时找不到
-keep @androidx.compose.runtime.Composable class * {
    <methods>;
}
# 保留Compose的核心注解和属性,确保反射逻辑正常
-keepattributes *Annotation*, InnerClasses, Signature
# 允许混淆Compose的其他类和方法名
-allowobfuscation class androidx.compose.**

注意:Compose的部分核心类(比如状态管理相关)如果被过度混淆可能会崩,所以加完规则后一定要做完整的功能测试!

排查Kotlin 2.0的编译兼容性

Kotlin 2.0对字节码生成做了不少优化,和R8的适配可能还有小问题。你可以先试试调整Kotlin编译参数,或者临时关闭IR编译器排查:
比如在build.gradle里加上这些Kotlin配置:

kotlinOptions {
    jvmTarget = "1.8"
    freeCompilerArgs += [
        "-Xjvm-default=all",
        "-Xno-param-assertions",
        "-Xno-call-assertions",
        "-Xno-receiver-assertions"
    ]
    // 临时关闭IR编译器测试(仅排查用,不建议长期保留)
    // useIR = false
}

如果关闭IR后混淆正常了,那就是Kotlin 2.0 IR和R8的适配问题,后续可以等AGP或Kotlin的补丁版本修复。

检查Android 15(SDK 35)的系统规则

SDK 35可能新增了针对Jetpack库的保护规则,R8会自动引入这些规则来适配Android 15的行为。你可以查看AGP自带的默认proguard文件(路径大概是你Android SDK目录下的tools/proguard/proguard-android-optimize.txt),看看里面有没有新增的androidx.compose.*相关的keep规则。

确认资源压缩是否正常

虽然你开了shrinkResources true,但如果R8没正确标记Compose资源为未使用,也会导致体积增大。编译后可以看build/outputs/mapping/release/resource-shrinker-report.txt,看看Compose相关的资源是不是被误保留了。

如果这些方向都没解决问题,你可以提供以下信息方便进一步排查:

  • seeds.txt里androidx.compose.*类的具体条目
  • 项目中使用的Compose版本
  • build.gradle里完整的android闭包配置

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 06:59:29