Merge "Make signapk align .so entries to 4096 bytes."

This commit is contained in:
Alex Klyubin 2015-12-04 17:05:27 +00:00 committed by Gerrit Code Review
commit dbb5527a9e
1 changed files with 20 additions and 1 deletions

View File

@ -476,7 +476,7 @@ class SignApk {
* more efficient.
*/
private static void copyFiles(Manifest manifest, JarFile in, JarOutputStream out,
long timestamp, int alignment) throws IOException {
long timestamp, int defaultAlignment) throws IOException {
byte[] buffer = new byte[4096];
int num;
@ -515,6 +515,7 @@ class SignApk {
offset += 4;
firstEntry = false;
}
int alignment = getStoredEntryDataAlignment(name, defaultAlignment);
if (alignment > 0 && (offset % alignment != 0)) {
// Set the "extra data" of the entry to between 1 and
// alignment-1 bytes, to make the file data begin at
@ -555,6 +556,24 @@ class SignApk {
}
}
/**
* Returns the multiple (in bytes) at which the provided {@code STORED} entry's data must start
* relative to start of file or {@code 0} if alignment of this entry's data is not important.
*/
private static int getStoredEntryDataAlignment(String entryName, int defaultAlignment) {
if (defaultAlignment <= 0) {
return 0;
}
if (entryName.endsWith(".so")) {
// Align .so contents to memory page boundary to enable memory-mapped
// execution.
return 4096;
} else {
return defaultAlignment;
}
}
private static class WholeFileSignerOutputStream extends FilterOutputStream {
private boolean closing = false;
private ByteArrayOutputStream footer = new ByteArrayOutputStream();