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

Kotlin DSL环境下为何Play Store发布包仍能输出日志?

关于Release版本日志仍可通过USB获取的问题

我们未在Release模式下启用日志,但通过USB连接Android Studio时,仍能获取到从应用商店下载的Release版本的日志。

当前BuildTypes配置(Kotlin DSL)

buildTypes {
    debug {
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "proguard-rules.pro"
        )

        configure<CrashlyticsExtension> {
            // No need during development, enabling it also prevents Gradle to work offline
            mappingFileUploadEnabled = false
        }

        signingConfig = signingConfigs.getByName("debug")
    }
    release {
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "proguard-rules.pro"
        )

        signingConfig = signingConfigs.getByName("release")
    }
}

疑问

使用Kotlin DSL时,是否需要在构建变体中显式禁用日志?

日志片段(三星A32,Android 13)

02:37:01.463  I  ViewPostIme pointer 0
02:37:01.563  I  ViewPostIme pointer 1
02:37:01.581  D  initGoToTop
02:37:01.594  D  [NativeCFMS] BpCustomFrequencyManager::BpCustomFrequencyManager()
02:37:01.631  I  Relayout returned: old=(0,80,1080,2274) new=(28,669,1052,1684) req=(1024,1015)0 dur=10 res=0x3 s={true 0xb400006f071bd800} ch=true seqId=0
02:37:01.632  I  mThreadedRenderer.initialize() mSurface={isValid=true 0xb400006f071bd800} hwInitialized=true
02:37:01.632  D  eglCreateWindowSurface
02:37:01.637  D   onsize change changed 
02:37:01.638  I  reportNextDraw android.view.ViewRootImpl.performTraversals:4438 android.view.ViewRootImpl.doTraversal:3116 android.view.ViewRootImpl$TraversalRunnable.run:10885 android.view.Choreographer$CallbackRecord.run:1301 android.view.Choreographer$CallbackRecord.run:1309 
02:37:01.638  I  Setup new sync id=0
02:37:01.639  I  Setting syncFrameCallback
02:37:01.639  I  registerCallbacksForSync syncBuffer=false
02:37:01.643  I  Received frameDrawingCallback syncResult=0 frameNum=1.
02:37:01.643  I  Setting up sync and frameCommitCallback

解答

  1. 无需在Kotlin DSL构建变体中显式禁用日志,但要确保ProGuard/R8的优化配置正确——Release构建默认不会自动移除所有应用日志,依赖混淆规则处理。

  2. 自定义日志移除方法:在proguard-rules.pro中添加以下规则,配合proguard-android-optimize.txt的优化配置,可移除应用中的Log调用:

-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

注意:该规则仅在启用优化(proguard-android-optimize.txt包含优化配置)时生效,若使用默认的proguard-android.txt则不会触发。

  1. 系统日志无法移除:日志片段中的ViewPostIme、mThreadedRenderer等属于系统级日志,是Android系统组件输出的,不受应用构建配置影响,无论Release还是Debug版本都能看到。只有initGoToTop这类自定义应用日志可以通过ProGuard移除。

  2. 额外验证点:

  • 确认应用商店上架的是正确的Release构建,而非Debug版本;
  • 检查isMinifyEnabled和isShrinkResources在Release变体中确实被设为true,确保混淆和资源收缩生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:04:57