summaryrefslogtreecommitdiffstats
path: root/tools/signapk/SignApk.java
diff options
context:
space:
mode:
authorDoug Zongker <dougz@android.com>2009-07-15 15:43:39 -0700
committerDoug Zongker <dougz@android.com>2009-07-15 15:43:39 -0700
commita237874ccf49e92b93faea51f65c2ff37ea19ac7 (patch)
treea82c77e81fb0b13b22b662097e58508c0d17d273 /tools/signapk/SignApk.java
parent030614740c1a22e51c6513058852f9ab368fdf5d (diff)
downloadbuild-a237874ccf49e92b93faea51f65c2ff37ea19ac7.zip
build-a237874ccf49e92b93faea51f65c2ff37ea19ac7.tar.gz
build-a237874ccf49e92b93faea51f65c2ff37ea19ac7.tar.bz2
fix the modtime of files in the apk when signing
SignApk fixes the timestamp of the signature files it adds. Use that same timestamp for all the files, so that the modtime doesn't vary from build to build. (Incremental OTAs currently spend significant time rewriting every .apk to do nothing but patch in timestamp changes.)
Diffstat (limited to 'tools/signapk/SignApk.java')
-rw-r--r--tools/signapk/SignApk.java20
1 files changed, 13 insertions, 7 deletions
diff --git a/tools/signapk/SignApk.java b/tools/signapk/SignApk.java
index fb55028..caf7935 100644
--- a/tools/signapk/SignApk.java
+++ b/tools/signapk/SignApk.java
@@ -304,9 +304,14 @@ class SignApk {
pkcs7.encodeSignedData(out);
}
- /** Copy all the files in a manifest from input to output. */
+ /**
+ * Copy all the files in a manifest from input to output. We set
+ * the modification times in the output to a fixed time, so as to
+ * reduce variation in the output file and make incremental OTAs
+ * more efficient.
+ */
private static void copyFiles(Manifest manifest,
- JarFile in, JarOutputStream out) throws IOException {
+ JarFile in, JarOutputStream out, long timestamp) throws IOException {
byte[] buffer = new byte[4096];
int num;
@@ -315,15 +320,16 @@ class SignApk {
Collections.sort(names);
for (String name : names) {
JarEntry inEntry = in.getJarEntry(name);
+ JarEntry outEntry = null;
if (inEntry.getMethod() == JarEntry.STORED) {
// Preserve the STORED method of the input entry.
- out.putNextEntry(new JarEntry(inEntry));
+ outEntry = new JarEntry(inEntry);
} else {
// Create a new entry so that the compressed len is recomputed.
- JarEntry je = new JarEntry(name);
- je.setTime(inEntry.getTime());
- out.putNextEntry(je);
+ outEntry = new JarEntry(name);
}
+ outEntry.setTime(timestamp);
+ out.putNextEntry(outEntry);
InputStream data = in.getInputStream(inEntry);
while ((num = data.read(buffer)) > 0) {
@@ -380,7 +386,7 @@ class SignApk {
writeSignatureBlock(signature, publicKey, outputJar);
// Everything else
- copyFiles(manifest, inputJar, outputJar);
+ copyFiles(manifest, inputJar, outputJar, timestamp);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);