androidxamarinproguardpublishingshrinkresources

shrinkresource ,proguard etc in xamarin doesn't reduce my app size


In android studio's build.gradle file,we can use shrinkresources set to true to shrinkify our app.Also can use minifyenabled and proguard options as well.

But in xamarin, How can I use these options?

I use proguard in my app as it referred in xamarin doc.but didn't find any use of it (I mean my app size didn't get reduced).My simple app is having around 18Mb in size.If anyone have experience using proguard in xamarin,please paste a sample file here also explain how you accomplished this.So others can also benefited.


Solution

  • I know you're asking specifically about the proguard and minifyenabled features of Android Studio but if the intent is specifically to reduce the size of your application, you should configure a more aggressive linking strategy.

    1. Right click android project
    2. Under "Build" select "Android Build" (or "iOS Build")
    3. Select "Link All" for "Linker behavior" dropdown

    Make sure this is only for Release or Ad-Hoc configurations, depending on your distribution strategy.

    Linker Configuration Workflow:

    1. Run app on a physical device for desired configuration (Release/Ad-Hoc)
    2. Test functionality until "TypeInitializationException" or similar exception occurs
    3. Add the type/field/method to the configuration file
    4. Rinse and repeat until the application is stable

    If you don't like the configuration file, you can also use the PreserveAttribute. If the linker is stripping out classes in one of your PCLs that don't have access to this attribute, you can define your own attribute in that PCL called PreserverAttribute because the linker is just looking for an attribute with that name, not necessary of a specific type.

    The linker works by analyzing code paths and removing what it believes to be unused references. If you use dependency injection, the linker won't understand which references it needs to keep around so this can take some time but it can drastically reduce the size of your application and you only need to do it once. You can follow the same steps above for iOS as well.

    Bonus Make sure "Strip native debugging symbols" is checked in the build options. Its set by default but some disgruntled coworker could have unchecked it.

    Additional Resources:
    Linking on iOS

    Linking on Android