diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java apktool-2.3.4/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/main/java/brut/androlib/Androlib.java 2018-09-05 23:31:58.000000000 +0000 @@ -168,7 +168,9 @@ String ext; for (String file : files) { - if (isAPKFileNames(file) && unk.getCompressionLevel(file) == 0) { + if (isAPKFileNames(file) && + unk.getCompressionLevel(file) == 0 && + unk.getSize(file) != 0) { if (StringUtils.countMatches(file, ".") > 1) { ext = file; diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java apktool-2.3.4/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/StringBlock.java 2018-09-05 23:31:58.000000000 +0000 @@ -41,7 +41,7 @@ * be at the chunk type. */ public static StringBlock read(ExtDataInput reader) throws IOException { - reader.skipCheckInt(CHUNK_STRINGPOOL_TYPE); + reader.skipCheckChunkTypeInt(CHUNK_STRINGPOOL_TYPE, CHUNK_NULL_TYPE); int chunkSize = reader.readInt(); // ResStringPool_header diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/BuildAndDecodeTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -20,6 +20,7 @@ import brut.androlib.ApkDecoder; import brut.androlib.BaseTest; import brut.androlib.TestUtils; +import brut.androlib.meta.MetaInfo; import brut.directory.ExtFile; import brut.common.BrutException; import brut.util.OS; @@ -481,6 +482,15 @@ } } + @Test + public void confirmZeroByteFileIsNotStored() throws BrutException { + MetaInfo metaInfo = new Androlib().readMetaFile(sTestNewDir); + + for (String item : metaInfo.doNotCompress) { + assertNotSame(item, "empty"); + } + } + @Test public void drawableXxhdpiTest() throws BrutException, IOException { compareResFolder("drawable-xxhdpi"); diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/DebugTagRetainedTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/DebugTagRetainedTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/DebugTagRetainedTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/DebugTagRetainedTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -20,17 +20,19 @@ import brut.directory.ExtFile; import brut.common.BrutException; import brut.util.OS; +import org.custommonkey.xmlunit.XMLUnit; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; /** * @author Connor Tumbleson @@ -70,16 +72,21 @@ } @Test - public void DebugIsTruePriorToBeingFalseTest() throws IOException { + public void DebugIsTruePriorToBeingFalseTest() throws IOException, SAXException { String apk = "issue1235-new"; - String expected = TestUtils.replaceNewlines("\n" + - "\n" + - " " + - ""); + String expected = TestUtils.replaceNewlines("" + + " "); byte[] encoded = Files.readAllBytes(Paths.get(sTmpDir + File.separator + apk + File.separator + "AndroidManifest.xml")); String obtained = TestUtils.replaceNewlines(new String(encoded)); - assertEquals(expected, obtained); + + XMLUnit.setIgnoreWhitespace(true); + XMLUnit.setIgnoreAttributeOrder(true); + XMLUnit.setCompareUnmatched(false); + + assertXMLEqual(expected, obtained); } } \ No newline at end of file diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/ProviderAttributeTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/ProviderAttributeTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/ProviderAttributeTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/ProviderAttributeTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -23,16 +23,18 @@ import brut.directory.ExtFile; import brut.common.BrutException; import brut.util.OS; +import org.custommonkey.xmlunit.XMLUnit; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; -import static org.junit.Assert.assertEquals; +import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import static org.junit.Assert.assertTrue; public class ProviderAttributeTest extends BaseTest { @@ -50,7 +52,7 @@ } @Test - public void isProviderStringReplacementWorking() throws BrutException, IOException { + public void isProviderStringReplacementWorking() throws BrutException, IOException, SAXException { String apk = "issue636.apk"; // decode issue636.apk @@ -70,7 +72,7 @@ apkDecoder.decode(); String expected = TestUtils.replaceNewlines("\n" + - "\n" + + "\n" + " \n" + " \n" + " \n" + @@ -80,7 +82,12 @@ byte[] encoded = Files.readAllBytes(Paths.get(sTmpDir + File.separator + apk + ".out.two" + File.separator + "AndroidManifest.xml")); String obtained = TestUtils.replaceNewlines(new String(encoded)); - assertEquals(expected, obtained); + + XMLUnit.setIgnoreWhitespace(true); + XMLUnit.setIgnoreAttributeOrder(true); + XMLUnit.setCompareUnmatched(false); + + assertXMLEqual(expected, obtained); } private boolean fileExists(String filepath) { diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/UnknownCompressionTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/UnknownCompressionTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/UnknownCompressionTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt1/UnknownCompressionTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -88,7 +88,7 @@ @Test public void confirmJsonFileIsDeflatedTest() throws BrutException, IOException { Integer control = sTestOrigDir.getDirectory().getCompressionLevel("test.json"); - Integer rebuilt = sTestOrigDir.getDirectory().getCompressionLevel("test.json"); + Integer rebuilt = sTestNewDir.getDirectory().getCompressionLevel("test.json"); assertEquals(control, rebuilt); assertEquals(new Integer(8), rebuilt); @@ -97,7 +97,7 @@ @Test public void confirmPngFileIsCorrectlyDeflatedTest() throws BrutException, IOException { Integer control = sTestOrigDir.getDirectory().getCompressionLevel("950x150.png"); - Integer rebuilt = sTestOrigDir.getDirectory().getCompressionLevel("950x150.png"); + Integer rebuilt = sTestNewDir.getDirectory().getCompressionLevel("950x150.png"); assertEquals(control, rebuilt); assertEquals(new Integer(8), rebuilt); diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -1,6 +1,6 @@ /** - * Copyright (C) 2017 Ryszard Wiśniewski - * Copyright (C) 2017 Connor Tumbleson + * Copyright (C) 2018 Ryszard Wiśniewski + * Copyright (C) 2018 Connor Tumbleson * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package brut.androlib.aapt2; import brut.androlib.*; +import brut.androlib.meta.MetaInfo; import brut.common.BrutException; import brut.directory.ExtFile; import brut.util.OS; @@ -73,6 +74,22 @@ } @Test + public void confirmZeroByteFileIsNotStored() throws BrutException { + MetaInfo metaInfo = new Androlib().readMetaFile(sTestNewDir); + assertNull(metaInfo.doNotCompress); + } + + @Test + public void navigationResourceTest() throws BrutException { + compareXmlFiles("res/navigation/nav_graph.xml"); + } + + @Test + public void leadingDollarSignResourceNameTest() throws BrutException { + compareXmlFiles("res/drawable/$avd_hide_password__0.xml"); + } + + @Test public void confirmManifestStructureTest() throws BrutException { compareXmlFiles("AndroidManifest.xml"); } diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/NonStandardPkgIdTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/NonStandardPkgIdTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/NonStandardPkgIdTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/NonStandardPkgIdTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -1,6 +1,6 @@ /** - * Copyright (C) 2017 Ryszard Wiśniewski - * Copyright (C) 2017 Connor Tumbleson + * Copyright (C) 2018 Ryszard Wiśniewski + * Copyright (C) 2018 Connor Tumbleson * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/BaseTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/BaseTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/BaseTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/BaseTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -1,6 +1,6 @@ /** - * Copyright (C) 2017 Ryszard Wiśniewski - * Copyright (C) 2017 Connor Tumbleson + * Copyright (C) 2018 Ryszard Wiśniewski + * Copyright (C) 2018 Connor Tumbleson * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -117,6 +117,8 @@ if (qualifier == null) { XMLUnit.setIgnoreWhitespace(true); + XMLUnit.setIgnoreAttributeOrder(true); + XMLUnit.setCompareUnmatched(false); assertXMLEqual(control, test); return; } diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/ExternalEntityTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/ExternalEntityTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/ExternalEntityTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/ExternalEntityTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -62,11 +62,11 @@ @Test public void doctypeTest() throws IOException { - String expected = TestUtils.replaceNewlines("\n" + - "\n" + - " \n" + - ""); + String expected = TestUtils.replaceNewlines("" + + " "); byte[] encoded = Files.readAllBytes(Paths.get(sTestOrigDir + File.separator + "output" + File.separator + "AndroidManifest.xml")); String obtained = TestUtils.replaceNewlines(new String(encoded)); diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/util/AaptVersionTest.java apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/util/AaptVersionTest.java --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/java/brut/androlib/util/AaptVersionTest.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/java/brut/androlib/util/AaptVersionTest.java 2018-09-05 23:31:58.000000000 +0000 @@ -29,5 +29,6 @@ assertEquals(2, AaptManager.getAppVersionFromString("Android Asset Packaging Tool (aapt) 2:17")); assertEquals(2, AaptManager.getAppVersionFromString("Android Asset Packaging Tool (aapt) 2.17")); assertEquals(1, AaptManager.getAppVersionFromString("Android Asset Packaging Tool, v0.9")); + assertEquals(1, AaptManager.getAppVersionFromString("Android Asset Packaging Tool, v0.2-2679779")); } } Binary files /tmp/tmpIKp3ks/ktAO_d_Ant/apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt1/issue767/issue767.apk and /tmp/tmpIKp3ks/YVnm6tZUxT/apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt1/issue767/issue767.apk differ diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt1/testapp/AndroidManifest.xml apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt1/testapp/AndroidManifest.xml --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt1/testapp/AndroidManifest.xml 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt1/testapp/AndroidManifest.xml 2018-09-05 23:31:58.000000000 +0000 @@ -1,5 +1,5 @@ - + diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt2/pkgid8/AndroidManifest.xml apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt2/pkgid8/AndroidManifest.xml --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt2/pkgid8/AndroidManifest.xml 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt2/pkgid8/AndroidManifest.xml 2018-09-05 23:31:58.000000000 +0000 @@ -1,4 +1,3 @@ - + diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/AndroidManifest.xml apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/AndroidManifest.xml --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/AndroidManifest.xml 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/AndroidManifest.xml 2018-09-05 23:31:58.000000000 +0000 @@ -1,3 +1,3 @@ - + diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/drawable/$avd_hide_password__0.xml apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/drawable/$avd_hide_password__0.xml --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/drawable/$avd_hide_password__0.xml 1970-01-01 00:00:00.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/drawable/$avd_hide_password__0.xml 2018-09-05 23:31:58.000000000 +0000 @@ -0,0 +1 @@ + \ No newline at end of file diff -Nru apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/navigation/nav_graph.xml apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/navigation/nav_graph.xml --- apktool-2.3.3/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/navigation/nav_graph.xml 1970-01-01 00:00:00.000000000 +0000 +++ apktool-2.3.4/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/navigation/nav_graph.xml 2018-09-05 23:31:58.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru apktool-2.3.3/brut.j.dir/src/main/java/brut/directory/Directory.java apktool-2.3.4/brut.j.dir/src/main/java/brut/directory/Directory.java --- apktool-2.3.3/brut.j.dir/src/main/java/brut/directory/Directory.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.j.dir/src/main/java/brut/directory/Directory.java 2018-09-05 23:31:58.000000000 +0000 @@ -47,6 +47,10 @@ public void copyToDir(File out, String fileName) throws DirectoryException; + public long getSize(String fileName) + throws DirectoryException; + public long getCompressedSize(String fileName) + throws DirectoryException; public int getCompressionLevel(String fileName) throws DirectoryException; diff -Nru apktool-2.3.3/brut.j.dir/src/main/java/brut/directory/FileDirectory.java apktool-2.3.4/brut.j.dir/src/main/java/brut/directory/FileDirectory.java --- apktool-2.3.3/brut.j.dir/src/main/java/brut/directory/FileDirectory.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.j.dir/src/main/java/brut/directory/FileDirectory.java 2018-09-05 23:31:58.000000000 +0000 @@ -41,6 +41,22 @@ } @Override + public long getSize(String fileName) + throws DirectoryException { + File file = new File(generatePath(fileName)); + if (! file.isFile()) { + throw new DirectoryException("file must be a file: " + file); + } + return file.length(); + } + + @Override + public long getCompressedSize(String fileName) + throws DirectoryException { + return getSize(fileName); + } + + @Override protected AbstractDirectory createDirLocal(String name) throws DirectoryException { File dir = new File(generatePath(name)); dir.mkdir(); diff -Nru apktool-2.3.3/brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java apktool-2.3.4/brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java --- apktool-2.3.3/brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.j.dir/src/main/java/brut/directory/ZipRODirectory.java 2018-09-05 23:31:58.000000000 +0000 @@ -101,13 +101,33 @@ } @Override + public long getSize(String fileName) + throws DirectoryException { + ZipEntry entry = getZipFileEntry(fileName); + return entry.getSize(); + } + + @Override + public long getCompressedSize(String fileName) + throws DirectoryException { + ZipEntry entry = getZipFileEntry(fileName); + return entry.getCompressedSize(); + } + + @Override public int getCompressionLevel(String fileName) throws DirectoryException { - ZipEntry entry = mZipFile.getEntry(fileName); + ZipEntry entry = getZipFileEntry(fileName); + return entry.getMethod(); + } + + private ZipEntry getZipFileEntry(String fileName) + throws DirectoryException { + ZipEntry entry = mZipFile.getEntry(fileName); if (entry == null) { throw new PathNotExist("Entry not found: " + fileName); } - return entry.getMethod(); + return entry; } private void loadAll() { diff -Nru apktool-2.3.3/brut.j.dir/src/main/java/brut/directory/ZipUtils.java apktool-2.3.4/brut.j.dir/src/main/java/brut/directory/ZipUtils.java --- apktool-2.3.3/brut.j.dir/src/main/java/brut/directory/ZipUtils.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.j.dir/src/main/java/brut/directory/ZipUtils.java 2018-09-05 23:31:58.000000000 +0000 @@ -1,6 +1,6 @@ /** - * Copyright (C) 2017 Ryszard Wiśniewski - * Copyright (C) 2017 Connor Tumbleson + * Copyright (C) 2018 Ryszard Wiśniewski + * Copyright (C) 2018 Connor Tumbleson * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -Nru apktool-2.3.3/brut.j.util/src/main/java/brut/util/AaptManager.java apktool-2.3.4/brut.j.util/src/main/java/brut/util/AaptManager.java --- apktool-2.3.3/brut.j.util/src/main/java/brut/util/AaptManager.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.j.util/src/main/java/brut/util/AaptManager.java 2018-09-05 23:31:58.000000000 +0000 @@ -1,6 +1,6 @@ /** - * Copyright (C) 2017 Ryszard Wiśniewski - * Copyright (C) 2017 Connor Tumbleson + * Copyright (C) 2018 Ryszard Wiśniewski + * Copyright (C) 2018 Connor Tumbleson * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -Nru apktool-2.3.3/brut.j.util/src/main/java/brut/util/OS.java apktool-2.3.4/brut.j.util/src/main/java/brut/util/OS.java --- apktool-2.3.3/brut.j.util/src/main/java/brut/util/OS.java 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/brut.j.util/src/main/java/brut/util/OS.java 2018-09-05 23:31:58.000000000 +0000 @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.apache.commons.io.IOUtils; @@ -113,6 +114,12 @@ executor.execute(collector); process.waitFor(); + if (! executor.awaitTermination(15, TimeUnit.SECONDS)) { + executor.shutdownNow(); + if (! executor.awaitTermination(5, TimeUnit.SECONDS)) { + System.err.println("Stream collector did not terminate."); + } + } return collector.get(); } catch (IOException | InterruptedException e) { return null; diff -Nru apktool-2.3.3/build.gradle apktool-2.3.4/build.gradle --- apktool-2.3.3/build.gradle 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/build.gradle 2018-09-05 23:31:58.000000000 +0000 @@ -21,7 +21,7 @@ options.encoding = "UTF-8" } dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4' + classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' } } @@ -31,7 +31,7 @@ apply from: 'gradle/functions.gradle' -def apktoolversion_major = '2.3.3' +def apktoolversion_major = '2.3.4' def apktoolversion_minor = ''; defaultTasks 'build', 'shadowJar', 'proguard' @@ -117,7 +117,7 @@ snakeyaml: 'org.yaml:snakeyaml:1.18:android', smali: 'org.smali:smali:2.2.2', xmlpull: 'xpp3:xpp3:1.1.4c', - xmlunit: 'xmlunit:xmlunit:1.3', + xmlunit: 'xmlunit:xmlunit:1.6', ] } diff -Nru apktool-2.3.3/debian/changelog apktool-2.3.4/debian/changelog --- apktool-2.3.3/debian/changelog 2018-06-29 17:40:21.000000000 +0000 +++ apktool-2.3.4/debian/changelog 2018-09-18 21:00:35.000000000 +0000 @@ -1,3 +1,13 @@ +apktool (2.3.4-1) unstable; urgency=medium + + * New upstream version 2.3.4. + * Use dh_missing instead of dh_install. + * Declare compliance with Debian Policy 4.2.1. + * Implement get-orig-source target because uscan and Files-Excluded does not + work as expected. + + -- Markus Koschany Tue, 18 Sep 2018 23:00:35 +0200 + apktool (2.3.3-2) unstable; urgency=medium * Add snakeyaml-1.21.patch and fix NoSuchMethodError error with Snakeyaml diff -Nru apktool-2.3.3/debian/control apktool-2.3.4/debian/control --- apktool-2.3.3/debian/control 2018-06-29 17:40:21.000000000 +0000 +++ apktool-2.3.4/debian/control 2018-09-18 21:00:35.000000000 +0000 @@ -22,7 +22,7 @@ libxpp3-java, libyaml-snake-java, proguard-cli -Standards-Version: 4.1.4 +Standards-Version: 4.2.1 Homepage: https://ibotpeaches.github.io/Apktool/ Vcs-Git: https://salsa.debian.org/android-tools-team/apktool.git Vcs-Browser: https://salsa.debian.org/android-tools-team/apktool diff -Nru apktool-2.3.3/debian/copyright apktool-2.3.4/debian/copyright --- apktool-2.3.3/debian/copyright 2018-06-29 17:40:21.000000000 +0000 +++ apktool-2.3.4/debian/copyright 2018-09-18 21:00:35.000000000 +0000 @@ -1,10 +1,6 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: apktool Source: https://github.com/iBotPeaches/Apktool -Files-Excluded: - *.jar - brut.apktool/apktool-lib/src/main/resources/prebuilt - brut.apktool/apktool-lib/src/test/resources/aapt1/testapp/res/drawable-ldpi/data.jpg Files: * Copyright: 2014-2018, Ryszard Wiśniewski diff -Nru apktool-2.3.3/debian/patches/build.patch apktool-2.3.4/debian/patches/build.patch --- apktool-2.3.3/debian/patches/build.patch 2018-06-29 17:40:21.000000000 +0000 +++ apktool-2.3.4/debian/patches/build.patch 2018-09-18 21:00:35.000000000 +0000 @@ -1,11 +1,11 @@ From: Markus Koschany -Date: Mon, 30 Apr 2018 23:45:00 +0200 +Date: Tue, 18 Sep 2018 23:03:21 +0200 Subject: build --- brut.apktool/apktool-cli/build.gradle | 7 +++---- - build.gradle | 30 ++---------------------------- - 2 files changed, 5 insertions(+), 32 deletions(-) + build.gradle | 31 ++----------------------------- + 2 files changed, 5 insertions(+), 33 deletions(-) diff --git a/brut.apktool/apktool-cli/build.gradle b/brut.apktool/apktool-cli/build.gradle index 6010661..f5b44cc 100644 @@ -40,15 +40,15 @@ \ No newline at end of file +tasks.getByPath(':release').dependsOn(proguard) diff --git a/build.gradle b/build.gradle -index dc8f149..9a8e2b9 100644 +index 4503a25..cd70f38 100644 --- a/build.gradle +++ b/build.gradle -@@ -20,47 +20,21 @@ buildscript { +@@ -20,47 +20,20 @@ buildscript { tasks.withType(JavaCompile) { options.encoding = "UTF-8" } - dependencies { -- classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4' +- classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4' - } } @@ -58,7 +58,7 @@ apply from: 'gradle/functions.gradle' - def apktoolversion_major = '2.3.3' + def apktoolversion_major = '2.3.4' def apktoolversion_minor = ''; -defaultTasks 'build', 'shadowJar', 'proguard' @@ -69,7 +69,7 @@ - apply plugin: 'license' sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 - +- - license { - header rootProject.file("brut.j.common/src/templates/apache2.0-header.txt") - include "**/*.java" @@ -92,7 +92,7 @@ } if (!('release' in gradle.startParameter.taskNames)) { -@@ -114,7 +88,7 @@ subprojects { +@@ -114,7 +87,7 @@ subprojects { guava: 'com.google.guava:guava:14.0', junit: 'junit:junit:4.12', proguard_gradle: 'net.sf.proguard:proguard-gradle:5.2.1', @@ -100,4 +100,4 @@ + snakeyaml: 'org.yaml:snakeyaml:1.18', smali: 'org.smali:smali:2.2.2', xmlpull: 'xpp3:xpp3:1.1.4c', - xmlunit: 'xmlunit:xmlunit:1.3', + xmlunit: 'xmlunit:xmlunit:1.6', diff -Nru apktool-2.3.3/debian/patches/series apktool-2.3.4/debian/patches/series --- apktool-2.3.3/debian/patches/series 2018-06-29 17:40:21.000000000 +0000 +++ apktool-2.3.4/debian/patches/series 2018-09-18 21:00:35.000000000 +0000 @@ -1,5 +1,5 @@ debian-wrapper.patch use_system_framework.patch use_system_aapt.patch -build.patch snakeyaml-1.21.patch +build.patch diff -Nru apktool-2.3.3/debian/rules apktool-2.3.4/debian/rules --- apktool-2.3.3/debian/rules 2018-06-29 17:40:21.000000000 +0000 +++ apktool-2.3.4/debian/rules 2018-09-18 21:00:35.000000000 +0000 @@ -1,4 +1,8 @@ #!/usr/bin/make -f +PKD = $(abspath $(dir $(MAKEFILE_LIST))) +PKG = $(word 2,$(shell dpkg-parsechangelog -l$(PKD)/changelog | grep ^Source)) +UVER = $(shell dpkg-parsechangelog -l$(PKD)/changelog | perl -ne 'print $$1 if m{^Version:\s+(?:\d+:)?(\d.*)(?:\-\d+.*)};') + export JAVA_HOME=/usr/lib/jvm/default-java %: @@ -7,6 +11,31 @@ override_dh_auto_build: dh_auto_build -- -Dfile.encoding=UTF-8 assemble -override_dh_install: - dh_install --fail-missing +override_dh_missing: + dh_missing --fail-missing + +## http://wiki.debian.org/onlyjob/get-orig-source +.PHONY: get-orig-source +get-orig-source: $(PKG)_$(UVER).orig.tar.xz $(info I: $(PKG)_$(UVER)) + @ + +$(PKG)_$(UVER).orig.tar.xz: + @echo "# Downloading..." + uscan --noconf --verbose --rename --destdir=$(CURDIR) check-dirname-level=0 --force-download --download-version $(UVER) $(PKD) + $(if $(wildcard $(PKG)-$(UVER)),$(error $(PKG)-$(UVER) exist, aborting..)) + @echo "# Extracting..." + mkdir $(PKG)-$(UVER) \ + && tar -xf $(PKG)_$(UVER).orig.tar.* --directory $(PKG)-$(UVER) --strip-components 1 \ + || $(RM) -r $(PKG)-$(UVER) + @echo "# Cleaning-up..." + cd $(PKG)-$(UVER) \ + && find . -depth -name '*.jar' -exec $(RM) -r {} \; -printf 'removed %p\n' \ + && $(RM) -r -v \ + brut.apktool/apktool-lib/src/main/resources/prebuilt \ + brut.apktool/apktool-lib/src/test/resources/aapt1/testapp/res/drawable-ldpi/data.jpg + #$(RM) -v $(PKG)_$(VER).orig.tar.* + @echo "# Packing..." + find -L "$(PKG)-$(UVER)" -xdev -type f -print | LC_ALL=C sort \ + | XZ_OPT="-6v" tar -caf "$(PKG)_$(UVER).orig.tar.xz" -T- --owner=root --group=root --mode=a+rX \ + && $(RM) -r "$(PKG)-$(UVER)" diff -Nru apktool-2.3.3/gradle/wrapper/gradle-wrapper.properties apktool-2.3.4/gradle/wrapper/gradle-wrapper.properties --- apktool-2.3.3/gradle/wrapper/gradle-wrapper.properties 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/gradle/wrapper/gradle-wrapper.properties 2018-09-05 23:31:58.000000000 +0000 @@ -1,6 +1,6 @@ -#Mon Jul 03 07:09:45 EDT 2017 +#Thu Aug 16 07:13:34 EDT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip diff -Nru apktool-2.3.3/INTERNAL.md apktool-2.3.4/INTERNAL.md --- apktool-2.3.3/INTERNAL.md 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/INTERNAL.md 2018-09-05 23:31:58.000000000 +0000 @@ -208,7 +208,8 @@ While previously unorganized, the repo now follows the branch naming convention depending on the current Android version. So `apktool_7.1` corresponds to the 7.1 Android release. This branch should work for all `android-7.1.x` tags for AOSP. -We didn't follow this naming convention until Android 7.1. So don't go looking for older versions. +We didn't follow this naming convention until Android 7.1. So don't go looking for older versions. The current version +is `apktool-9.0.0`, which corresponds to the Android 9.0 (Pie) release. This repo has a variety of changes applied. These changes range from disabling optimizations to lessening the rules that aapt regularly has. We do this because apktool's job is to not fix apks, but rather keep them as close to the @@ -222,7 +223,10 @@ After that, you need to build AOSP via this [documentation](https://source.android.com/source/building.html) guide. Now we aren't building the entire AOSP package, the initial build is to just see if you are capable of building it. -We check out a certain tag. Currently we use `android-8.1.0_r9`. +We check out a certain tag. Currently we use + + * aapt2 - `android-9.0.0_r3`. + * aapt1 - `android-9.0.0_r3`. ### Including our modified `frameworks/base` package. diff -Nru apktool-2.3.3/.travis.yml apktool-2.3.4/.travis.yml --- apktool-2.3.3/.travis.yml 2018-04-26 15:38:06.000000000 +0000 +++ apktool-2.3.4/.travis.yml 2018-09-05 23:31:58.000000000 +0000 @@ -15,6 +15,7 @@ dist: trusty jdk: openjdk8 - os: osx + osx_image: xcode9.2 allow_failures: - jdk: openjdk7 cache: @@ -26,4 +27,4 @@ branches: only: - master - - stable \ No newline at end of file + - stable