• Martin Kustermann's avatar
    Ensure `flutter build apk --release` optimizes+shrinks platform code (#136880) · 1dd21f8d
    Martin Kustermann authored
    Since the original PR that supposedly enabled proguard, it was using the
    android proguard rules that disable optimizations. See initial PR in [0]
    
    This PR changes the flutter gradle plugin to use the
    `proguard-android-optimize.txt` (instead of `proguard-android.txt`)
    which will enable optimizations/shrinking of platform code (i.e.
    java/kotlin).
    
    For a simple flutter hello world this results in a 25% reduction in the
    resulting DEX file (`classes.dex` of the APK).
    
    Note for users:
    
    For some users this may result in issues because their java/kotlin code is
    now better optimized & tree shaken and thereby symbols may be no longer
    available or being obfuscated.
    
    To fix those issues it's best to craft precise proguard rules describing the
    extra symbols that are needed by the app (see [1]). But it's also possible to
    opt out entirely of optimizations by using the unoptimized proguard rules.
    
    To add custom proguard rules or use the unoptimized android rules, one can
    update `android/app/build.gradle`:
    ```
    android {
        ...
        buildTypes {
            release {
                ...
    +            proguardFiles(
    +                // Not ideal: Disables optimizations by using unoptimized android rules.
    +                getDefaultProguardFile("proguard-android.txt"),
    +
    +                // Better: Have precise keep rules to only keep things that are needed.
    +                "custom-rules.pro",
    +            )
            }
        }
    }
    ```
    
    
    [0] f098de1f
    [1] https://developer.android.com/build/shrink-code
    
    Fixes https://github.com/flutter/flutter/issues/136879
    1dd21f8d
Name
Last commit
Last update
.github Loading commit data...
.vscode Loading commit data...
bin Loading commit data...
dev Loading commit data...
examples Loading commit data...
packages Loading commit data...
.ci.yaml Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CODEOWNERS Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
CONTRIBUTING.md Loading commit data...
LICENSE Loading commit data...
PATENT_GRANT Loading commit data...
README.md Loading commit data...
TESTOWNERS Loading commit data...
analysis_options.yaml Loading commit data...
dartdoc_options.yaml Loading commit data...
flutter_console.bat Loading commit data...