mirror of
https://github.com/Radiquum/anixart-patcher.git
synced 2025-09-04 02:05:33 +05:00
feat: add more settings to compress patch
This commit is contained in:
parent
ea5a1a2bed
commit
2fef0a32b7
4 changed files with 231 additions and 9 deletions
|
@ -1,3 +1,9 @@
|
||||||
{
|
{
|
||||||
"keep_dirs": ["META-INF", "kotlin"]
|
"remove_language_files": true,
|
||||||
|
"remove_AI_voiceover": true,
|
||||||
|
"remove_debug_lines": true,
|
||||||
|
"remove_drawable_files": false,
|
||||||
|
"remove_unknown_files": false,
|
||||||
|
"remove_unknown_files_keep_dirs": ["META-INF", "kotlin"],
|
||||||
|
"compress_png_files": false
|
||||||
}
|
}
|
30
patches/compress.md
Normal file
30
patches/compress.md
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# Compress
|
||||||
|
|
||||||
|
Patch is used to compress and remove resources to reduce final apk filesize
|
||||||
|
|
||||||
|
## settings (compress.config.json)
|
||||||
|
|
||||||
|
- remove_unknown_files: true/false - removes files from decompiled/unknown directory
|
||||||
|
- remove_unknown_files_keep_dirs: list[str] - keeps specified directories in decompiled/unknown directory
|
||||||
|
- remove_debug_lines: true/false - removes `.line n` from decompiled smali files
|
||||||
|
- remove_AI_voiceover: true/false - replaces voiceover of anixa character with a blank mp3
|
||||||
|
- compress_png_files: true/false - compresses PNG in decompiled/res directory
|
||||||
|
- remove_drawable_files: true/false - removes some drawable-* from decompiled/res
|
||||||
|
- remove_language_files: true/false - removes all languages except ru and en
|
||||||
|
|
||||||
|
## efficiency
|
||||||
|
|
||||||
|
Tested with 9.0 Beta 7
|
||||||
|
|
||||||
|
diff = original apk bytes - patch apk bytes
|
||||||
|
|
||||||
|
| Setting | Filesize | Diff | % |
|
||||||
|
| :----------- | :-------------------: | :-----------------: | :-: |
|
||||||
|
| None | 17092 bytes - 17.1 MB | - | - |
|
||||||
|
| Compress PNG | 17072 bytes - 17.1 MB | 20 bytes - 0.0 MB | 0.11% |
|
||||||
|
| Remove files | 17020 bytes - 17.0 MB | 72 bytes - 0.1 MB | 0.42% |
|
||||||
|
| Remove draws | 16940 bytes - 16.9 MB | 152 bytes - 0.2 MB | 0.89% |
|
||||||
|
| Remove lines | 16444 bytes - 16.4 MB | 648 bytes - 0.7 MB | 3.79% |
|
||||||
|
| Remove ai vo | 15812 bytes - 15.8 MB | 1280 bytes - 1.3 MB | 7.49% |
|
||||||
|
| Remove langs | 15764 bytes - 15.7 MB | 1328 bytes - 1.3 MB | 7.76% |
|
||||||
|
| All enabled | 13592 bytes - 13.6 MB | 3500 bytes - 4.8 MB | 20.5% |
|
|
@ -18,10 +18,16 @@ from scripts.smali_parser import get_smali_lines, save_smali_lines
|
||||||
|
|
||||||
# Patch
|
# Patch
|
||||||
class PatchConfig_Compress(TypedDict):
|
class PatchConfig_Compress(TypedDict):
|
||||||
keep_dirs: list[str]
|
remove_language_files: bool
|
||||||
|
remove_AI_voiceover: bool
|
||||||
|
remove_debug_lines: bool
|
||||||
|
remove_drawable_files: bool
|
||||||
|
remove_unknown_files: bool
|
||||||
|
remove_unknown_files_keep_dirs: list[str]
|
||||||
|
compress_png_files: bool
|
||||||
|
|
||||||
|
|
||||||
def remove_files(patch_config: PatchConfig_Compress):
|
def remove_unknown_files(patch_config: PatchConfig_Compress):
|
||||||
path = f"{config['folders']['decompiled']}/unknown"
|
path = f"{config['folders']['decompiled']}/unknown"
|
||||||
|
|
||||||
items = os.listdir(path)
|
items = os.listdir(path)
|
||||||
|
@ -31,7 +37,7 @@ def remove_files(patch_config: PatchConfig_Compress):
|
||||||
os.remove(item_path)
|
os.remove(item_path)
|
||||||
log.debug(f"[COMPRESS] removed file: {item_path}")
|
log.debug(f"[COMPRESS] removed file: {item_path}")
|
||||||
elif os.path.isdir(item_path):
|
elif os.path.isdir(item_path):
|
||||||
if item not in patch_config["keep_dirs"]:
|
if item not in patch_config["remove_unknown_files_keep_dirs"]:
|
||||||
shutil.rmtree(item_path)
|
shutil.rmtree(item_path)
|
||||||
log.debug(f"[COMPRESS] removed directory: {item_path}")
|
log.debug(f"[COMPRESS] removed directory: {item_path}")
|
||||||
|
|
||||||
|
@ -87,7 +93,7 @@ def compress_png(png_path: str):
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
|
||||||
def compress_pngs():
|
def compress_png_files():
|
||||||
compressed = []
|
compressed = []
|
||||||
for root, _, files in os.walk(f"{config['folders']['decompiled']}"):
|
for root, _, files in os.walk(f"{config['folders']['decompiled']}"):
|
||||||
if len(files) < 0:
|
if len(files) < 0:
|
||||||
|
@ -101,10 +107,190 @@ def compress_pngs():
|
||||||
log.debug(f"[COMPRESS] {len(compressed)} pngs have been compressed")
|
log.debug(f"[COMPRESS] {len(compressed)} pngs have been compressed")
|
||||||
|
|
||||||
|
|
||||||
def apply(patch_config: PatchConfig_Compress) -> bool:
|
def remove_AI_voiceover():
|
||||||
|
blank = f"{config['folders']['patches']}/resources/blank.mp3"
|
||||||
|
path = f"{config['folders']['decompiled']}/res/raw"
|
||||||
|
files = [
|
||||||
|
"reputation_1.mp3",
|
||||||
|
"reputation_2.mp3",
|
||||||
|
"reputation_3.mp3",
|
||||||
|
"sound_beta_1.mp3",
|
||||||
|
"sound_create_blog_1.mp3",
|
||||||
|
"sound_create_blog_2.mp3",
|
||||||
|
"sound_create_blog_3.mp3",
|
||||||
|
"sound_create_blog_4.mp3",
|
||||||
|
"sound_create_blog_5.mp3",
|
||||||
|
"sound_create_blog_6.mp3",
|
||||||
|
"sound_create_blog_reputation_1.mp3",
|
||||||
|
"sound_create_blog_reputation_2.mp3",
|
||||||
|
"sound_create_blog_reputation_3.mp3",
|
||||||
|
"sound_create_blog_reputation_4.mp3",
|
||||||
|
"sound_create_blog_reputation_5.mp3",
|
||||||
|
"sound_create_blog_reputation_6.mp3",
|
||||||
|
]
|
||||||
|
|
||||||
remove_files(patch_config)
|
for file in files:
|
||||||
remove_debug_lines()
|
if os.path.exists(f"{path}/{file}"):
|
||||||
# compress_pngs()
|
os.remove(f"{path}/{file}")
|
||||||
|
shutil.copyfile(blank, f"{path}/{file}")
|
||||||
|
log.debug(f"[COMPRESS] {file} has been replaced with blank.mp3")
|
||||||
|
|
||||||
|
log.debug(f"[COMPRESS] ai voiceover has been removed")
|
||||||
|
|
||||||
|
|
||||||
|
def remove_language_files():
|
||||||
|
path = f"{config['folders']['decompiled']}/res"
|
||||||
|
folders = [
|
||||||
|
"values-af",
|
||||||
|
"values-am",
|
||||||
|
"values-ar",
|
||||||
|
"values-as",
|
||||||
|
"values-az",
|
||||||
|
"values-b+es+419",
|
||||||
|
"values-b+sr+Latn",
|
||||||
|
"values-be",
|
||||||
|
"values-bg",
|
||||||
|
"values-bn",
|
||||||
|
"values-bs",
|
||||||
|
"values-ca",
|
||||||
|
"values-cs",
|
||||||
|
"values-da",
|
||||||
|
"values-de",
|
||||||
|
"values-el",
|
||||||
|
"values-en-rAU",
|
||||||
|
"values-en-rCA",
|
||||||
|
"values-en-rGB",
|
||||||
|
"values-en-rIN",
|
||||||
|
"values-en-rXC",
|
||||||
|
"values-es",
|
||||||
|
"values-es-rGT",
|
||||||
|
"values-es-rUS",
|
||||||
|
"values-et",
|
||||||
|
"values-eu",
|
||||||
|
"values-fa",
|
||||||
|
"values-fi",
|
||||||
|
"values-fr",
|
||||||
|
"values-fr-rCA",
|
||||||
|
"values-gl",
|
||||||
|
"values-gu",
|
||||||
|
"values-hi",
|
||||||
|
"values-hr",
|
||||||
|
"values-hu",
|
||||||
|
"values-hy",
|
||||||
|
"values-in",
|
||||||
|
"values-is",
|
||||||
|
"values-it",
|
||||||
|
"values-iw",
|
||||||
|
"values-ja",
|
||||||
|
"values-ka",
|
||||||
|
"values-kk",
|
||||||
|
"values-km",
|
||||||
|
"values-kn",
|
||||||
|
"values-ko",
|
||||||
|
"values-ky",
|
||||||
|
"values-lo",
|
||||||
|
"values-lt",
|
||||||
|
"values-lv",
|
||||||
|
"values-mk",
|
||||||
|
"values-ml",
|
||||||
|
"values-mn",
|
||||||
|
"values-mr",
|
||||||
|
"values-ms",
|
||||||
|
"values-my",
|
||||||
|
"values-nb",
|
||||||
|
"values-ne",
|
||||||
|
"values-nl",
|
||||||
|
"values-or",
|
||||||
|
"values-pa",
|
||||||
|
"values-pl",
|
||||||
|
"values-pt",
|
||||||
|
"values-pt-rBR",
|
||||||
|
"values-pt-rPT",
|
||||||
|
"values-ro",
|
||||||
|
"values-si",
|
||||||
|
"values-sk",
|
||||||
|
"values-sl",
|
||||||
|
"values-sq",
|
||||||
|
"values-sr",
|
||||||
|
"values-sv",
|
||||||
|
"values-sw",
|
||||||
|
"values-ta",
|
||||||
|
"values-te",
|
||||||
|
"values-th",
|
||||||
|
"values-tl",
|
||||||
|
"values-tr",
|
||||||
|
"values-uk",
|
||||||
|
"values-ur",
|
||||||
|
"values-uz",
|
||||||
|
"values-vi",
|
||||||
|
"values-zh",
|
||||||
|
"values-zh-rCN",
|
||||||
|
"values-zh-rHK",
|
||||||
|
"values-zh-rTW",
|
||||||
|
"values-zu",
|
||||||
|
"values-watch",
|
||||||
|
]
|
||||||
|
|
||||||
|
for folder in folders:
|
||||||
|
if os.path.exists(f"{path}/{folder}"):
|
||||||
|
shutil.rmtree(f"{path}/{folder}")
|
||||||
|
log.debug(f"[COMPRESS] {folder} has been removed")
|
||||||
|
|
||||||
|
|
||||||
|
def remove_drawable_files():
|
||||||
|
path = f"{config['folders']['decompiled']}/res"
|
||||||
|
folders = [
|
||||||
|
"drawable-en-hdpi",
|
||||||
|
"drawable-en-ldpi",
|
||||||
|
"drawable-en-mdpi",
|
||||||
|
"drawable-en-xhdpi",
|
||||||
|
"drawable-en-xxhdpi",
|
||||||
|
"drawable-en-xxxhdpi",
|
||||||
|
"drawable-ldrtl-hdpi",
|
||||||
|
"drawable-ldrtl-mdpi",
|
||||||
|
"drawable-ldrtl-xhdpi",
|
||||||
|
"drawable-ldrtl-xxhdpi",
|
||||||
|
"drawable-ldrtl-xxxhdpi",
|
||||||
|
"drawable-tr-anydpi",
|
||||||
|
"drawable-tr-hdpi",
|
||||||
|
"drawable-tr-ldpi",
|
||||||
|
"drawable-tr-mdpi",
|
||||||
|
"drawable-tr-xhdpi",
|
||||||
|
"drawable-tr-xxhdpi",
|
||||||
|
"drawable-tr-xxxhdpi",
|
||||||
|
"drawable-watch",
|
||||||
|
"layout-watch",
|
||||||
|
]
|
||||||
|
|
||||||
|
for folder in folders:
|
||||||
|
if os.path.exists(f"{path}/{folder}"):
|
||||||
|
shutil.rmtree(f"{path}/{folder}")
|
||||||
|
log.debug(f"[COMPRESS] {folder} has been removed")
|
||||||
|
|
||||||
|
|
||||||
|
def apply(patch_config: PatchConfig_Compress) -> bool:
|
||||||
|
if patch_config['remove_unknown_files']:
|
||||||
|
log.info("[COMPRESS] removing unknown files")
|
||||||
|
remove_unknown_files(patch_config)
|
||||||
|
|
||||||
|
if patch_config["remove_drawable_files"]:
|
||||||
|
log.info("[COMPRESS] removing drawable-xx dirs")
|
||||||
|
remove_drawable_files()
|
||||||
|
|
||||||
|
if patch_config["compress_png_files"]:
|
||||||
|
log.info("[COMPRESS] compressing PNGs")
|
||||||
|
compress_png_files()
|
||||||
|
|
||||||
|
if patch_config["remove_language_files"]:
|
||||||
|
log.info("[COMPRESS] removing languages")
|
||||||
|
remove_language_files()
|
||||||
|
|
||||||
|
if patch_config["remove_AI_voiceover"]:
|
||||||
|
log.info("[COMPRESS] removing AI voiceover")
|
||||||
|
remove_AI_voiceover()
|
||||||
|
|
||||||
|
if patch_config["remove_debug_lines"]:
|
||||||
|
log.info("[COMPRESS] stripping debug lines")
|
||||||
|
remove_debug_lines()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
BIN
patches/resources/blank.mp3
Normal file
BIN
patches/resources/blank.mp3
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue