2014-12-16 2 views
3

오류의 원인을 이해하기 위해 안드로이드 소스를보고 싶습니다. 나는 API 19와 동일한 version 4.4.4 인 안드로이드 장치를 가지고있다. API 레벨 19 (sdk 관리자를 통해) 소스를 다운로드했으며 오류를 유발하는 코드를 찾으려고했습니다.어떻게 안드로이드 장치에 대한 올바른 소스를 찾으려면?

12-16 16:51:03.790: E/AndroidRuntime(10349): java.lang.NullPointerException 
12-16 16:51:03.790: E/AndroidRuntime(10349): at android.widget.TextView.checkForRelayout(TextView.java:6596) 
12-16 16:51:03.790: E/AndroidRuntime(10349): at android.widget.TextView.onRtlPropertiesChanged(TextView.java:8716) 
12-16 16:51:03.790: E/AndroidRuntime(10349): at android.view.View.resolvePadding(View.java:12538) 

그러나 문제는 텍스트 뷰 클래스 라인 안에 6596은 것입니다 : : 8716 코멘트입니다

} else { 

라인 로그 캣에서
나는 오류가 있습니다. 따라서 소스는 오류에 해당하지 않습니다. 올바른 출처를 찾는 방법?

또한 체크인 기기 Build.VERSION.SDK_INT is 19 인 경우. 기기 - Sony Xperia tablet.

전체 로그 캣 12 ~ 16 17시 30분 43초

.401: E/AndroidRuntime(19327): java.lang.NullPointerException 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.TextView.checkForRelayout(TextView.java:6596) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.TextView.onRtlPropertiesChanged(TextView.java:8716) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.resolvePadding(View.java:12538) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.resolveRtlPropertiesIfNeeded(View.java:12289) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.measure(View.java:16639) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at com.cooperok.gui.views.tablefixheader.TableFixHeaders.makeView(TableFixHeaders.java:741) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at com.cooperok.gui.views.tablefixheader.TableFixHeaders.makeAndSetup(TableFixHeaders.java:698) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at com.cooperok.gui.views.tablefixheader.TableFixHeaders.onLayout(TableFixHeaders.java:601) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.layout(View.java:14965) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewGroup.layout(ViewGroup.java:4631) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.layout(View.java:14965) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewGroup.layout(ViewGroup.java:4631) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.layout(View.java:14965) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewGroup.layout(ViewGroup.java:4631) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.layout(View.java:14965) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewGroup.layout(ViewGroup.java:4631) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.layout(View.java:14965) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewGroup.layout(ViewGroup.java:4631) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.layout(View.java:14965) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewGroup.layout(ViewGroup.java:4631) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.layout(View.java:14965) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewGroup.layout(ViewGroup.java:4631) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.View.layout(View.java:14965) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewGroup.layout(ViewGroup.java:4631) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5622) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.Choreographer.doFrame(Choreographer.java:544) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.os.Handler.handleCallback(Handler.java:733) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.os.Handler.dispatchMessage(Handler.java:95) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.os.Looper.loop(Looper.java:212) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at android.app.ActivityThread.main(ActivityThread.java:5135) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at java.lang.reflect.Method.invokeNative(Native Method) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at java.lang.reflect.Method.invoke(Method.java:515) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
12-16 17:30:43.401: E/AndroidRuntime(19327): at dalvik.system.NativeStart.main(Native Method) 
+0

귀하의 min sdk는 무엇입니까? –

+0

minsdk는 15이지만 버전 15의 소스도 이에 해당하지 않습니다 – cooperok

+0

전체 logcat은 무엇입니까? – Nanis

답변

0

나는 기원 안드로이드 소스를 통해 보면서 NullPointerException이의 두 가망 변종이 있음을 finded 내 문제를 해결하기 때문에이 문제가

/** 
* Check whether entirely new text requires a new view layout 
* or merely a new text layout. 
*/ 
private void checkForRelayout() { 
    // If we have a fixed width, we can just swap in a new text layout 
    // if the text height stays the same or if the view height is fixed. 

    if ((mLayoutParams.width != LayoutParams.WRAP_CONTENT || 
      (mMaxWidthMode == mMinWidthMode && mMaxWidth == mMinWidth)) && 
      (mHint == null || mHintLayout != null) && 
      (mRight - mLeft - getCompoundPaddingLeft() - getCompoundPaddingRight() > 0)) { 
     // Static width, so try making a new text layout. 

     int oldht = mLayout.getHeight(); 
     int want = mLayout.getWidth(); 
     int hintWant = mHintLayout == null ? 0 : mHintLayout.getWidth(); 

     /* 
     * No need to bring the text into view, since the size is not 
     * changing (unless we do the requestLayout(), in which case it 
     * will happen at measure). 
     */ 
     makeNewLayout(want, hintWant, UNKNOWN_BORING, UNKNOWN_BORING, 
         mRight - mLeft - getCompoundPaddingLeft() - getCompoundPaddingRight(), 
         false); 

     if (mEllipsize != TextUtils.TruncateAt.MARQUEE) { 
      // In a fixed-height view, so use our new text layout. 
      if (mLayoutParams.height != LayoutParams.WRAP_CONTENT && 
       mLayoutParams.height != LayoutParams.MATCH_PARENT) { 
       invalidate(); 
       return; 
      } 

      // Dynamic height, but height has stayed the same, 
      // so use our new text layout. 
      if (mLayout.getHeight() == oldht && 
       (mHintLayout == null || mHintLayout.getHeight() == oldht)) { 
       invalidate(); 
       return; 
      } 
     } 

     // We lose: the height has changed and we have a dynamic height. 
     // Request a new view layout using our new text layout. 
     requestLayout(); 
     invalidate(); 
    } else { 
     // Dynamic width, so we have no choice but to request a new 
     // view layout with a new text layout. 
     nullLayouts(); 
     requestLayout(); 
     invalidate(); 
    } 
} 
텍스트 뷰는 프로그래밍 방식으로 생성 된 내 경우

하고 어디 추측하기 쉬웠다 mLayoutParams가 null이므로 LayoutParams를 설정하여 문제를 해결했습니다.
하지만 공급 업체가 android 소스를 변경할 수 있으며 이러한 변경 사항을 표시하지는 않습니다 (실제로 Sony에 대한 정보는 찾지 못했습니다). 나는 그들이 커널 만 바꾼다 고 생각했다.

1

소스의 오른쪽 라인을 찾으려면, 당신은 구글의 넥서스 장치 중 하나가 있어야합니다 - 순수 안드로이드 장치.

제조업체가 기기의 Android 소스를 변경합니다. logcat에 잘못된 행 번호가 표시됩니다.

관련 문제