如何在Android库的internal类中设置断点?
问题
协助调试Kotlin编写的Android应用集成Wallet Connect (v2)时,com.walletconnect:android-core库抛出异常,需要设置断点或添加调试打印排查问题,但遇到以下障碍:
- 库通过Gradle引入:
implementation("com.walletconnect:android-core:1.3.0") implementation("com.walletconnect:sign:2.1.0") - 错误栈显示异常来自
JsonRpcInteractor类的handleError方法(行号271),被包装在java.lang.InternalError中:java.lang.InternalError: JsonRpcInteractor: Received unknown object type at com.walletconnect.android.impl.json_rpc.domain.JsonRpcInteractor$handleError$1.invokeSuspend(JsonRpcInteractor.kt:271) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42) at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664) - 在Android Studio的External Libraries中仅能找到
JsonRpcInteractorInterface接口,找不到被internal class修饰的JsonRpcInteractor实现类,无法设置断点。 - 尝试替换为本地修改过的依赖,但Gradle无法找到库项目;已能通过
./gradlew installDebug构建WalletConnectKotlinV2项目,但不清楚构建产物位置,希望生成jar文件方便引入。
解决方法
方案1:直接定位内部类并设置断点
- 按下
Ctrl+N(Windows/Linux)或Cmd+O(Mac)打开Android Studio的「Find Class」窗口 - 输入
JsonRpcInteractor,勾选窗口底部的「Include non-project classes」选项 - 找到
com.walletconnect.android.impl.json_rpc.domain.JsonRpcInteractor类并打开 - 在错误栈标注的第271行左侧 gutter 点击设置断点,
internal修饰符不影响调试断点触发
方案2:构建本地Wallet Connect库并替换远程依赖
获取本地构建产物
- 克隆WalletConnectKotlinV2仓库,切换到与项目依赖版本匹配的分支(对应android-core:1.3.0、sign:2.1.0)
- 在仓库根目录执行构建命令:
# 构建android-core模块的Release版本 ./gradlew :android-core:assembleRelease # 构建sign模块的Release版本 ./gradlew :sign:assembleRelease - 构建产物为
.aar文件(Android专用库格式,比jar更适配Android项目),路径分别为:- android-core:
android-core/build/outputs/aar/android-core-release.aar - sign:
sign/build/outputs/aar/sign-release.aar
- android-core:
替换Gradle依赖
- 将生成的
.aar文件复制到项目的libs目录下 - 修改项目的
build.gradle(或build.gradle.kts):- 注释掉原远程依赖:
// implementation("com.walletconnect:android-core:1.3.0") // implementation("com.walletconnect:sign:2.1.0") - 添加本地aar依赖:
implementation files("libs/android-core-release.aar") implementation files("libs/sign-release.aar")
- 注释掉原远程依赖:
- 同步Gradle后,即可使用修改过的本地库,可直接在源码中添加打印或断点
方案3:通过日志排查问题
如果暂时无法断点,可开启Wallet Connect的 verbose 日志,捕获RPC相关细节:
- 在应用初始化时配置日志级别:
WalletConnect.initialize( context = applicationContext, connectionType = ConnectionType.AUTOMATIC, applicationMetaData = ApplicationMetaData( name = "你的应用名称", description = "应用描述", url = "应用URL", icons = listOf("应用图标URL") ), logger = Logger(LogLevel.VERBOSE) ) - 在Android Studio的Logcat中筛选标签包含
WalletConnect的日志,可查看RPC请求、响应及错误的详细内容,辅助定位「Received unknown object type」的具体原因
内容的提问来源于stack exchange,提问作者bisgardo
相关产品推荐
相关产品推荐

