mirror of
https://github.com/revanced/Apktool.git
synced 2025-06-12 05:07:41 +02:00
Extract into ApkInvoker and split into data classes. (#3124)
* extract AaptInvoker and rename MetaFile to ApkInfo, all decode methods from AndrolibResources moved to the ApkDecoder * extract ARSCData and FlagsOffset from ARSCDecoder and remove unused imports * rebase to master * move decodeManifest and decodeResources to the ResourceDecoder * remove commented old code
This commit is contained in:
@ -16,7 +16,7 @@
|
||||
*/
|
||||
package brut.androlib;
|
||||
|
||||
import brut.androlib.meta.MetaInfo;
|
||||
import brut.androlib.apk.ApkInfo;
|
||||
import brut.common.BrutException;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.directory.FileDirectory;
|
||||
@ -37,8 +37,8 @@ import static org.junit.Assert.*;
|
||||
public class BaseTest {
|
||||
|
||||
protected void compareUnknownFiles() throws BrutException {
|
||||
MetaInfo control = MetaInfo.readMetaFile(sTestOrigDir);
|
||||
MetaInfo test = MetaInfo.readMetaFile(sTestNewDir);
|
||||
ApkInfo control = ApkInfo.load(sTestOrigDir);
|
||||
ApkInfo test = ApkInfo.load(sTestNewDir);
|
||||
assertNotNull(control.unknownFiles);
|
||||
assertNotNull(test.unknownFiles);
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
||||
package brut.androlib;
|
||||
|
||||
import brut.androlib.exceptions.AndrolibException;
|
||||
import brut.androlib.res.AndrolibResources;
|
||||
import brut.androlib.res.Framework;
|
||||
import brut.common.BrutException;
|
||||
import brut.directory.DirUtil;
|
||||
|
@ -20,7 +20,7 @@ import brut.androlib.ApkBuilder;
|
||||
import brut.androlib.ApkDecoder;
|
||||
import brut.androlib.BaseTest;
|
||||
import brut.androlib.TestUtils;
|
||||
import brut.androlib.meta.MetaInfo;
|
||||
import brut.androlib.apk.ApkInfo;
|
||||
import brut.common.BrutException;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.util.OS;
|
||||
@ -491,17 +491,17 @@ public class BuildAndDecodeTest extends BaseTest {
|
||||
|
||||
@Test
|
||||
public void confirmZeroByteFileExtensionIsNotStored() throws BrutException {
|
||||
MetaInfo metaInfo = MetaInfo.readMetaFile(sTestNewDir);
|
||||
ApkInfo apkInfo = ApkInfo.load(sTestNewDir);
|
||||
|
||||
for (String item : metaInfo.doNotCompress) {
|
||||
for (String item : apkInfo.doNotCompress) {
|
||||
assertNotEquals("jpg", item);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void confirmZeroByteFileIsStored() throws BrutException {
|
||||
MetaInfo metaInfo = MetaInfo.readMetaFile(sTestNewDir);
|
||||
assertTrue(metaInfo.doNotCompress.contains("assets/0byte_file.jpg"));
|
||||
ApkInfo apkInfo = ApkInfo.load(sTestNewDir);
|
||||
assertTrue(apkInfo.doNotCompress.contains("assets/0byte_file.jpg"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -16,11 +16,10 @@
|
||||
*/
|
||||
package brut.androlib.aapt1;
|
||||
|
||||
import brut.androlib.ApkBuilder;
|
||||
import brut.androlib.ApkDecoder;
|
||||
import brut.androlib.BaseTest;
|
||||
import brut.androlib.TestUtils;
|
||||
import brut.androlib.meta.MetaInfo;
|
||||
import brut.androlib.apk.ApkInfo;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.common.BrutException;
|
||||
import brut.util.OS;
|
||||
@ -57,7 +56,7 @@ public class ReferenceVersionCodeTest extends BaseTest {
|
||||
File outDir = new File(sTmpDir + File.separator + apk + ".out");
|
||||
apkDecoder.decode(outDir);
|
||||
|
||||
MetaInfo metaInfo = MetaInfo.readMetaFile(decodedApk);
|
||||
assertEquals("v1.0.0", metaInfo.versionInfo.versionName);
|
||||
ApkInfo apkInfo = ApkInfo.load(decodedApk);
|
||||
assertEquals("v1.0.0", apkInfo.versionInfo.versionName);
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,6 @@ package brut.androlib.aapt1;
|
||||
|
||||
import brut.androlib.*;
|
||||
import brut.androlib.exceptions.AndrolibException;
|
||||
import brut.androlib.res.AndrolibResources;
|
||||
import brut.androlib.res.Framework;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.common.BrutException;
|
||||
|
@ -17,9 +17,8 @@
|
||||
package brut.androlib.aapt2;
|
||||
|
||||
import brut.androlib.*;
|
||||
import brut.androlib.meta.MetaInfo;
|
||||
import brut.androlib.apk.ApkInfo;
|
||||
import brut.androlib.Config;
|
||||
import brut.androlib.res.AndrolibResources;
|
||||
import brut.common.BrutException;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.util.OS;
|
||||
@ -79,14 +78,14 @@ public class BuildAndDecodeTest extends BaseTest {
|
||||
|
||||
@Test
|
||||
public void confirmZeroByteFileExtensionIsNotStored() throws BrutException {
|
||||
MetaInfo metaInfo = MetaInfo.readMetaFile(sTestNewDir);
|
||||
assertFalse(metaInfo.doNotCompress.contains("jpg"));
|
||||
ApkInfo apkInfo = ApkInfo.load(sTestNewDir);
|
||||
assertFalse(apkInfo.doNotCompress.contains("jpg"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void confirmZeroByteFileIsStored() throws BrutException {
|
||||
MetaInfo metaInfo = MetaInfo.readMetaFile(sTestNewDir);
|
||||
assertTrue(metaInfo.doNotCompress.contains("assets/0byte_file.jpg"));
|
||||
ApkInfo apkInfo = ApkInfo.load(sTestNewDir);
|
||||
assertTrue(apkInfo.doNotCompress.contains("assets/0byte_file.jpg"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -18,6 +18,7 @@ package brut.androlib.aapt2;
|
||||
|
||||
import brut.androlib.*;
|
||||
import brut.androlib.exceptions.AndrolibException;
|
||||
import brut.androlib.res.ResourcesDecoder;
|
||||
import brut.androlib.res.data.ResTable;
|
||||
import brut.common.BrutException;
|
||||
import brut.directory.ExtFile;
|
||||
@ -53,9 +54,12 @@ public class NonStandardPkgIdTest extends BaseTest {
|
||||
new ApkBuilder(config, sTestOrigDir).build(testApk);
|
||||
|
||||
LOGGER.info("Decoding pkgid8.apk...");
|
||||
ApkDecoder apkDecoder = new ApkDecoder(testApk);
|
||||
apkDecoder.decode(sTestNewDir);
|
||||
mResTable = apkDecoder.getResTable();
|
||||
ResourcesDecoder resourcesDecoder = new ResourcesDecoder(
|
||||
Config.getDefaultConfig(), new ExtFile(testApk));
|
||||
|
||||
sTestNewDir.mkdirs();
|
||||
resourcesDecoder.decodeManifest(sTestNewDir);
|
||||
mResTable = resourcesDecoder.decodeResources(sTestNewDir);
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
|
@ -17,9 +17,9 @@
|
||||
package brut.androlib.androlib;
|
||||
|
||||
import brut.androlib.BaseTest;
|
||||
import brut.androlib.Config;
|
||||
import brut.androlib.res.AndrolibResources;
|
||||
import brut.androlib.apk.ApkInfo;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@ -28,82 +28,82 @@ public class InvalidSdkBoundingTest extends BaseTest {
|
||||
|
||||
@Test
|
||||
public void checkIfInvalidValuesPass() {
|
||||
AndrolibResources androlibResources = new AndrolibResources();
|
||||
ApkInfo apkInfo = new ApkInfo();
|
||||
|
||||
Map<String, String> sdkInfo = new LinkedHashMap<>();
|
||||
sdkInfo.put("minSdkVersion", "15");
|
||||
sdkInfo.put("targetSdkVersion", "25");
|
||||
sdkInfo.put("maxSdkVersion", "19");
|
||||
|
||||
androlibResources.setSdkInfo(sdkInfo);
|
||||
assertEquals("19", androlibResources.checkTargetSdkVersionBounds());
|
||||
apkInfo.setSdkInfo(sdkInfo);
|
||||
assertEquals("19", apkInfo.checkTargetSdkVersionBounds());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkIfMissingMinPasses() {
|
||||
AndrolibResources androlibResources = new AndrolibResources();
|
||||
ApkInfo apkInfo = new ApkInfo();
|
||||
|
||||
Map<String, String> sdkInfo = new LinkedHashMap<>();
|
||||
sdkInfo.put("targetSdkVersion", "25");
|
||||
sdkInfo.put("maxSdkVersion", "19");
|
||||
|
||||
androlibResources.setSdkInfo(sdkInfo);
|
||||
assertEquals("19", androlibResources.checkTargetSdkVersionBounds());
|
||||
apkInfo.setSdkInfo(sdkInfo);
|
||||
assertEquals("19", apkInfo.checkTargetSdkVersionBounds());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkIfMissingMaxPasses() {
|
||||
AndrolibResources androlibResources = new AndrolibResources();
|
||||
ApkInfo apkInfo = new ApkInfo();
|
||||
|
||||
Map<String, String> sdkInfo = new LinkedHashMap<>();
|
||||
sdkInfo.put("minSdkVersion", "15");
|
||||
sdkInfo.put("targetSdkVersion", "25");
|
||||
|
||||
androlibResources.setSdkInfo(sdkInfo);
|
||||
assertEquals("25", androlibResources.checkTargetSdkVersionBounds());
|
||||
apkInfo.setSdkInfo(sdkInfo);
|
||||
assertEquals("25", apkInfo.checkTargetSdkVersionBounds());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkIfMissingBothPasses() {
|
||||
AndrolibResources androlibResources = new AndrolibResources();
|
||||
ApkInfo apkInfo = new ApkInfo();
|
||||
|
||||
Map<String, String> sdkInfo = new LinkedHashMap<>();
|
||||
sdkInfo.put("targetSdkVersion", "25");
|
||||
|
||||
androlibResources.setSdkInfo(sdkInfo);
|
||||
assertEquals("25", androlibResources.checkTargetSdkVersionBounds());
|
||||
apkInfo.setSdkInfo(sdkInfo);
|
||||
assertEquals("25", apkInfo.checkTargetSdkVersionBounds());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkForShortHandSTag() {
|
||||
AndrolibResources androlibResources = new AndrolibResources();
|
||||
ApkInfo apkInfo = new ApkInfo();
|
||||
|
||||
Map<String, String> sdkInfo = new LinkedHashMap<>();
|
||||
sdkInfo.put("targetSdkVersion", "S");
|
||||
|
||||
androlibResources.setSdkInfo(sdkInfo);
|
||||
assertEquals("31", androlibResources.checkTargetSdkVersionBounds());
|
||||
apkInfo.setSdkInfo(sdkInfo);
|
||||
assertEquals("31", apkInfo.checkTargetSdkVersionBounds());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkForShortHandSdkTag() {
|
||||
AndrolibResources androlibResources = new AndrolibResources();
|
||||
ApkInfo apkInfo = new ApkInfo();
|
||||
|
||||
Map<String, String> sdkInfo = new LinkedHashMap<>();
|
||||
sdkInfo.put("targetSdkVersion", "O");
|
||||
|
||||
androlibResources.setSdkInfo(sdkInfo);
|
||||
assertEquals("26", androlibResources.checkTargetSdkVersionBounds());
|
||||
apkInfo.setSdkInfo(sdkInfo);
|
||||
assertEquals("26", apkInfo.checkTargetSdkVersionBounds());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkForSdkDevelopmentInsaneTestValue() {
|
||||
AndrolibResources androlibResources = new AndrolibResources();
|
||||
ApkInfo apkInfo = new ApkInfo();
|
||||
|
||||
Map<String, String> sdkInfo = new LinkedHashMap<>();
|
||||
sdkInfo.put("targetSdkVersion", "VANILLAICECREAM");
|
||||
|
||||
androlibResources.setSdkInfo(sdkInfo);
|
||||
assertEquals("10000", androlibResources.checkTargetSdkVersionBounds());
|
||||
apkInfo.setSdkInfo(sdkInfo);
|
||||
assertEquals("10000", apkInfo.checkTargetSdkVersionBounds());
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,9 @@ package brut.androlib.decode;
|
||||
|
||||
import brut.androlib.ApkDecoder;
|
||||
import brut.androlib.BaseTest;
|
||||
import brut.androlib.Config;
|
||||
import brut.androlib.TestUtils;
|
||||
import brut.androlib.res.ResourcesDecoder;
|
||||
import brut.androlib.res.data.ResTable;
|
||||
import brut.androlib.res.data.value.ResArrayValue;
|
||||
import brut.androlib.res.data.value.ResValue;
|
||||
@ -50,9 +52,12 @@ public class DecodeArrayTest extends BaseTest {
|
||||
@Test
|
||||
public void decodeStringArray() throws BrutException {
|
||||
String apk = "issue1994.apk";
|
||||
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
|
||||
//ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
|
||||
ResourcesDecoder resourcesDecoder = new ResourcesDecoder(
|
||||
Config.getDefaultConfig(),
|
||||
new ExtFile(sTmpDir + File.separator + apk));
|
||||
|
||||
ResTable resTable = apkDecoder.getResTable();
|
||||
ResTable resTable = resourcesDecoder.getResTable();
|
||||
ResValue value = resTable.getResSpec(0x7f020001).getDefaultResource().getValue();
|
||||
|
||||
assertTrue("Not a ResArrayValue. Found: " + value.getClass(), value instanceof ResArrayValue);
|
||||
@ -61,9 +66,11 @@ public class DecodeArrayTest extends BaseTest {
|
||||
@Test
|
||||
public void decodeArray() throws BrutException {
|
||||
String apk = "issue1994.apk";
|
||||
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
|
||||
ResourcesDecoder resourcesDecoder = new ResourcesDecoder(
|
||||
Config.getDefaultConfig(),
|
||||
new ExtFile(sTmpDir + File.separator + apk));
|
||||
|
||||
ResTable resTable = apkDecoder.getResTable();
|
||||
ResTable resTable = resourcesDecoder.getResTable();
|
||||
ResValue value = resTable.getResSpec(0x7f020000).getDefaultResource().getValue();
|
||||
|
||||
assertTrue("Not a ResArrayValue. Found: " + value.getClass(), value instanceof ResArrayValue);
|
||||
|
@ -16,11 +16,10 @@
|
||||
*/
|
||||
package brut.androlib.decode;
|
||||
|
||||
import brut.androlib.ApkBuilder;
|
||||
import brut.androlib.ApkDecoder;
|
||||
import brut.androlib.BaseTest;
|
||||
import brut.androlib.TestUtils;
|
||||
import brut.androlib.meta.MetaInfo;
|
||||
import brut.androlib.apk.ApkInfo;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.common.BrutException;
|
||||
import brut.util.OS;
|
||||
@ -58,8 +57,8 @@ public class DoubleExtensionUnknownFileTest extends BaseTest {
|
||||
File outDir = new File(sTmpDir + File.separator + apk + ".out");
|
||||
apkDecoder.decode(outDir);
|
||||
|
||||
MetaInfo metaInfo = MetaInfo.readMetaFile(decodedApk);
|
||||
for (String string : metaInfo.doNotCompress) {
|
||||
ApkInfo apkInfo = ApkInfo.load(decodedApk);
|
||||
for (String string : apkInfo.doNotCompress) {
|
||||
if (StringUtils.countMatches(string, ".") > 1) {
|
||||
assertTrue(string.equalsIgnoreCase("assets/bin/Data/sharedassets1.assets.split0"));
|
||||
}
|
||||
|
@ -16,11 +16,10 @@
|
||||
*/
|
||||
package brut.androlib.decode;
|
||||
|
||||
import brut.androlib.ApkBuilder;
|
||||
import brut.androlib.ApkDecoder;
|
||||
import brut.androlib.BaseTest;
|
||||
import brut.androlib.TestUtils;
|
||||
import brut.androlib.meta.MetaInfo;
|
||||
import brut.androlib.apk.ApkInfo;
|
||||
import brut.common.BrutException;
|
||||
import brut.directory.ExtFile;
|
||||
import brut.util.OS;
|
||||
@ -57,7 +56,7 @@ public class MissingVersionManifestTest extends BaseTest {
|
||||
File outDir = new File(sTmpDir + File.separator + apk + ".out");
|
||||
apkDecoder.decode(outDir);
|
||||
|
||||
MetaInfo metaInfo = MetaInfo.readMetaFile(decodedApk);
|
||||
assertNull(metaInfo.versionInfo.versionName);
|
||||
ApkInfo apkInfo = ApkInfo.load(decodedApk);
|
||||
assertNull(apkInfo.versionInfo.versionName);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user