diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fb431c78..12247ab0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -88,6 +88,8 @@ jobs: - build-and-test-with-Java-8-and-later steps: - uses: actions/checkout@v3 + with: + fetch-depth: 0 - uses: actions/setup-java@v3 with: distribution: 'zulu' @@ -100,4 +102,4 @@ jobs: uses: actions/upload-artifact@v3 with: name: apktool.jar - path: brut.apktool/apktool-cli/build/libs/apktool-*-SNAPSHOT.jar + path: brut.apktool/apktool-cli/build/libs/apktool-v* diff --git a/brut.apktool/apktool-cli/build.gradle.kts b/brut.apktool/apktool-cli/build.gradle.kts index 2da6dd17..722e8924 100644 --- a/brut.apktool/apktool-cli/build.gradle.kts +++ b/brut.apktool/apktool-cli/build.gradle.kts @@ -69,6 +69,6 @@ tasks.register("proguard") { dontwarn("javax.xml.xpath.**") dontnote("**") - val outPath = "build/libs/apktool-cli-$apktoolVersion.jar" + val outPath = "build/libs/apktool-$apktoolVersion.jar" outjars(outPath) } diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/Framework.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/Framework.java index 96d83fab..87148180 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/Framework.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/Framework.java @@ -77,7 +77,7 @@ public class Framework { crc.update(data); entry = new ZipEntry("resources.arsc"); entry.setSize(data.length); - entry.setMethod(ZipOutputStream.STORED); + entry.setMethod(ZipEntry.STORED); entry.setCrc(crc.getValue()); out.putNextEntry(entry); out.write(data); 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 16a33951..38c20897 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 @@ -270,7 +270,9 @@ public class ARSCDecoder { mHeader.checkForUnreadHeader(mIn); - if ((typeFlags & 0x01) != 0) { + // Be sure we don't poison mResTable by marking the application as sparse + // Only flag the ResTable as sparse if the main package is not loaded. + if ((typeFlags & 0x01) != 0 && !mResTable.isMainPkgLoaded()) { mResTable.setSparseResources(true); } diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/SparseFlagTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/SparseFlagTest.java index 276fbf63..c3959250 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/SparseFlagTest.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/SparseFlagTest.java @@ -54,6 +54,7 @@ public class SparseFlagTest extends BaseTest { LOGGER.info("Decoding sparse.apk..."); Config config = Config.getDefaultConfig(); + config.frameworkTag = "issue-3298"; ApkDecoder apkDecoder = new ApkDecoder(config, testApk); ApkInfo apkInfo = apkDecoder.decode(sTestNewDir); @@ -70,6 +71,7 @@ public class SparseFlagTest extends BaseTest { LOGGER.info("Decoding not-sparse.apk..."); Config config = Config.getDefaultConfig(); + config.frameworkTag = "issue-3298"; ApkDecoder apkDecoder = new ApkDecoder(config, testApk); ApkInfo apkInfo = apkDecoder.decode(sTestNewDir);