From 071ce71a61f51eb91331bb0e27b20587860c695d Mon Sep 17 00:00:00 2001 From: M1cha Date: Sun, 17 Mar 2013 15:37:46 +0100 Subject: [PATCH] apktool-lib: fix recompiling framework apk's with dependencies by using static package-id --- .../src/main/java/brut/androlib/Androlib.java | 1 + .../src/main/java/brut/androlib/ApkDecoder.java | 1 + .../main/java/brut/androlib/res/AndrolibResources.java | 9 +++++++++ .../main/java/brut/androlib/res/decoder/ARSCDecoder.java | 3 ++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java index 3eb79bb7..ea40ad1a 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java @@ -208,6 +208,7 @@ public class Androlib { flags.put("compression", meta.get("compressionType") == null ? false : (Boolean) meta.get("compressionType")); mAndRes.setSdkInfo((Map) meta.get("sdkInfo")); + mAndRes.setPackageId((String)meta.get("packageId")); if (outFile == null) { String outFileName = (String) meta.get("apkFileName"); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java index 21f7bb3f..b7145f3b 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java @@ -246,6 +246,7 @@ public class ApkDecoder { putSdkInfo(meta); putPackageInfo(meta); putCompressionInfo(meta); + meta.put("packageId", getResTable().getPackageInfo().get("cur_package_id")); } mAndrolib.writeMetaFile(mOutDir, meta); diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java index c5b4627e..9d7f4743 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java @@ -313,6 +313,10 @@ final public class AndrolibResources { } } + public void setPackageId(String id) { + mPackageId = id; + } + public void aaptPackage(File apkFile, File manifest, File resDir, File rawDir, File assetDir, File[] include, HashMap flags, String aaptPath) @@ -350,6 +354,10 @@ final public class AndrolibResources { if (flags.get("debug")) { // inject debuggable="true" into manifest cmd.add("--debug-mode"); } + if (mPackageId != null) { + cmd.add("--forced-package-id"); + cmd.add(mPackageId); + } if (mMinSdkVersion != null) { cmd.add("--min-sdk-version"); cmd.add(mMinSdkVersion); @@ -742,6 +750,7 @@ final public class AndrolibResources { private final static Logger LOGGER = Logger .getLogger(AndrolibResources.class.getName()); + private String mPackageId = null; private String mMinSdkVersion = null; private String mMaxSdkVersion = null; private String mTargetSdkVersion = null; diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java index 35a6ea48..37b62b84 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java @@ -84,6 +84,7 @@ public class ARSCDecoder { // store package if (this.mResTable.isPackageInfoValueSet("cur_package") != true) { this.mResTable.addPackageInfo("cur_package", packages[0].getName()); + this.mResTable.addPackageInfo("cur_package_id", String.valueOf(packages[0].getId())); } return packages; } @@ -440,4 +441,4 @@ public class ARSCDecoder { private final FlagsOffset[] mFlagsOffsets; private final ResTable mResTable; } -} \ No newline at end of file +}