private int calcMethodsSize(Method[] methods) { int res = 0; int prevMethodIndex = 0; for (Method method : methods) { int methodIndexDelta = method.methodIndex - prevMethodIndex; prevMethodIndex = method.methodIndex; res += Leb128.unsignedLeb128Size(methodIndexDelta) + Leb128.unsignedLeb128Size(method.accessFlags) + Leb128.unsignedLeb128Size(method.codeOffset); } return res; }
private int calcFieldsSize(Field[] fields) { int res = 0; int prevFieldIndex = 0; for (Field field : fields) { int fieldIndexDelta = field.fieldIndex - prevFieldIndex; prevFieldIndex = field.fieldIndex; res += Leb128.unsignedLeb128Size(fieldIndexDelta) + Leb128.unsignedLeb128Size(field.accessFlags); } return res; }
public static int unsignedLeb128p1Size(int value) { return unsignedLeb128Size(value + 1); }
@Override public int byteCountInDex() { int byteCount = Leb128.unsignedLeb128Size(lineStart) + Leb128.unsignedLeb128Size(parameterNames.length); for (int pn : parameterNames) { byteCount += Leb128.unsignedLeb128p1Size(pn); } byteCount += infoSTM.length * SizeOf.UBYTE; return byteCount; } }
@Override public int byteCountInDex() { int res = Leb128.unsignedLeb128Size(staticFields.length); res += Leb128.unsignedLeb128Size(instanceFields.length); res += Leb128.unsignedLeb128Size(directMethods.length); res += Leb128.unsignedLeb128Size(virtualMethods.length); res += calcFieldsSize(staticFields); res += calcFieldsSize(instanceFields); res += calcMethodsSize(directMethods); res += calcMethodsSize(virtualMethods); return res; }
@Override public int byteCountInDex() { int insnsSize = instructions.length; int res = 4 * SizeOf.USHORT + 2 * SizeOf.UINT + insnsSize * SizeOf.USHORT; if (tries.length > 0) { if ((insnsSize & 1) == 1) { res += SizeOf.USHORT; } res += tries.length * SizeOf.TRY_ITEM; int catchHandlerSize = catchHandlers.length; res += Leb128.unsignedLeb128Size(catchHandlerSize); for (CatchHandler catchHandler : catchHandlers) { int typeIdxAddrPairCount = catchHandler.typeIndexes.length; if (catchHandler.catchAllAddress != -1) { res += Leb128.signedLeb128Size(-typeIdxAddrPairCount) + Leb128.unsignedLeb128Size(catchHandler.catchAllAddress); } else { res += Leb128.signedLeb128Size(typeIdxAddrPairCount); } for (int i = 0; i < typeIdxAddrPairCount; ++i) { res += Leb128.unsignedLeb128Size(catchHandler.typeIndexes[i]) + Leb128.unsignedLeb128Size(catchHandler.addresses[i]); } } } return res; }
@Override public int byteCountInDex() { try { return Leb128.unsignedLeb128Size(value.length()) + (int) Mutf8.countBytes(value, true) + SizeOf.UBYTE; } catch (UTFDataFormatException e) { throw new DexException(e); } } }
private int calcFieldsSize(Field[] fields) { int res = 0; int prevFieldIndex = 0; for (Field field : fields) { int fieldIndexDelta = field.fieldIndex - prevFieldIndex; prevFieldIndex = field.fieldIndex; res += Leb128.unsignedLeb128Size(fieldIndexDelta) + Leb128.unsignedLeb128Size(field.accessFlags); } return res; }
private int calcMethodsSize(Method[] methods) { int res = 0; int prevMethodIndex = 0; for (Method method : methods) { int methodIndexDelta = method.methodIndex - prevMethodIndex; prevMethodIndex = method.methodIndex; res += Leb128.unsignedLeb128Size(methodIndexDelta) + Leb128.unsignedLeb128Size(method.accessFlags) + Leb128.unsignedLeb128Size(method.codeOffset); } return res; }
public static int unsignedLeb128p1Size(int value) { return unsignedLeb128Size(value + 1); }
@Override public int byteCountInDex() { int byteCount = Leb128.unsignedLeb128Size(lineStart) + Leb128.unsignedLeb128Size(parameterNames.length); for (int pn : parameterNames) { byteCount += Leb128.unsignedLeb128p1Size(pn); } byteCount += infoSTM.length * SizeOf.UBYTE; return byteCount; }
@Override public int byteCountInDex() { int res = Leb128.unsignedLeb128Size(staticFields.length); res += Leb128.unsignedLeb128Size(instanceFields.length); res += Leb128.unsignedLeb128Size(directMethods.length); res += Leb128.unsignedLeb128Size(virtualMethods.length); res += calcFieldsSize(staticFields); res += calcFieldsSize(instanceFields); res += calcMethodsSize(directMethods); res += calcMethodsSize(virtualMethods); return res; }
@Override public int byteCountInDex() { int insnsSize = instructions.length; int res = 4 * SizeOf.USHORT + 2 * SizeOf.UINT + insnsSize * SizeOf.USHORT; if (tries.length > 0) { if ((insnsSize & 1) == 1) { res += SizeOf.USHORT; } res += tries.length * SizeOf.TRY_ITEM; int catchHandlerSize = catchHandlers.length; res += Leb128.unsignedLeb128Size(catchHandlerSize); for (CatchHandler catchHandler : catchHandlers) { int typeIdxAddrPairCount = catchHandler.typeIndexes.length; if (catchHandler.catchAllAddress != -1) { res += Leb128.signedLeb128Size(-typeIdxAddrPairCount) + Leb128.unsignedLeb128Size(catchHandler.catchAllAddress); } else { res += Leb128.signedLeb128Size(typeIdxAddrPairCount); } for (int i = 0; i < typeIdxAddrPairCount; ++i) { res += Leb128.unsignedLeb128Size(catchHandler.typeIndexes[i]) + Leb128.unsignedLeb128Size(catchHandler.addresses[i]); } } } return res; }
@Override public int byteCountInDex() { try { return Leb128.unsignedLeb128Size(value.length()) + (int) Mutf8.countBytes(value, true) + SizeOf.UBYTE; } catch (UTFDataFormatException e) { throw new DexException(e); } }