public boolean checkOffset(int dataOffset) { return dataOffset >= 0 && dataOffset < dexBuf.getLength(); }
result = compacter.mergeDexes(); System.out.printf("Result compacted from %.1fKiB to %.1fKiB to save %.1fKiB%n", dexOut.getLength() / 1024f, result.getLength() / 1024f, wastedByteCount / 1024f); + "(%d defs/%.1fKiB). Result is %d defs/%.1fKiB. Took %.1fs%n", dexA.getTableOfContents().classDefs.size, dexA.getLength() / 1024f, dexB.getTableOfContents().classDefs.size, dexB.getLength() / 1024f, result.getTableOfContents().classDefs.size, result.getLength() / 1024f, elapsed / 1000000000f);
result = compacter.mergeDexes(); context.out.printf("Result compacted from %.1fKiB to %.1fKiB to save %.1fKiB%n", dexOut.getLength() / 1024f, result.getLength() / 1024f, wastedByteCount / 1024f); i + 1, dexes[i].getTableOfContents().classDefs.size, dexes[i].getLength() / 1024f); result.getLength() / 1024f, elapsed / 1000000000f);
result = compacter.mergeDexes(); context.out.printf("Result compacted from %.1fKiB to %.1fKiB to save %.1fKiB%n", dexOut.getLength() / 1024f, result.getLength() / 1024f, wastedByteCount / 1024f); i + 1, dexes[i].getTableOfContents().classDefs.size, dexes[i].getLength() / 1024f); result.getLength() / 1024f, elapsed / 1000000000f);
private Dex mergeDexes() throws IOException { mergeStringIds(); mergeTypeIds(); mergeTypeLists(); mergeProtoIds(); mergeFieldIds(); mergeMethodIds(); mergeMethodHandles(); mergeAnnotations(); unionAnnotationSetsAndDirectories(); mergeCallSiteIds(); mergeClassDefs(); // computeSizesFromOffsets expects sections sorted by offset, so make it so Arrays.sort(contentsOut.sections); // write the header contentsOut.header.off = 0; contentsOut.header.size = 1; contentsOut.fileSize = dexOut.getLength(); contentsOut.computeSizesFromOffsets(); contentsOut.writeHeader(headerOut, mergeApiLevels()); contentsOut.writeMap(mapListOut); // generate and write the hashes dexOut.writeHashes(); return dexOut; }
private Dex mergeDexes() throws IOException { mergeStringIds(); mergeTypeIds(); mergeTypeLists(); mergeProtoIds(); mergeFieldIds(); mergeMethodIds(); mergeAnnotations(); unionAnnotationSetsAndDirectories(); mergeClassDefs(); // write the header contentsOut.header.off = 0; contentsOut.header.size = 1; contentsOut.fileSize = dexOut.getLength(); contentsOut.computeSizesFromOffsets(); contentsOut.writeHeader(headerOut); contentsOut.writeMap(mapListOut); // generate and write the hashes dexOut.writeHashes(); return dexOut; }
private Dex mergeDexes() throws IOException { mergeStringIds(); mergeTypeIds(); mergeTypeLists(); mergeProtoIds(); mergeFieldIds(); mergeMethodIds(); mergeAnnotations(); unionAnnotationSetsAndDirectories(); mergeClassDefs(); // write the header contentsOut.header.off = 0; contentsOut.header.size = 1; contentsOut.fileSize = dexOut.getLength(); contentsOut.computeSizesFromOffsets(); contentsOut.writeHeader(headerOut); contentsOut.writeMap(mapListOut); // generate and write the hashes dexOut.writeHashes(); return dexOut; }