我发现许多用户在发布版本中使用属性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/