Refactor into common config object. (#3100)

* extract Config

* extract Config

* style: linting

---------

Co-authored-by: Slava Volkov <sv99@inbox.ru>
This commit is contained in:
Connor Tumbleson
2023-06-25 15:07:23 -04:00
committed by GitHub
parent 25509a7498
commit 10495cbe96
32 changed files with 501 additions and 524 deletions

View File

@ -17,7 +17,6 @@
package brut.androlib;
import brut.androlib.exceptions.AndrolibException;
import brut.androlib.options.BuildOptions;
import brut.androlib.res.AndrolibResources;
import brut.common.BrutException;
import brut.directory.DirUtil;
@ -119,7 +118,7 @@ public abstract class TestUtils {
}
public static void cleanFrameworkFile() throws BrutException {
File framework = new File(getFrameworkDir(), "1.apk");
File framework = new File(getFrameworkDirectory(), "1.apk");
if (Files.exists(framework.toPath())) {
OS.rmfile(framework.getAbsolutePath());
@ -137,10 +136,10 @@ public abstract class TestUtils {
return buffer;
}
static File getFrameworkDir() throws AndrolibException {
AndrolibResources androlibResources = new AndrolibResources();
androlibResources.buildOptions = new BuildOptions();
return androlibResources.getFrameworkDir();
static File getFrameworkDirectory() throws AndrolibException {
Config config = Config.getDefaultConfig();
AndrolibResources androlibResources = new AndrolibResources(config);
return androlibResources.getFrameworkDirectory();
}
public static class ResValueElementQualifier implements ElementQualifier {

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt1;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.directory.ExtFile;
import brut.common.BrutException;
import brut.util.OS;
@ -47,8 +47,8 @@ public class AndroidOreoNotSparseTest extends BaseTest {
apkDecoder.decode();
LOGGER.info("Building not_sparse.apk...");
BuildOptions buildOptions = new BuildOptions();
new Androlib(buildOptions).build(sTestNewDir, testApk);
Config config = Config.getDefaultConfig();
new Androlib(config).build(sTestNewDir, testApk);
}
@AfterClass

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt1;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.directory.ExtFile;
import brut.common.BrutException;
import brut.util.OS;
@ -47,8 +47,8 @@ public class AndroidOreoSparseTest extends BaseTest {
apkDecoder.decode();
LOGGER.info("Building sparse.apk...");
BuildOptions buildOptions = new BuildOptions();
new Androlib(buildOptions).build(sTestNewDir, testApk);
Config config = Config.getDefaultConfig();
new Androlib(config).build(sTestNewDir, testApk);
}
@AfterClass

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt1;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.directory.ExtFile;
import brut.common.BrutException;
import brut.util.OS;
@ -47,11 +47,11 @@ public class DebugTagRetainedTest extends BaseTest {
TestUtils.copyResourceDir(DebugTagRetainedTest.class, "aapt1/issue1235/", sTestOrigDir);
LOGGER.info("Building issue1235.apk...");
BuildOptions buildOptions = new BuildOptions();
buildOptions.debugMode = true;
Config config = Config.getDefaultConfig();
config.debugMode = true;
File testApk = new File(sTmpDir, "issue1235.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding issue1235.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);

View File

@ -18,7 +18,7 @@ package brut.androlib.aapt1;
import brut.androlib.Androlib;
import brut.androlib.ApkDecoder;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.androlib.TestUtils;
import brut.directory.ExtFile;
import brut.common.BrutException;
@ -50,8 +50,8 @@ public class EmptyResourcesArscTest {
apkDecoder.decode();
LOGGER.info("Building issue1730.apk...");
BuildOptions buildOptions = new BuildOptions();
new Androlib(buildOptions).build(sTestNewDir, testApk);
Config config = Config.getDefaultConfig();
new Androlib(config).build(sTestNewDir, testApk);
}
@AfterClass

View File

@ -52,7 +52,7 @@ public class ReferenceVersionCodeTest extends BaseTest {
String apk = "issue1234.apk";
// decode issue1234.apk
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
ApkDecoder apkDecoder = new ApkDecoder(new ExtFile(sTmpDir + File.separator + apk));
ExtFile decodedApk = new ExtFile(sTmpDir + File.separator + apk + ".out");
apkDecoder.setOutDir(new File(sTmpDir + File.separator + apk + ".out"));
apkDecoder.decode();

View File

@ -18,7 +18,6 @@ package brut.androlib.aapt1;
import brut.androlib.*;
import brut.androlib.exceptions.AndrolibException;
import brut.androlib.options.BuildOptions;
import brut.directory.ExtFile;
import brut.common.BrutException;
import brut.util.OS;
@ -51,11 +50,11 @@ public class SharedLibraryTest extends BaseTest {
public void isFrameworkTaggingWorking() throws AndrolibException {
String apkName = "library.apk";
BuildOptions buildOptions = new BuildOptions();
buildOptions.frameworkFolderLocation = sTmpDir.getAbsolutePath();
buildOptions.frameworkTag = "building";
Config config = Config.getDefaultConfig();
config.frameworkDirectory = sTmpDir.getAbsolutePath();
config.frameworkTag = "building";
new Androlib(buildOptions).installFramework(new File(sTmpDir + File.separator + apkName));
new Androlib(config).installFramework(new File(sTmpDir + File.separator + apkName));
assertTrue(fileExists("2-building.apk"));
}
@ -64,10 +63,10 @@ public class SharedLibraryTest extends BaseTest {
public void isFrameworkInstallingWorking() throws AndrolibException {
String apkName = "library.apk";
BuildOptions buildOptions = new BuildOptions();
buildOptions.frameworkFolderLocation = sTmpDir.getAbsolutePath();
Config config = Config.getDefaultConfig();
config.frameworkDirectory = sTmpDir.getAbsolutePath();
new Androlib(buildOptions).installFramework(new File(sTmpDir + File.separator + apkName));
new Androlib(config).installFramework(new File(sTmpDir + File.separator + apkName));
assertTrue(fileExists("2.apk"));
}
@ -78,36 +77,32 @@ public class SharedLibraryTest extends BaseTest {
String client = "client.apk";
// setup apkOptions
BuildOptions buildOptions = new BuildOptions();
buildOptions.frameworkFolderLocation = sTmpDir.getAbsolutePath();
buildOptions.frameworkTag = "shared";
Config config = Config.getDefaultConfig();
config.frameworkDirectory = sTmpDir.getAbsolutePath();
config.frameworkTag = "shared";
// install library/framework
new Androlib(buildOptions).installFramework(new File(sTmpDir + File.separator + library));
new Androlib(config).installFramework(new File(sTmpDir + File.separator + library));
assertTrue(fileExists("2-shared.apk"));
// decode client.apk
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + client));
ApkDecoder apkDecoder = new ApkDecoder(config, new ExtFile(sTmpDir + File.separator + client));
apkDecoder.setOutDir(new File(sTmpDir + File.separator + client + ".out"));
apkDecoder.setFrameworkDir(buildOptions.frameworkFolderLocation);
apkDecoder.setFrameworkTag(buildOptions.frameworkTag);
apkDecoder.decode();
// decode library.apk
ApkDecoder libraryDecoder = new ApkDecoder(new File(sTmpDir + File.separator + library));
ApkDecoder libraryDecoder = new ApkDecoder(config, new ExtFile(sTmpDir + File.separator + library));
libraryDecoder.setOutDir(new File(sTmpDir + File.separator + library + ".out"));
libraryDecoder.setFrameworkDir(buildOptions.frameworkFolderLocation);
libraryDecoder.setFrameworkTag(buildOptions.frameworkTag);
libraryDecoder.decode();
// build client.apk
ExtFile clientApk = new ExtFile(sTmpDir, client + ".out");
new Androlib(buildOptions).build(clientApk, null);
new Androlib(config).build(clientApk, null);
assertTrue(fileExists(client + ".out" + File.separator + "dist" + File.separator + client));
// build library.apk (shared library)
ExtFile libraryApk = new ExtFile(sTmpDir, library + ".out");
new Androlib(buildOptions).build(libraryApk, null);
new Androlib(config).build(libraryApk, null);
assertTrue(fileExists(library + ".out" + File.separator + "dist" + File.separator + library));
}

View File

@ -18,6 +18,7 @@ package brut.androlib.aapt1;
import brut.androlib.ApkDecoder;
import brut.androlib.BaseTest;
import brut.androlib.Config;
import brut.androlib.TestUtils;
import brut.directory.ExtFile;
import brut.common.BrutException;
@ -46,13 +47,15 @@ public class SkipAssetTest extends BaseTest {
public void checkIfEnablingSkipAssetWorks() throws BrutException, IOException {
String apk = "issue1605.apk";
Config config = Config.getDefaultConfig();
config.decodeAssets = Config.DECODE_ASSETS_NONE;
config.forceDelete = true;
// decode issue1605.apk
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
ApkDecoder apkDecoder = new ApkDecoder(config, new ExtFile(sTmpDir + File.separator + apk));
sTestOrigDir = new ExtFile(sTmpDir + File.separator + apk + ".out");
apkDecoder.setOutDir(sTestOrigDir);
apkDecoder.setDecodeAssets(ApkDecoder.DECODE_ASSETS_NONE);
apkDecoder.setForceDelete(true);
apkDecoder.decode();
checkFileDoesNotExist("assets" + File.separator + "kotlin.kotlin_builtins");
@ -63,13 +66,15 @@ public class SkipAssetTest extends BaseTest {
public void checkControl() throws BrutException, IOException {
String apk = "issue1605.apk";
Config config = Config.getDefaultConfig();
config.decodeAssets = Config.DECODE_ASSETS_FULL;
config.forceDelete = true;
// decode issue1605.apk
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
ApkDecoder apkDecoder = new ApkDecoder(config, new ExtFile(sTmpDir + File.separator + apk));
sTestOrigDir = new ExtFile(sTmpDir + File.separator + apk + ".out");
apkDecoder.setOutDir(sTestOrigDir);
apkDecoder.setDecodeAssets(ApkDecoder.DECODE_ASSETS_FULL);
apkDecoder.setForceDelete(true);
apkDecoder.decode();
checkFileDoesExist("assets" + File.separator + "kotlin.kotlin_builtins");

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt1;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.directory.ExtFile;
import brut.common.BrutException;
import brut.util.OS;
@ -40,19 +40,20 @@ public class UnknownCompressionTest extends BaseTest {
TestUtils.copyResourceDir(UnknownCompressionTest.class, "aapt1/unknown_compression/", sTmpDir);
String apk = "deflated_unknowns.apk";
BuildOptions buildOptions = new BuildOptions();
buildOptions.frameworkFolderLocation = sTmpDir.getAbsolutePath();
Config config = Config.getDefaultConfig();
config.frameworkDirectory = sTmpDir.getAbsolutePath();
sTestOrigDir = new ExtFile(sTmpDir, apk);
// decode deflated_unknowns.apk
ApkDecoder apkDecoder = new ApkDecoder(sTestOrigDir);
// need new ExtFile because closed in decode()
ApkDecoder apkDecoder = new ApkDecoder(new ExtFile(sTestOrigDir));
apkDecoder.setOutDir(new File(sTestOrigDir.getAbsolutePath() + ".out"));
apkDecoder.decode();
// build deflated_unknowns
ExtFile clientApkFolder = new ExtFile(sTestOrigDir.getAbsolutePath() + ".out");
new Androlib(buildOptions).build(clientApkFolder, null);
new Androlib(config).build(clientApkFolder, null);
sTestNewDir = new ExtFile(clientApkFolder, "dist" + File.separator + apk);
}

View File

@ -18,7 +18,7 @@ package brut.androlib.aapt2;
import brut.androlib.*;
import brut.androlib.meta.MetaInfo;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -43,13 +43,13 @@ public class BuildAndDecodeTest extends BaseTest {
LOGGER.info("Unpacking testapp...");
TestUtils.copyResourceDir(BuildAndDecodeTest.class, "aapt2/testapp/", sTestOrigDir);
BuildOptions buildOptions = new BuildOptions();
buildOptions.useAapt2 = true;
buildOptions.verbose = true;
Config config = Config.getDefaultConfig();
config.useAapt2 = true;
config.verbose = true;
LOGGER.info("Building testapp.apk...");
File testApk = new File(sTmpDir, "testapp.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding testapp.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt2;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -47,13 +47,13 @@ public class DebuggableFalseChangeToTrueTest extends BaseTest {
TestUtils.copyResourceDir(DebuggableFalseChangeToTrueTest.class, "aapt2/issue2328/debuggable-false", sTestOrigDir);
LOGGER.info("Building issue2328-debuggable-flase.apk...");
BuildOptions buildOptions = new BuildOptions();
buildOptions.debugMode = true;
buildOptions.useAapt2 = true;
buildOptions.verbose = true;
Config config = Config.getDefaultConfig();
config.debugMode = true;
config.useAapt2 = true;
config.verbose = true;
File testApk = new File(sTmpDir, "issue2328-debuggable-flase.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding issue2328-debuggable-flase.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt2;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -47,13 +47,13 @@ public class DebuggableTrueAddedTest extends BaseTest {
TestUtils.copyResourceDir(DebuggableTrueAddedTest.class, "aapt2/issue2328/debuggable-missing", sTestOrigDir);
LOGGER.info("Building issue2328-debuggable-missing.apk...");
BuildOptions buildOptions = new BuildOptions();
buildOptions.debugMode = true;
buildOptions.useAapt2 = true;
buildOptions.verbose = true;
Config config = Config.getDefaultConfig();
config.debugMode = true;
config.useAapt2 = true;
config.verbose = true;
File testApk = new File(sTmpDir, "issue2328-debuggable-missing.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding issue2328-debuggable-missing.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt2;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -47,13 +47,13 @@ public class DebuggableTrueRetainedTest extends BaseTest {
TestUtils.copyResourceDir(DebuggableTrueRetainedTest.class, "aapt2/issue2328/debuggable-true", sTestOrigDir);
LOGGER.info("Building issue2328-debuggable-true.apk...");
BuildOptions buildOptions = new BuildOptions();
buildOptions.debugMode = true;
buildOptions.useAapt2 = true;
buildOptions.verbose = true;
Config config = Config.getDefaultConfig();
config.debugMode = true;
config.useAapt2 = true;
config.verbose = true;
File testApk = new File(sTmpDir, "issue2328-debuggable-true.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding issue2328-debuggable-true.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt2;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -53,11 +53,11 @@ public class NetworkConfigTest extends BaseTest {
TestUtils.copyResourceDir(NetworkConfigTest.class, "aapt2/network_config/", sTestOrigDir);
LOGGER.info("Building testapp.apk...");
BuildOptions buildOptions = new BuildOptions();
buildOptions.netSecConf = true;
buildOptions.useAapt2 = true;
Config config = Config.getDefaultConfig();
config.netSecConf = true;
config.useAapt2 = true;
File testApk = new File(sTmpDir, "testapp.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding testapp.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);

View File

@ -17,7 +17,7 @@
package brut.androlib.aapt2;
import brut.androlib.*;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -56,11 +56,11 @@ public class NoNetworkConfigTest extends BaseTest {
TestUtils.copyResourceDir(NoNetworkConfigTest.class, "aapt2/testapp/", sTestOrigDir);
LOGGER.info("Building testapp.apk...");
BuildOptions buildOptions = new BuildOptions();
buildOptions.netSecConf = true;
buildOptions.useAapt2 = true;
Config config = Config.getDefaultConfig();
config.netSecConf = true;
config.useAapt2 = true;
File testApk = new File(sTmpDir, "testapp.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding testapp.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);

View File

@ -18,7 +18,6 @@ package brut.androlib.aapt2;
import brut.androlib.*;
import brut.androlib.exceptions.AndrolibException;
import brut.androlib.options.BuildOptions;
import brut.androlib.res.data.ResTable;
import brut.common.BrutException;
import brut.directory.ExtFile;
@ -45,13 +44,13 @@ public class NonStandardPkgIdTest extends BaseTest {
LOGGER.info("Unpacking pkgid8...");
TestUtils.copyResourceDir(BuildAndDecodeTest.class, "aapt2/pkgid8/", sTestOrigDir);
BuildOptions buildOptions = new BuildOptions();
buildOptions.useAapt2 = true;
buildOptions.verbose = true;
Config config = Config.getDefaultConfig();
config.useAapt2 = true;
config.verbose = true;
LOGGER.info("Building pkgid8.apk...");
File testApk = new File(sTmpDir, "pkgid8.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding pkgid8.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);

View File

@ -17,6 +17,7 @@
package brut.androlib.androlib;
import brut.androlib.BaseTest;
import brut.androlib.Config;
import brut.androlib.res.AndrolibResources;
import org.junit.Test;
import java.util.LinkedHashMap;

View File

@ -18,6 +18,7 @@ package brut.androlib.decode;
import brut.androlib.ApkDecoder;
import brut.androlib.BaseTest;
import brut.androlib.Config;
import brut.androlib.TestUtils;
import brut.directory.ExtFile;
import brut.common.BrutException;
@ -59,12 +60,14 @@ public class AndResGuardTest extends BaseTest {
@Test
public void checkifAndResDecodeRemapsRFolderInRawMode() throws BrutException, IOException {
String apk = "issue1170.apk";
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
sTestOrigDir = new ExtFile(sTmpDir + File.separator + apk + ".raw.out");
Config config = Config.getDefaultConfig();
config.forceDelete = true;
config.decodeResources = Config.DECODE_RESOURCES_NONE;
String apk = "issue1170.apk";
ApkDecoder apkDecoder = new ApkDecoder(config, new File(sTmpDir + File.separator + apk));
sTestOrigDir = new ExtFile(sTmpDir + File.separator + apk + ".raw.out");
apkDecoder.setOutDir(new File(sTmpDir + File.separator + apk + ".raw.out"));
apkDecoder.setDecodeResources(ApkDecoder.DECODE_RESOURCES_NONE);
apkDecoder.decode();
File aPng = new File(sTestOrigDir,"r/a/a.png");

View File

@ -52,45 +52,46 @@ public class DecodeKotlinCoroutinesTest extends BaseTest {
@Test
public void kotlinCoroutinesDecodeTest() throws IOException, AndrolibException, DirectoryException {
Config config = Config.getDefaultConfig();
config.forceDelete = true;
// decode kotlin coroutines
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
ApkDecoder apkDecoder = new ApkDecoder(config, new File(sTmpDir + File.separator + apk));
apkDecoder.setOutDir(new File(sTmpDir + File.separator + apk + ".out"));
apkDecoder.setForceDelete(true);
apkDecoder.decode();
File coroutinesExceptionHandler = new File(sTmpDir + File.separator + apk + ".out" + File.separator + "META-INF" + File.separator + "services", "kotlinx.coroutines.CoroutineExceptionHandler");
File coroutinenMainDispatcherHandler = new File(sTmpDir + File.separator + apk + ".out" + File.separator + "META-INF" + File.separator + "services", "kotlinx.coroutines.internal.MainDispatcherFactory");
File coroutinesMainDispatcherHandler = new File(sTmpDir + File.separator + apk + ".out" + File.separator + "META-INF" + File.separator + "services", "kotlinx.coroutines.internal.MainDispatcherFactory");
assert (coroutinesExceptionHandler.exists());
assert (coroutinenMainDispatcherHandler.exists());
assert (coroutinesMainDispatcherHandler.exists());
}
@Test
public void kotlinCoroutinesEncodeAfterDecodeTest() throws IOException, BrutException {
Config config = Config.getDefaultConfig();
config.forceDelete = true;
// decode kotlin coroutines
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
ApkDecoder apkDecoder = new ApkDecoder(config, new File(sTmpDir + File.separator + apk));
apkDecoder.setOutDir(new File(sTmpDir + File.separator + apk + ".out"));
apkDecoder.setForceDelete(true);
apkDecoder.decode();
// build kotlin coroutines
ExtFile testApk = new ExtFile(sTmpDir, apk + ".out");
new Androlib().build(testApk, null);
new Androlib(config).build(testApk, null);
String newApk = apk + ".out" + File.separator + "dist" + File.separator + apk;
assertTrue(fileExists(newApk));
// decode kotlin coroutines again
apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + newApk));
apkDecoder = new ApkDecoder(config, new File(sTmpDir + File.separator + newApk));
apkDecoder.setOutDir(new File(sTmpDir + File.separator + apk + ".out.two"));
apkDecoder.setForceDelete(true);
apkDecoder.decode();
Files.readAllBytes(Paths.get(sTmpDir + File.separator + apk + ".out.two" + File.separator + "AndroidManifest.xml"));
File coroutinesExceptionHandler = new File(sTmpDir + File.separator + apk + ".out.two" + File.separator + "META-INF" + File.separator + "services", "kotlinx.coroutines.CoroutineExceptionHandler");
File coroutinenMainDispatcherHandler = new File(sTmpDir + File.separator + apk + ".out.two" + File.separator + "META-INF" + File.separator + "services", "kotlinx.coroutines.internal.MainDispatcherFactory");
File coroutinesMainDispatcherHandler = new File(sTmpDir + File.separator + apk + ".out.two" + File.separator + "META-INF" + File.separator + "services", "kotlinx.coroutines.internal.MainDispatcherFactory");
assert (coroutinesExceptionHandler.exists());
assert (coroutinenMainDispatcherHandler.exists());
assert (coroutinesMainDispatcherHandler.exists());
}
private boolean fileExists(String filepath) {

View File

@ -18,7 +18,6 @@ package brut.androlib.decode;
import brut.androlib.*;
import brut.androlib.exceptions.AndrolibException;
import brut.androlib.options.BuildOptions;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -55,8 +54,8 @@ public class DuplicateDexTest extends BaseTest {
apkDecoder.decode();
LOGGER.info("Building duplicatedex.apk...");
BuildOptions buildOptions = new BuildOptions();
new Androlib(buildOptions).build(sTestNewDir, testApk);
Config config = Config.getDefaultConfig();
new Androlib(config).build(sTestNewDir, testApk);
}
@Test
@ -64,14 +63,15 @@ public class DuplicateDexTest extends BaseTest {
File testApk = new File(sTestOrigDir, "duplicatedex.apk");
LOGGER.info("Decoding duplicatedex.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);
apkDecoder.setDecodeSources(ApkDecoder.DECODE_SOURCES_SMALI_ONLY_MAIN_CLASSES);
Config config = Config.getDefaultConfig();
config.decodeSources = Config.DECODE_SOURCES_SMALI_ONLY_MAIN_CLASSES;
ApkDecoder apkDecoder = new ApkDecoder(config, testApk);
apkDecoder.setOutDir(sTestNewDir);
apkDecoder.decode();
LOGGER.info("Building duplicatedex.apk...");
BuildOptions buildOptions = new BuildOptions();
new Androlib(buildOptions).build(sTestNewDir, testApk);
new Androlib(config).build(sTestNewDir, testApk);
}
}

View File

@ -18,6 +18,7 @@ package brut.androlib.decode;
import brut.androlib.ApkDecoder;
import brut.androlib.BaseTest;
import brut.androlib.Config;
import brut.androlib.TestUtils;
import brut.common.BrutException;
import brut.directory.ExtFile;
@ -61,10 +62,10 @@ public class ForceManifestDecodeNoResourcesTest extends BaseTest {
String output = sTmpDir + File.separator + apk + ".out";
// decode issue1680.apk
decodeFile(sTmpDir + File.separator + apk, ApkDecoder.DECODE_RESOURCES_NONE,
ApkDecoder.FORCE_DECODE_MANIFEST_FULL, output);
decodeFile(sTmpDir + File.separator + apk, Config.DECODE_RESOURCES_NONE,
Config.FORCE_DECODE_MANIFEST_FULL, output);
// lets probe filetype of manifest, we should detect XML
// let's probe filetype of manifest, we should detect XML
File manifestFile = new File(output + File.separator + "AndroidManifest.xml");
byte[] magic = TestUtils.readHeaderOfFile(manifestFile, 6);
assertArrayEquals(this.xmlHeader, magic);
@ -80,10 +81,10 @@ public class ForceManifestDecodeNoResourcesTest extends BaseTest {
String output = sTmpDir + File.separator + apk + ".out";
// decode issue1680.apk
decodeFile(sTmpDir + File.separator + apk, ApkDecoder.DECODE_RESOURCES_FULL,
ApkDecoder.FORCE_DECODE_MANIFEST_FULL, output);
decodeFile(sTmpDir + File.separator + apk, Config.DECODE_RESOURCES_FULL,
Config.FORCE_DECODE_MANIFEST_FULL, output);
// lets probe filetype of manifest, we should detect XML
// let's probe filetype of manifest, we should detect XML
File manifestFile = new File(output + File.separator + "AndroidManifest.xml");
byte[] magic = TestUtils.readHeaderOfFile(manifestFile, 6);
assertArrayEquals(this.xmlHeader, magic);
@ -99,8 +100,8 @@ public class ForceManifestDecodeNoResourcesTest extends BaseTest {
String output = sTmpDir + File.separator + apk + ".out";
// decode issue1680.apk
decodeFile(sTmpDir + File.separator + apk, ApkDecoder.DECODE_RESOURCES_FULL,
ApkDecoder.FORCE_DECODE_MANIFEST_NONE, output);
decodeFile(sTmpDir + File.separator + apk, Config.DECODE_RESOURCES_FULL,
Config.FORCE_DECODE_MANIFEST_NONE, output);
// lets probe filetype of manifest, we should detect XML
File manifestFile = new File(output + File.separator + "AndroidManifest.xml");
@ -118,8 +119,8 @@ public class ForceManifestDecodeNoResourcesTest extends BaseTest {
String output = sTmpDir + File.separator + apk + ".out";
// decode issue1680.apk
decodeFile(sTmpDir + File.separator + apk, ApkDecoder.DECODE_RESOURCES_NONE,
ApkDecoder.FORCE_DECODE_MANIFEST_NONE, output);
decodeFile(sTmpDir + File.separator + apk, Config.DECODE_RESOURCES_NONE,
Config.FORCE_DECODE_MANIFEST_NONE, output);
// lets probe filetype of manifest, we should not detect XML
File manifestFile = new File(output + File.separator + "AndroidManifest.xml");
@ -133,11 +134,12 @@ public class ForceManifestDecodeNoResourcesTest extends BaseTest {
private void decodeFile(String apk, short decodeResources, short decodeManifest, String output)
throws BrutException, IOException {
ApkDecoder apkDecoder = new ApkDecoder(new File(apk));
apkDecoder.setDecodeResources(decodeResources);
apkDecoder.setForceDecodeManifest(decodeManifest);
apkDecoder.setForceDelete(true); // delete directory due to multiple tests.
Config config = Config.getDefaultConfig();
config.forceDelete = true;
config.decodeResources = decodeResources;
config.forceDecodeManifest = decodeManifest;
ApkDecoder apkDecoder = new ApkDecoder(config, new File(apk));
apkDecoder.setOutDir(new File(output));
apkDecoder.decode();
}

View File

@ -18,6 +18,7 @@ package brut.androlib.decode;
import brut.androlib.ApkDecoder;
import brut.androlib.BaseTest;
import brut.androlib.Config;
import brut.androlib.TestUtils;
import brut.directory.ExtFile;
import brut.common.BrutException;
@ -44,9 +45,10 @@ public class MinifiedArscTest extends BaseTest {
String apk = "issue1157.apk";
sTestNewDir = new ExtFile(sTmpDir, "issue1157");
Config config = Config.getDefaultConfig();
config.forceDelete = true;
// decode issue1157.apk
ApkDecoder apkDecoder = new ApkDecoder(new ExtFile(sTmpDir, apk));
apkDecoder.setForceDelete(true);
ApkDecoder apkDecoder = new ApkDecoder(config, new ExtFile(sTmpDir, apk));
apkDecoder.setOutDir(sTestNewDir);
// this should not raise an exception:

View File

@ -18,6 +18,7 @@ package brut.androlib.decode;
import brut.androlib.ApkDecoder;
import brut.androlib.BaseTest;
import brut.androlib.Config;
import brut.androlib.TestUtils;
import brut.common.BrutException;
import brut.directory.ExtFile;
@ -47,10 +48,11 @@ public class ParentDirectoryTraversalTest extends BaseTest {
public void checkIfDrawableFileDecodesProperly() throws BrutException, IOException {
String apk = "issue1498.apk";
Config config = Config.getDefaultConfig();
config.forceDelete = true;
config.decodeResources = Config.DECODE_RESOURCES_NONE;
// decode issue1498.apk
ApkDecoder apkDecoder = new ApkDecoder(new File(sTmpDir + File.separator + apk));
apkDecoder.setDecodeResources(ApkDecoder.DECODE_RESOURCES_NONE);
ApkDecoder apkDecoder = new ApkDecoder(config, new File(sTmpDir + File.separator + apk));
apkDecoder.setOutDir(new File(sTmpDir + File.separator + apk + ".out"));
// this should not raise an exception:

View File

@ -18,7 +18,7 @@ package brut.androlib.res.src;
import brut.androlib.*;
import brut.androlib.aapt2.BuildAndDecodeTest;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -45,16 +45,16 @@ public class DexStaticFieldValueTest extends BaseTest {
LOGGER.info("Unpacking issue2543...");
TestUtils.copyResourceDir(BuildAndDecodeTest.class, "decode/issue2543/", sTestOrigDir);
BuildOptions buildOptions = new BuildOptions();
Config config = Config.getDefaultConfig();
LOGGER.info("Building issue2543.apk...");
File testApk = new File(sTmpDir, "issue2543.apk");
new Androlib(buildOptions).build(sTestOrigDir, testApk);
new Androlib(config).build(sTestOrigDir, testApk);
LOGGER.info("Decoding issue2543.apk...");
ApkDecoder apkDecoder = new ApkDecoder(testApk);
config.baksmaliDebugMode = false;
ApkDecoder apkDecoder = new ApkDecoder(config, new ExtFile(testApk));
apkDecoder.setOutDir(sTestNewDir);
apkDecoder.setBaksmaliDebugMode(false);
apkDecoder.decode();
}

View File

@ -19,7 +19,7 @@ package brut.androlib.yaml;
import brut.androlib.Androlib;
import brut.androlib.BaseTest;
import brut.androlib.TestUtils;
import brut.androlib.options.BuildOptions;
import brut.androlib.Config;
import brut.common.BrutException;
import brut.directory.ExtFile;
import brut.util.OS;
@ -43,8 +43,8 @@ public class MaliciousYamlTest extends BaseTest {
@Test(expected = ConstructorException.class)
public void testMaliciousYamlNotLoaded() throws BrutException {
BuildOptions buildOptions = new BuildOptions();
Config config = Config.getDefaultConfig();
File testApk = new File(sTmpDir, "cve20220476.apk");
new Androlib(buildOptions).build(sTestNewDir, testApk);
new Androlib(config).build(sTestNewDir, testApk);
}
}