【问题标题】:AndroidStudio: What does 'debuggable' do?Android Studio:“可调试”有什么作用?
【发布时间】:2016-05-10 16:17:14
【问题描述】:

我想知道debuggable true 语句的确切作用:

// build.gradle
android
  {         
    buildTypes
      {
        debug
          { debuggable true
          }       
      }
  }

能够使用模拟器(genymotion)在没有它的情况下进行调试:断点有效; Log.d(...) 语句输出到 Android 监视器;

由于debuggable 标志在内部 debug 部分,无论如何它似乎是多余的。它不应该在buildTypes 部分之外,向ide 表明应该使用debug 构建类型吗?


如果能对debugrelease 构建类型之间的区别进行一些简单的外行一般背景了解也会很好。

【问题讨论】:

  • 停止在您的帖子中添加“downvoters 请解释原因”之类的信息。否决者会或不会按照他们的特权解释,您不断地打扰他们这样做是在给网站添加不必要的混乱,并且此类元信息不属于您的问题或答案。
  • 我同意......它很简洁......但同时,如果我发布一个被否决的问题,其他知识渊博的人会倾向于避免看它,认为这是一个非法问题...这会影响该系统的完整性

标签: android debugging android-studio build.gradle


【解决方案1】:

在 Android 上,调试器使用JDWP 与虚拟机通信。启用调试后,VM 会创建一个专用线程来侦听 JDWP 流量并响应请求。 (也可以使用原生调试器,例如 gdb,但那是另一回事。)

在出售给消费者的设备上,通常不需要运行额外的线程,因此默认情况下应用程序不可调试。此外,恶意软件可能会使用调试器界面来检查或操纵正在运行的应用程序,因此禁用它是最安全的。另一方面,在模拟器上运行的任何东西都应该是可调试的,因此默认行为是不同的。 ro.debuggable 系统属性决定了这一点 (adb shell getprop ro.debuggable)。

应用清单中的debuggable 标志告诉虚拟机该应用正在开发中,无论应用是否在生产设备上运行,都应允许来自调试器的连接。

以上所有内容都与应用的运行时行为有关,而不是构建。调试版本也不同于发布版本。将-g 标志传递给javac 会导致输出附加信息,并且dx 选项将删除或保留.dex 文件中的附加调试信息。 (我不知道 gradle 标志如何与这些交互。)

【讨论】:

  • 谢谢 .. 这很有帮助 ... 但请原谅我,因为我仍然不确定 debuggable 标志到底是做什么的...无论我在测试它似乎都没有任何影响使用RunDebug 按钮(android studio),或者我使用的是模拟器(genymotion)还是真正的android 手机。断点和 Log.d(...) 似乎都没有受到影响...
  • 当应用程序在debuggable 设置为false 的情况下构建时,清单将指示VM 不应侦听调试器活动。因此,当应用程序在生产(非开发人员)设备上运行时,您应该无法将调试器附加到应用程序。有根设备可能会更改ro.debuggable,因此您可能需要使用答案中显示的 adb shell 命令确认设置。构建配置中的任何内容都不会影响Log.d;如果你想禁用日志消息,你必须自己做。 (向log.d 添加检查效果不佳——不会跳过参数设置。)
【解决方案2】:

它会导致 Android gradle 插件在生成时在应用程序清单中包含 debuggable 标志。这允许调试器在模拟器或设备上运行时附加到应用程序。

【讨论】:

  • 这听起来很愚蠢,但这给我带来了更多的问题(我来自 javascript/web 应用程序背景)......“附加到应用程序”是什么意思......什么是“调试器”(除了明显的定义)......什么是“应用程序清单”......为什么需要生成一个? (谁会使用它??) ...
  • @dsdsdsdsd 这都是谷歌搜索的结果。这些类型的问题不在此表单上。您基本上是在寻找教程。
  • 几乎没有比这个网站上的任何其他问题更重要......因为你是“AndroidMechanic”,而且你显然使用这个网站,也许你可以提供一些有意义的信息,这样当未来的安卓新手像我一样正在寻求理解,他们可能会使用谷歌并登陆这里,你的智慧对他们来说很有价值......
  • @dsdsdsdsd 在 Javascript / web 世界之外开发是相当不同的。 Android开发也不例外,也不同于其他传统操作系统的开发。 Android 开发的初学者课程肯定会对您有所帮助。有大量培训课程可作为付费订阅(我在 Pluralsight.com 上撰写了 2 个)以及免费提供。
猜你喜欢
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
相关资源
最近更新 更多