系统应用程序 JDWP 调试在 Android 模拟器 14 和 15 中损坏

问题描述 投票:0回答:1

我正在尝试在 Android 14 和 Android 15 模拟器中以交互方式调试系统 Android 应用程序,例如

com.android.phone
,但我无法通过 JDWP 连接。

我的主机是:

Ubuntu 22.04.5 LTS
Linux 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov  6 17:42:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

在 Android 14 模拟器中,它会挂起运行

adb jdwp
,并在尝试连接时出错:

$ adb shell getprop | grep ro.build.fingerprint
[ro.build.fingerprint]: [Android/sdk_phone64_x86_64/emu64x:14/UE1A.230829.036.A1/11228894:userdebug/test-keys]

$ adb forward --remove-all

$ adb forward tcp:5005 jdwp:1161

$ adb forward --list
emulator-5554 tcp:5005 jdwp:1161

$ adb jdwp
... hangs forever ...

$ jdb -attach localhost:5005
java.io.IOException: handshake failed - connection prematurally closed
    at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136)
    at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)
    at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
    at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)
    at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
    at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
    at com.sun.tools.example.debug.tty.Env.init(Env.java:63)
    at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1083)

Fatal error:
Unable to attach to target VM.

在 Android 13 模拟器中,相同的命令可以工作:

$ adb shell getprop | grep ro.build.fingerprint
[ro.build.fingerprint]: [Android/sdk_phone64_x86_64/emulator64_x86_64:13/TE1A.220922.034/10940250:userdebug/test-keys]

$ adb forward --remove-all

$ adb forward tcp:5005 jdwp:961

$ adb forward --list
emulator-5554 tcp:5005 jdwp:961

$ adb jdwp
603
... etc ...

$ jdb -attach localhost:5005
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
>
android-emulator adb
1个回答
0
投票

Google 似乎从 Android 14 开始更改了 AOSP,以使

userdebug
构建生成的 APK 未在清单中将
debuggable
设置为 true。

由于

jdwp_service.cpp
中的这段代码,因此无法使用JDWP进行连接:

        // Don't allow JDWP connection to a non-debuggable process.
        if (!proc->process.debuggable) continue;

也许对于预建的

userdebug
模拟器有一些解决方法(毕竟我们确实有root权限),但我不知道有哪一个是临时的。

现在我正在构建自己的

eng
构建AOSP模拟器,我可以用它来调试系统应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.