java - "debuggable false"足以阻止调试我的应用程序吗?

标签 java android debugging

我发现许多用户在发布版本中使用属性debuggable false:

release {
    debuggable false
    ...
}

官方文档也建议这样做,所以我认为这是一种安全措施,或者至少是一种避免逆向工程和/或应用程序数据被盗的方法。

但是,这足以阻止调试我的应用程序吗?

我已经通过 Google 和 Stack Overflow 进行了搜索,但只找到了有关该属性的信息。

对于“调试”,我并不是指观察应用程序行为的“逆向工程”,而是通过将应用程序连接到另一个程序/软件来获取有关它的信息来调试应用程序,例如Android Studio 调试器。

我在 Ubuntu Linux 计算机上使用 Java 和最新版本的 Android Studio。

非常感谢!

最佳答案

list 中的debuggable设置告诉正在运行的系统该应用可能附加了调试器。对于基于 Java/Kotlin 的应用程序(例如任何第三方 Android 应用程序),这会导致系统启动一个内部线程,允许调试器附加到进程。这与传统的 Java 应用程序调试一致。事实上,您可以将任何符合 JDWP 的调试器(例如 jdp)附加到进程。如果没有此设置,进程将不会有监听端口的调试线程,因此无法附加 JDWP 调试器。这与附加 gdb 并将符号内置到可执行镜像中不同。 Android 应用程序不是典型的可执行文件。

在典型的 Linux 系统上,像 gdb 这样的东西可以“附加”到任何正在运行的进程。不过,易用性会根据调试符号是否内置到镜像中而有所不同。然而,在 Android 上,系统安全性将阻止 shell 进程附加到任何使用 gdb 的进程,除非它是开发系统或已 root 的系统。

关于java - "debuggable false"足以阻止调试我的应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59035649/

相关文章:

java - 如何调用Camel读取文件的路由?

java - 获取文件名(手机存储/下载文件夹中的图像)

android - viewPager.setOnPageChangeListener 不工作

java - 快速单击时 PopupWindow 中的按钮会变成透明吗?

c++ - 在 Mac OS X 上检测调试器

java - 在displaytag中创建下拉行

java - 从字符串中提取两个数字

java - 嵌入式 Tomcat 7 将 Spring 应用程序上下文传递给 servlet

worker 未正确返回的结果 - 雪 - 调试

visual-studio-2010 - 强制 Visual Studio 2010 使用源服务器查找文件