Android即时应用:如何调试即时应用?

ibr*_*han 6 android android-debug android-studio android-instant-apps

当我在Android Studio上调试我的即时应用程序时,调试器会附加到即时应用程序进程并暂停大多数断点处的执行.但是它似乎忽略了我的主要活动的onCreate方法中的断点.我尝试过"调试"和"将调试器附加到Android进程"选项.我错过了什么?

ibr*_*han 12

有关如何使用Android Studio调试器调试Android应用程序的基本信息,请参阅开发人员文档调试您的应用程序 .

在调试即时应用程序时,Android Studio调试器通常在大多数情况下正常工作.但是,您会注意到调试器将无法在应用程序生命周期的早期(例如Application.onCreateActivity.onCreate)运行Android N及更低版本的设备上的断点处停止.

当您的即时应用程序启动并运行时,它将在您的应用程序包名称下运行.但是,在应用程序启动期间,它在临时程序包名称下运行时会有一段很短的时间,格式如下:

com.google.android.instantapps.supervisor.isolated[0-9]+
Run Code Online (Sandbox Code Playgroud)

此临时名称由运行时分配.由于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
Run Code Online (Sandbox Code Playgroud)

识别软件包名称后,使用以下命令暂停,并使您的即时应用程序进程等待调试程序.然后正常附加调试器,但通过单击"显示所有进程"在"选择进程"窗口中选择临时进程名称.

=> adb shell am set-debug-app -w --persistent com.google.android.instantapps.supervisor.isolated15
Run Code Online (Sandbox Code Playgroud)