【问题标题】:Enable LogCat on Release Build in Android Studio在 Android Studio 的发布版本中启用 LogCat
【发布时间】:2014-10-25 23:36:21
【问题描述】:

默认情况下,当我将Build Variants 更改为release 时,logcat 上没有任何日志,但我确实需要阅读我的应用程序的发布日志,我该如何启用它?

【问题讨论】:

  • 更改您的日志级别。我可能错了,但据我了解,Log.d 调用在发布版本导出时会被删除 - 我不确定还删除了哪些其他级别(如果有)。
  • @Squonk 我最近还观察到 Log.v 日志也没有在发布版本中公开。有谁知道是什么原因造成的吗?

标签: android logcat


【解决方案1】:

android:debuggable="true"(默认为false)添加到<application> 标签内的Manifest。

From the docs:

安卓:可调试
是否可以调试应用程序, 即使在用户模式下在设备上运行时 - 如果可以,则为“true”,并且 如果不是,则为“假”。

respectively

您可以通过删除 android:debuggable 属性来禁用调试 从清单文件中的标记,或通过设置 在清单文件中将 android:debuggable 属性设置为 false。

编辑

您可能需要将以下内容添加到您的build.gradle 文件中的 android{...} 标记内:

lintOptions {
   checkReleaseBuilds false
}

并且附带说明:无论您的应用程序的 debuggable 是否设置为 false,始终都会在设备上写入日志> 或 。但是通过 Android Studio 中的 LogCat,只有当 debuggable 设置为 true 时才有可能。 (刚刚测试过)

【讨论】:

  • 我认为这个答案不正确。至少,它引用的文档并没有说打开android:debuggable 会打开日志记录。事实上,developer.android.com/studio/publish/… 非常清楚,关闭日志记录和关闭调试是两件不同的事情。 OP 询问如何打开日志记录。
  • P.S.如果我错了,请纠正我,引用一个说android:debuggable="true" 启用日志记录的消息来源。
  • 您说的有点对,但debuggable 表示Android Studio 中的Android Monitor 可以附加到当前运行的APK 上。这使 Logcat 能够像在调试版本中一样显示日志语句。除此之外:这个答案现在已经有三年多了——所以很可能你应该切换到相应的 build.gradle 属性,称为 debuggable,可以根据 buildType 进行设置。
【解决方案2】:

我不喜欢其他解决方案,因为您没有测试应用程序的实际部署方式。

更好的解决方案是打开Android Device Monitor,即使在使用debuggable=false 的发布配置中,您也可以在其中看到日志。

在这里找到它:

工具 -> Android -> Android 设备监视器

更新:
Android 设备监视器已在 Android Studio 3.2 中移除。不过SDK里面还是有的,可以用它来查看日志(位于$ANDROID_SDK/tools/

【讨论】:

  • joxi.ru/eAOl5EWu8Ll5ro 来自市场的应用程序,清单中未提及可调试(因此,这是错误的)。什么都没有 - 在 AS LogCat 或 DeviceMonitor 中
  • 这样你不会看到 Log.v 和 Log.d
  • @DenRimus,我认为在 Play Market 中,应用程序应该处于发布模式。因此,可以关闭所有日志。
  • 这种方式无法过滤,因为看不到你的包对应的日志。
  • 有一个错字:应该是 $ANDROID_SDK/tools/ 而不是 $ANDROID_SKD/tools/ - 不幸的是我无法保存我的编辑
【解决方案3】:

你应该添加

android {
    buildTypes {
        release {
            debuggable true

在这种情况下,您可以使用Log.System.out.println 并查看日志。

如果您无法运行发布版本(app 已禁用),并显示错误:“apk 未签名。请使用项目结构对话框配置所选风味的签名信息”,请参阅app-release-unsigned.apk is not signed

【讨论】:

  • 这对我有用。首次启用 proguard 后,至少需要登录发布版本。但是不要忘记将debuggable false 用于生产构建:)
  • @MohK,同意你的看法。奇怪,但在另一个项目中,我在release 构建中有debuggable false,但即使在true 状态下,查看日志和调试也不起作用。 :)
  • 似乎它只适用于新版本AS中的System.out.println()。
  • @IldiX,您是否也尝试过 Kotlin println()Timber.
  • @CoolMind 项目在java中。
【解决方案4】:

build.gradle 中的debuggable true 效果很好,除了BuildConfig.DEBUG 也将是真的。如果您的应用仅在调试版本时依赖 BuildConfig.DEBUG 来执行某项操作,这可能是个问题。

在这种情况下,请尝试Log.wtf(BuildConfig.APPLICATION_ID, "something went wrong"),即使它是发布版本,它也会打印到 logcat。

【讨论】:

  • 同意你的看法。在这种情况下,我在配置类中为测试和发布版本添加了一个常量(并且不依赖于BuildConfig.DEBUG)。例如const val TEST = true。但不要忘记在发布应用程序时更改它的值。
【解决方案5】:

这种方法显然可以帮助您在测试生产构建时获取日志。但是在将您的应用上传到 Google Play 商店时要小心,在上传到生产环境之前,请将 debuggable 切换为 false

buildTypes {
    debug {
        manifestPlaceholders = [crashlyticsCollectionEnabled: "false"]
    }
    release {
        manifestPlaceholders = [crashlyticsCollectionEnabled: "false"]
        lintOptions {
            checkReleaseBuilds false
            abortOnError false
        }
        shrinkResources true
        minifyEnabled true
        debuggable true
        signingConfig signingConfigs.productionrelease
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

crashlyticsCollectionEnabled 设置为 false 以避免在调试时将崩溃报告给 Google Play-Store。

【讨论】:

    猜你喜欢
    • 2013-07-12
    • 2016-10-11
    • 2018-12-02
    • 1970-01-01
    • 2016-10-09
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    相关资源
    最近更新 更多