mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 22:34:24 +02:00
Merge pull request #14 from revanced/page-align-libraries
page-align native libraries
This commit is contained in:
commit
6109abb4ac
@ -31,6 +31,7 @@ public class ZipAlign {
|
|||||||
private static final int ZIP_ENTRY_USES_DATA_DESCR = 0x0008;
|
private static final int ZIP_ENTRY_USES_DATA_DESCR = 0x0008;
|
||||||
private static final int ZIP_ENTRY_DATA_DESCRIPTOR_LEN = 16;
|
private static final int ZIP_ENTRY_DATA_DESCRIPTOR_LEN = 16;
|
||||||
private static final int ALIGNMENT_4 = 4;
|
private static final int ALIGNMENT_4 = 4;
|
||||||
|
private static final int ALIGNMENT_PAGE = 4096;
|
||||||
|
|
||||||
private static class XEntry {
|
private static class XEntry {
|
||||||
public final ZipEntry entry;
|
public final ZipEntry entry;
|
||||||
@ -118,6 +119,7 @@ public class ZipAlign {
|
|||||||
final Enumeration<?> entries = mZipFile.entries();
|
final Enumeration<?> entries = mZipFile.entries();
|
||||||
while (entries.hasMoreElements()) {
|
while (entries.hasMoreElements()) {
|
||||||
final ZipEntry entry = (ZipEntry) entries.nextElement();
|
final ZipEntry entry = (ZipEntry) entries.nextElement();
|
||||||
|
final String name = entry.getName();
|
||||||
|
|
||||||
int flags = entry.getMethod() == ZipEntry.STORED ? 0 : 1 << 3;
|
int flags = entry.getMethod() == ZipEntry.STORED ? 0 : 1 << 3;
|
||||||
flags |= 1 << 11;
|
flags |= 1 << 11;
|
||||||
@ -125,7 +127,7 @@ public class ZipAlign {
|
|||||||
final long outputEntryHeaderOffset = mOutputStream.totalWritten;
|
final long outputEntryHeaderOffset = mOutputStream.totalWritten;
|
||||||
|
|
||||||
final int inputEntryHeaderSize = ZIP_ENTRY_HEADER_LEN + (entry.getExtra() != null ? entry.getExtra().length : 0)
|
final int inputEntryHeaderSize = ZIP_ENTRY_HEADER_LEN + (entry.getExtra() != null ? entry.getExtra().length : 0)
|
||||||
+ entry.getName().getBytes(StandardCharsets.UTF_8).length;
|
+ name.getBytes(StandardCharsets.UTF_8).length;
|
||||||
final long inputEntryDataOffset = mInputFileOffset + inputEntryHeaderSize;
|
final long inputEntryDataOffset = mInputFileOffset + inputEntryHeaderSize;
|
||||||
|
|
||||||
final int padding;
|
final int padding;
|
||||||
@ -133,8 +135,12 @@ public class ZipAlign {
|
|||||||
if (entry.getMethod() != ZipEntry.STORED) {
|
if (entry.getMethod() != ZipEntry.STORED) {
|
||||||
padding = 0;
|
padding = 0;
|
||||||
} else {
|
} else {
|
||||||
|
int alignment = mAlignment;
|
||||||
|
if (name.startsWith("lib/") && name.endsWith(".so")) {
|
||||||
|
alignment = ALIGNMENT_PAGE;
|
||||||
|
}
|
||||||
long newOffset = inputEntryDataOffset + mTotalPadding;
|
long newOffset = inputEntryDataOffset + mTotalPadding;
|
||||||
padding = (int) ((mAlignment - (newOffset % mAlignment)) % mAlignment);
|
padding = (int) ((alignment - (newOffset % alignment)) % alignment);
|
||||||
mTotalPadding += padding;
|
mTotalPadding += padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user