Feat: Introduce "res-mode" options. (#3318)

* Revert "Remove Apktool Dummys. (#3258)"

This reverts commit 0e226928ce.

* feat: properly add dummys

* refactor: shorten ResTypeSpec

* style: remove extra space

* refactor: extract FlagItem into own class

* refactor: notate which type is null

* fix: only add dummys if enabled

* feat: skip unknown (if enabled)

* feat: introduce "res-mode"

* feat: expose config on res table

* feat: add method to base attr for res skips

* fix: ensure autobuild doesn't choke

* refactor: remove java17 enhanced switch

* refactor: rename methods

* refactor: cleanup res-mode param

* test: introduction of test/sample apk

* refactor: make ResXmlPatcher public for loading XML

* test: assertions for dummy|leave|retain

* fix: prevent using `@null` as a name

* refactor: shorten long param for 'resm'

* refactor: leave for preserve
This commit is contained in:
Connor Tumbleson
2023-09-09 07:29:39 -04:00
committed by GitHub
parent f0ca6d11f9
commit a117132e39
15 changed files with 335 additions and 35 deletions

View File

@ -167,6 +167,30 @@ public class Main {
if (cli.hasOption("m") || cli.hasOption("match-original")) {
config.analysisMode = true;
}
if (cli.hasOption("res-mode") || cli.hasOption("resolve-resources-mode")) {
String mode = cli.getOptionValue("res-mode");
if (mode == null) {
mode = cli.getOptionValue("resolve-resources-mode");
}
switch (mode) {
case "remove":
case "delete":
config.setDecodeResolveMode(Config.DECODE_RES_RESOLVE_REMOVE);
break;
case "dummy":
case "dummies":
config.setDecodeResolveMode(Config.DECODE_RES_RESOLVE_DUMMY);
break;
case "keep":
case "preserve":
config.setDecodeResolveMode(Config.DECODE_RES_RESOLVE_RETAIN);
break;
default:
System.err.println("Unknown resolve resources mode: " + mode);
System.err.println("Expect: 'remove', 'dummy' or 'keep'.");
System.exit(1);
}
}
File outDir;
if (cli.hasOption("o") || cli.hasOption("output")) {
@ -301,8 +325,6 @@ public class Main {
}
private static void _Options() {
// create options
Option versionOption = Option.builder("version")
.longOpt("version")
.desc("Print the version.")
@ -409,6 +431,13 @@ public class Main {
.desc("Skip changes detection and build all files.")
.build();
Option resolveResModeOption = Option.builder("resm")
.longOpt("resource-mode")
.desc("Sets the resolve resources mode. Possible values are: 'remove' (default), 'dummy' or 'keep'.")
.hasArg(true)
.argName("mode")
.build();
Option aaptOption = Option.builder("a")
.longOpt("aapt")
.hasArg(true)
@ -469,6 +498,7 @@ public class Main {
decodeOptions.addOption(apiLevelOption);
decodeOptions.addOption(noAssetOption);
decodeOptions.addOption(forceManOption);
decodeOptions.addOption(resolveResModeOption);
buildOptions.addOption(apiLevelOption);
buildOptions.addOption(debugBuiOption);
@ -525,6 +555,7 @@ public class Main {
allOptions.addOption(debugDecOption);
allOptions.addOption(noDbgOption);
allOptions.addOption(forceManOption);
allOptions.addOption(resolveResModeOption);
allOptions.addOption(noAssetOption);
allOptions.addOption(keepResOption);
allOptions.addOption(debugBuiOption);