forked from openkylin/platform_build
Merge "Make signapk align .so entries to 4096 bytes." am: dbb5527a9e
am: 7f1eda800d
* commit '7f1eda800d8cdb793b521e20798eaacb3fe410ad':
Make signapk align .so entries to 4096 bytes.
This commit is contained in:
commit
3ad587e9ff
|
@ -476,7 +476,7 @@ class SignApk {
|
||||||
* more efficient.
|
* more efficient.
|
||||||
*/
|
*/
|
||||||
private static void copyFiles(Manifest manifest, JarFile in, JarOutputStream out,
|
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];
|
byte[] buffer = new byte[4096];
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
|
@ -515,6 +515,7 @@ class SignApk {
|
||||||
offset += 4;
|
offset += 4;
|
||||||
firstEntry = false;
|
firstEntry = false;
|
||||||
}
|
}
|
||||||
|
int alignment = getStoredEntryDataAlignment(name, defaultAlignment);
|
||||||
if (alignment > 0 && (offset % alignment != 0)) {
|
if (alignment > 0 && (offset % alignment != 0)) {
|
||||||
// Set the "extra data" of the entry to between 1 and
|
// Set the "extra data" of the entry to between 1 and
|
||||||
// alignment-1 bytes, to make the file data begin at
|
// 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 static class WholeFileSignerOutputStream extends FilterOutputStream {
|
||||||
private boolean closing = false;
|
private boolean closing = false;
|
||||||
private ByteArrayOutputStream footer = new ByteArrayOutputStream();
|
private ByteArrayOutputStream footer = new ByteArrayOutputStream();
|
||||||
|
|
Loading…
Reference in New Issue