Cómo localizar fallas en la capa del marco de trabajo de Android
Este paso requiere el dispositivo correspondiente, porque hay una implementación del SDK en el dispositivo, que puede ser un paquete jar o un odex. Generalmente se encuentra en /system/framework. en En el ejemplo anterior, /system/framework/framework.jar es el paquete jar que se encontrará.
Dependiendo de si se encuentra el paquete jar u odex, elija diferentes herramientas para descompilarlo.
El código pequeño descompilado conserva la siguiente línea de información:
código
1
2 nueva instancia v0, Landroid/graphics/PointF;
3
4 invoke-direct {v0}, Landroid/graphics/PointF; ->
5
6 iput-object v0, p0, Landroid/view/ViewGroup;->mLocalPoint:Landroid/graphics/PointF;
p>7
8 . Línea 147
9 const/4 v0, -0x1
10
11 entrada. v0, p0, Landroid/view/ ViewGroup;->mLastTouchDownIndex:I
12
13 . Línea 178
14 iput v1, p0, Landroid/view. /ViewGroup;->mLayoutMode:I
15
Lea el código pequeño y compare el código fuente
Encuentre el código pequeño líneas de código, lea el código fuente cercano y compárelo con una versión similar del código fuente del SDK, incluso si se trata de una Rom personalizada, el código fuente no se modificará demasiado. En base a esto, es posible identificar la causa específica del accidente.
Utilice el método anterior para encontrar el código correspondiente al bloqueo:
Código
1 for (int i = 0; i < ChildrenCount; i++ ) {
2 int childIndex = customOrder ?getChildDrawingOrder(childrenCount, i): i;
3 final View child = (preorderedList == null)
4 ? niños[childIndex] : preorderedList.get(childIndex);
5 if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation () != null) {
6 más |= drawChild(canvas, child, drawTime);
7 }
8 }
9
Es mucho más fácil encontrar el problema en este punto.