Android P预览版WifiRttManager.startRanging方法调用报错咨询
我之前测试Android早期预览版时也碰到过类似的API签名不匹配问题,结合你的情况,给你几个可行的排查方向:
确认SDK与系统预览版版本对齐
Android P预览版在迭代过程中API会有调整,比如startRanging的方法签名可能在不同预览版批次里有变动。你需要确保项目的compileSdkVersion和targetSdkVersion完全匹配你测试设备上刷的Android P预览版版本,不要混用不同阶段的SDK包。比如在build.gradle里检查这两个参数是不是设置为对应的预览版标识(比如android-P或者具体的预览版编号)。核对设备系统版本与SDK的一致性
如果你的设备刷的是Android P的早期预览镜像,但Android Studio里用的是较新的预览版SDK,就会出现代码里的方法签名和系统实际存在的方法不匹配的情况。这时候要么把设备的系统升级到和SDK对应的预览版,要么降级SDK到设备系统对应的版本,保持两端一致。另外别忘了确认你的设备硬件支持802.11mc协议,不然Wifi RTT本身就无法正常工作。检查方法调用的参数匹配度
你提到Android Studio显示的签名是startRanging(RangingRequest rangingRequest, Executor executor, RangingResultCallback callback),但早期的Android P预览版里这个方法可能没有Executor参数,签名是startRanging(RangingRequest, RangingResultCallback)。如果你的代码用了带Executor的签名调用,在旧预览版系统上就会抛出No virtual method startRanging的错误。这种情况下可以考虑做版本适配:if (Build.VERSION.SDK_INT >= 28 /* 对应Android P正式版,预览版可能需调整 */) { wifiRttManager.startRanging(request, executor, callback); } else { // 适配早期预览版的方法签名 Method method = WifiRttManager.class.getMethod("startRanging", RangingRequest.class, RangingResultCallback.class); method.invoke(wifiRttManager, request, callback); }注意这里的SDK_INT判断可能需要根据你实际的预览版版本调整,因为预览版的SDK_INT可能是28的预览值。
清理项目缓存
有时候Android Studio的缓存会导致方法签名显示错误,尝试通过File -> Invalidate Caches / Restart清理缓存,然后执行Clean Project和Rebuild Project,确保项目依赖的SDK是正确的版本。
内容的提问来源于stack exchange,提问作者David

