我的Eclipse Android应用程序是在android-sdk \ platforms \ android-16中使用android.jar构建的,在断点处我想查看调用堆栈中的以下代码:
ViewRoot.draw(boolean) line: 1522
我在android-sdk \ sources \ android-16中有android-16的源代码。但是,没有ViewRoot.java - 我最接近的是android-sdk \ sources \ android-16 \ android \ view中的ViewRootImpl.java。 draw(boolean)函数在那里,但是从第2050行开始。 1522行的功能完全不同。
所以我的问题是:为什么文件名和行号不匹配?
我的清单有targetSdkVersion =“15”,但这肯定不会有任何区别吗?我在sources文件夹中搜索了ViewRoot.java,但只查找了ViewRootImpl.java和ViewRootImpl_Delegate.java(无论是什么)。
编辑: 添加了完整的调用堆栈
Spine [Android Application]
DalvikVM[localhost:8613]
Thread [<1> main] (Suspended (breakpoint at line 670 in ChartView))
<VM does not provide monitor information>
ChartView.onDraw(Canvas) line: 670
ChartView(View).draw(Canvas) line: 6880
NineFrameLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646
NineFrameLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
LinearLayout(ViewGroup).drawChild(Canvas, View, long) line: 1644
LinearLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
FrameLayout(ViewGroup).drawChild(Canvas, View, long) line: 1644
FrameLayout(ViewGroup).dispatchDraw(Canvas) line: 1373
PhoneWindow$DecorView(ViewGroup).drawChild(Canvas, View, long) line: 1644
PhoneWindow$DecorView(ViewGroup).dispatchDraw(Canvas) line: 1373
PhoneWindow$DecorView(View).draw(Canvas) line: 6883
PhoneWindow$DecorView(FrameLayout).draw(Canvas) line: 357
PhoneWindow$DecorView.draw(Canvas) line: 1862
ViewRoot.draw(boolean) line: 1522
ViewRoot.performTraversals() line: 1258
ViewRoot.handleMessage(Message) line: 1859
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 3683
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 507
ZygoteInit$MethodAndArgsCaller.run() line: 839
ZygoteInit.main(String[]) line: 597
NativeStart.main(String[]) line: not available [native method]
Thread [<8> Binder Thread #2] (Running)
Thread [<7> Binder Thread #1] (Running)
Thread [<10> Binder Thread #3] (Running)
Thread [<11> Binder Thread #4] (Running)
这是我感兴趣的ViewRoot.draw中发生的事情,因为这是调用堆栈中的一点(在调试器中使用步骤返回),在运行Gingerbread的手机上查看屏幕被清空(在我的情况下) AVD - 我没有那个硬件)。这是因为我升级了UI以使用SherlockActionBar,但有问题的代码是从Android导入的 - 而不是Sherlock库。但我的问题仍然存在 - 为什么我不能在android-16源代码中找到ViewRoot.java,只有一个类似的模块,其中的行号不能绑定?
答案 0 :(得分:2)
您在堆栈跟踪中看到的行号和类与您运行的apk的android版本有关。在您的情况下 Gingerbread ,因此您需要在该版本的sdk中查找源代码。 在您的情况下,相应的源代码应该是this,假设这是您正在使用的sdk版本。如果它只是改变该网站上的版本而你应该拥有你想要的东西。