summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanesh M <daneshm90@gmail.com>2016-01-04 08:40:54 -0800
committerDanesh M <daneshm90@gmail.com>2016-01-04 16:12:48 -0800
commit19b0d4165ae0158209152df8af82673dec5ad701 (patch)
treeb6be25e5962567702771ca8881ca468cf8fc7752
parentf6f56f8f0ed39a4eb5d33300984b9cddf8f3a426 (diff)
downloadframeworks_base-19b0d4165ae0158209152df8af82673dec5ad701.zip
frameworks_base-19b0d4165ae0158209152df8af82673dec5ad701.tar.gz
frameworks_base-19b0d4165ae0158209152df8af82673dec5ad701.tar.bz2
ThemeEngine : Use manifest.mf for hash calculation
Using just AndroidManifest xml is not sufficient since the apk could have different resources yet same manifest. issue-id: YU-922 Change-Id: I5ffa95733110b1c37b5f07ef29b457bb68b50cb2 (cherry picked from commit a22cfa769c591ff5443a750eefec00de27fc6c09)
-rw-r--r--core/java/android/content/pm/PackageParser.java3
-rw-r--r--core/java/android/content/pm/ThemeUtils.java20
2 files changed, 21 insertions, 2 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index dba6d56..6a07b31 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1133,6 +1133,7 @@ public class PackageParser {
*/
public void collectManifestDigest(Package pkg) throws PackageParserException {
pkg.manifestDigest = null;
+ pkg.manifestHashCode = 0;
// TODO: extend to gather digest for split APKs
try {
@@ -1141,7 +1142,7 @@ public class PackageParser {
final ZipEntry je = jarFile.findEntry(ANDROID_MANIFEST_FILENAME);
if (je != null) {
pkg.manifestDigest = ManifestDigest.fromInputStream(jarFile.getInputStream(je));
- pkg.manifestHashCode = ThemeUtils.getPackageHashCode(pkg);
+ pkg.manifestHashCode = ThemeUtils.getPackageHashCode(pkg, jarFile);
}
} finally {
jarFile.close();
diff --git a/core/java/android/content/pm/ThemeUtils.java b/core/java/android/content/pm/ThemeUtils.java
index 357b372..e41523c 100644
--- a/core/java/android/content/pm/ThemeUtils.java
+++ b/core/java/android/content/pm/ThemeUtils.java
@@ -50,6 +50,7 @@ import java.io.OutputStream;
import java.io.InputStreamReader;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.jar.StrictJarFile;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -120,6 +121,7 @@ public class ThemeUtils {
private static final String SETTINGS_DB =
"/data/data/com.android.providers.settings/databases/settings.db";
private static final String SETTINGS_SECURE_TABLE = "secure";
+ private static final String MANIFEST_NAME = "META-INF/MANIFEST.MF";
/**
* IDMAP hash version code used to alter the resulting hash and force recreating
@@ -727,8 +729,24 @@ public class ThemeUtils {
* @param pkg
* @return
*/
- public static int getPackageHashCode(PackageParser.Package pkg) {
+ public static int getPackageHashCode(PackageParser.Package pkg, StrictJarFile jarFile) {
int hash = pkg.manifestDigest != null ? pkg.manifestDigest.hashCode() : 0;
+ final ZipEntry je = jarFile.findEntry(MANIFEST_NAME);
+ if (je != null) {
+ try {
+ try {
+ ManifestDigest digest = ManifestDigest.fromInputStream(
+ jarFile.getInputStream(je));
+ if (digest != null) {
+ hash += digest.hashCode();
+ }
+ } finally {
+ jarFile.close();
+ }
+ } catch (IOException | RuntimeException e) {
+ // Failed to generate digest from manifest.mf
+ }
+ }
hash = 31 * hash + IDMAP_HASH_VERSION;
return hash;
}