• Clark DuVall's avatar
    Add check to ensure DexSplitter does not cause runtime errors · a268c521
    Clark DuVall authored
    If an interface has only one implementer, R8 will merge the interface
    with the implementer. This causes problems if DexSplitter moves this
    class into a DFM, as the parent dex may have a reference to the
    interface, which is now a reference to the implementation in the DFM.
    This will cause a LinkageError at runtime, since the parent ClassLoader
    will try to load the reference to a class found in the child
    ClassLoader.
    
    I timed the proguard step for monochrome_bundle on my machine locally,
    the whole thing takes about 100s while _VerifySplitDexFiles takes about
    3s. The verify step will only be run for bundles with isolated splits
    enabled which use the chrome module (monochrome/trichrome chrome
    bundles).
    
    Bug: 1154065
    Change-Id: I453f10354ca20f355c8a946ed611a9ff186ab50f
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2567476
    Commit-Queue: Clark DuVall <cduvall@chromium.org>
    Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#832657}
    a268c521
proguard.py 25.7 KB