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 で何が起こっているかです。なぜなら、Gingerbread を実行している電話 (私の場合は AVD -私はそのハードウェアを所有していません)。SherlockActionBar を使用するように UI をアップグレードしたためですが、問題のコードは Android からインポートされたものであり、Sherlock ライブラリではありません。しかし、私の質問は残っています - Android-16 ソースに ViewRoot.java が見つからないのはなぜですか?

4

1 に答える 1

2

スタック トレースに表示される行番号とクラスは、apk が実行されている Android のバージョンに関連しています。あなたのケースではGingerbreadであるため、そのバージョンの SDK でソースを探す必要があります。あなたの場合、適切なソースコードは、使用しているsdkバージョンであると仮定して、これでなければなりません。そのサイトのバージョンを変更するだけでなく、探しているものがあるはずです。

于 2012-11-18T23:17:14.370 に答える