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

如何在build.gradle.kts中正确配置doNotStrip避免Native库被剥离

在build.gradle.kts中配置禁止剥离Native库(替代doNotStrip)

正确配置方式

在AGP 7.0及以上版本的build.gradle.kts中,原Groovy语法里的packagingOptions.doNotStrip已被废弃,需改用packaging.jniLibs.keepDebugSymbols配置,具体分两种场景:

禁止剥离所有Native库

如果要保留所有.so文件的调试符号,直接用通配符匹配所有文件:

android {
    packaging {
        jniLibs {
            keepDebugSymbols += "**/*.so"
        }
    }
}

仅保留特定Native库的符号

针对指定的.so文件配置,需确保路径匹配准确,比如指定多架构下的liba.so:

android {
    packaging {
        jniLibs {
            // 匹配特定架构的目标文件
            keepDebugSymbols += "arm64-v8a/liba.so"
            keepDebugSymbols += "armeabi-v7a/liba.so"
            // 用通配符匹配所有架构下的libb.so
            keepDebugSymbols += "*/*/libb.so"
        }
    }
}

为什么之前的配置未生效

  • 你最初尝试的packagingOptions.doNotStrip是旧版AGP的Groovy语法,在build.gradle.kts中已不再生效;
  • 后续的jniLibs.keepDebugSymbols配置如果没起作用,大概率是通配符的匹配逻辑和实际文件路径不匹配,建议先用**/*.so全量匹配测试,确认生效后再缩小范围。

关于stripped_native_libs目录的疑问

即使配置生效,./app/build/intermediates/stripped_native_libs/目录依然会被创建——这是AGP构建流程中的中间产物目录,但此时目录内的.so文件并未被剥离符号。最终打包到APK/AAB中的是保留了调试符号的版本,你可以通过查看APK内的.so文件大小,或用readelf工具检查符号表来验证配置是否生效。

另外补充:Debug构建默认不会剥离Native库符号,但若你手动在buildTypes中设置了ndk.debugSymbolLevel = "stripped",则需要上述配置覆盖;Release构建默认会剥离符号,必须配置keepDebugSymbols才能保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:36:13