private int getInstanceFieldsOffset() { if (instanceFieldsOffset > 0) { return instanceFieldsOffset; } DexReader reader = new DexReader(dexFile, staticFieldsOffset); DexBackedField.skipFields(reader, staticFieldCount); instanceFieldsOffset = reader.getOffset(); return instanceFieldsOffset; }
size += dexBackedField.getSize();
@Nonnull @Override public String getType() { return dexFile.getType(dexFile.readUshort(getFieldIdItemOffset() + FieldIdItem.TYPE_OFFSET)); }
EncodedValue baseInitaValue = baseField.getInitialValue(); EncodedValue newInitaValue = newField.getInitialValue(); if (!Objects.equal(baseInitaValue, newInitaValue)) { fieldDiffInfo.setType(DiffType.MODIFY); Set<? extends DexBackedAnnotation> backedAnnotations = baseField.getAnnotations(); if (!equalsImpl(backedAnnotations,newField.getAnnotations())){ fieldDiffInfo.setType(DiffType.MODIFY); classDiffInfo.getModifyFields().add(fieldDiffInfo); if (!baseField.getType().equals(newField.getType())){ fieldDiffInfo.setType(DiffType.MODIFY); classDiffInfo.getModifyFields().add(fieldDiffInfo); if (baseField.getAccessFlags() != newField.getAccessFlags()){ fieldDiffInfo.setType(DiffType.MODIFY); classDiffInfo.getModifyFields().add(fieldDiffInfo);
Set<? extends DexBackedAnnotation> annotations = getAnnotations(); if (!annotations.isEmpty()) { size += 2 * 4; //2 * uint overhead from field_annotation
@Override public boolean filterField(FieldDiffInfo fieldDiffInfo) throws PatchException { DexBackedField dexBackedField = fieldDiffInfo.getBackedField(); if (dexBackedField.getType().equals(DiffType.ADD)) { throw new PatchException("can,t add new Field:" + dexBackedField.getName() + "(" + dexBackedField.getType() + "), " + "in class :" + dexBackedField.getDefiningClass()); } else if (dexBackedField.getType().equals(DiffType.MODIFY)) { throw new PatchException("can,t modify Field:" + dexBackedField.getName() + "(" + dexBackedField.getType() + "), " + "in class :" + dexBackedField.getDefiningClass()); } return true; }
private static boolean isStaticFiled(DexBackedClassDef classDef, FieldReference reference) { for (DexBackedField field : classDef.getStaticFields()) { if (field.equals(reference)) { return true; } } return false; }
@Nonnull @Override public String getName() { return dexFile.getString(dexFile.readSmallUint(getFieldIdItemOffset() + FieldIdItem.NAME_OFFSET)); }
Set<? extends DexBackedAnnotation> annotations = getAnnotations(); if (!annotations.isEmpty()) { size += 2 * 4; //2 * uint overhead from field_annotation
private int getDirectMethodsOffset() { if (directMethodsOffset > 0) { return directMethodsOffset; } DexReader reader = dexFile.readerAt(getInstanceFieldsOffset()); DexBackedField.skipFields(reader, instanceFieldCount); directMethodsOffset = reader.getOffset(); return directMethodsOffset; }
@Nonnull @Override public String getType() { return dexFile.getType(dexFile.readUshort(getFieldIdItemOffset() + FieldIdItem.TYPE_OFFSET)); }
size += dexBackedField.getSize();
private int getInstanceFieldsOffset() { if (instanceFieldsOffset > 0) { return instanceFieldsOffset; } DexReader reader = new DexReader(dexFile, staticFieldsOffset); DexBackedField.skipFields(reader, staticFieldCount); instanceFieldsOffset = reader.getOffset(); return instanceFieldsOffset; }
@Nonnull @Override public String getName() { return dexFile.getString(dexFile.readSmallUint(getFieldIdItemOffset() + FieldIdItem.NAME_OFFSET)); }
private int getInstanceFieldsOffset() { if (instanceFieldsOffset > 0) { return instanceFieldsOffset; } DexReader reader = new DexReader(dexFile, staticFieldsOffset); DexBackedField.skipFields(reader, staticFieldCount); instanceFieldsOffset = reader.getOffset(); return instanceFieldsOffset; }
@Nonnull @Override public String getType() { return dexFile.getType(dexFile.readUshort(getFieldIdItemOffset() + FieldIdItem.TYPE_OFFSET)); }
private int getDirectMethodsOffset() { if (directMethodsOffset > 0) { return directMethodsOffset; } DexReader reader = dexFile.readerAt(getInstanceFieldsOffset()); DexBackedField.skipFields(reader, instanceFieldCount); directMethodsOffset = reader.getOffset(); return directMethodsOffset; }
@Nonnull @Override public String getName() { return dexFile.getString(dexFile.readSmallUint(getFieldIdItemOffset() + FieldIdItem.NAME_OFFSET)); }
private int getDirectMethodsOffset() { if (directMethodsOffset > 0) { return directMethodsOffset; } DexReader reader = dexFile.readerAt(getInstanceFieldsOffset()); DexBackedField.skipFields(reader, instanceFieldCount); directMethodsOffset = reader.getOffset(); return directMethodsOffset; }