Android 免安装应用:如何调试免安装应用?

Android Instant Apps: How to debug an instant app?

当我在 Android Studio 上调试即时应用程序时,调试器附加到即时应用程序进程并在大多数断点处暂停执行。然而,它似乎忽略了我的主要 activity 的 onCreate 方法中的断点。我试过 "Debug" 和 "Attach Debugger to Android Process" 选项。我错过了什么?

有关如何使用 Android Studio 调试器调试 Android 应用程序的基本信息,请访问 Developer Documentation Debug Your App .

Android Studio 调试器在调试免安装应用程序时大部分时间 正常工作。但是,您会注意到调试器将无法在设备 运行 Android N 及以下的应用程序生命周期早期的断点处停止(例如 Application.onCreateActivity.onCreate)。

当您的免安装应用启动并且 运行 时,它会在您应用的程序包名称下运行。但是,在应用程序启动过程中有一小段时间以临时包名运行,形式如下:

com.google.android.instantapps.supervisor.isolated[0-9]+

此临时名称由运行时分配。因为 Android Studio 不知道这个名称,所以调试器不会附加到这个进程。

解决方法是找出这个临时名称并使用 adb 将应用程序设置为调试。这可以通过 运行 在终端中 运行 您的应用程序之前的以下命令来完成。它会在您的应用启动时打印出名称。

=> adb shell 'while true; do ps | grep com.google.android.instantapps.supervisor.isolated; sleep 1; done'
u0_i6     31908 630   1121664 29888          0 00ea57eed4 R com.google.android.instantapps.supervisor.isolated15

确定包名称后,使用以下命令暂停并使您的免安装应用进程等待调试器。然后正常附加调试器,但通过单击“显示所有进程”在选择进程 window 中选择临时进程名称。

=> adb shell am set-debug-app -w --persistent com.google.android.instantapps.supervisor.isolated15

我最近在调试即时应用程序时也遇到了问题。 有多个日志消息

"Waiting for application to start debug server"

在调试中window并经过多次重试

"Could not connect to remote process. Aborting debug session."

我解决问题的方法是 通过使用 Android studio "Run" 菜单中的“Attach To Process” 选项。