import subprocess from .util import * from . import fileutil import re from polly.patcher import process_all_patches # Task dependencies from .patch_smali import patch_smali def to_dex_name(smali_name): if smali_name == 'smali': return 'classes.dex' else: num = re.match(r"smali_classes([0-9]+)", smali_name).group(1) return f"classes{num}.dex" def compile_smali(): _ = patch_smali() COMPILED_SMALI_DIR.mkdir(parents=True, exist_ok=True) print("Compiling smali...") for smali_dir in PATCHED_SMALI_DIR.glob("*"): dest_dex = COMPILED_SMALI_DIR / to_dex_name(smali_dir.name) # Don't compile if not necessary # This depends on merge_into touching directories with copying if dest_dex.exists() and smali_dir.stat().st_mtime < dest_dex.stat().st_mtime: print(F"Skipping {dest_dex.name}") continue print(f"Compiling {smali_dir.name} => {dest_dex.name}...") _ = subprocess.run(["java", "-jar", "tools/smali-3.0.5.jar", "a", "-a", "26", smali_dir, "-o", dest_dex])