2

我的 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",但这应该没什么区别,对吧?我在源文件夹中搜索了 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 中发生的事情,因为这是调用堆栈中的点(在调试器中使用 step return),其中视图屏幕在运行 Gingerbread 的手机上被空白(在我的情况下是 AVD -我没有那个硬件)。这是因为我升级了 UI 以使用 SherlockActionBar,但是有问题的代码是从 Android 导入的,而不是从 Sherlock 库导入的。但我的问题仍然存在 - 为什么我在 android-16 源代码中找不到 ViewRoot.java,只有一个类似的模块,其中行号不相关?

4

1 回答 1

2

您在堆栈跟踪中看到的行号和类与您运行 apk 的 android 版本有关。在您的情况下Gingerbread,因此您需要在该版本的 sdk 中查找源代码。在您的情况下,假设您正在使用的 sdk 版本,适当的源代码应该是这样的。如果它不只是更改该站点上的版本,那么您应该拥有您正在寻找的东西。

于 2012-11-18T23:17:14.370 回答