【问题标题】:Reduce apk size in xamarin.forms减少 xamarin.forms 中的 apk 大小
【发布时间】:2018-08-06 07:29:53
【问题描述】:

我正在我的应用程序中使用 Web Api 服务。虽然它是具有小功能(例如注册和登录)的应用程序,但发布的大小首先是 55 MB,然后我搜索了一下,然后我把它降到了 22 MB。 我的设置是 仅链接 - SDK 程序集。 我已经尝试过其他所有事情,例如取消选择共享运行时。 选择 Pro guard,生成一个包,所有类型的链接,但没有得到想要的结果。 我是否遗漏了什么或应用程序大小将是 22 MB。 请提出解决方案

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    (复制自:https://montemagno.com/how-to-keep-your-android-app-size-down

    1. 链接您的库

    Xamarin 应用程序使用“链接器”来减小应用程序大小。 您可以浏览文档并了解其工作原理, 但为了简化事情,它对您的应用程序使用静态分析来删除 未在您的应用程序中使用的程序集和类型来降低您的 应用程序大小。这适用于任何 Xamarin 应用程序,因此您也应该尝试一下 在您的 iOS 应用程序中,因为它可以在默认情况下减小您的应用程序大小 “Hello, World”应用程序从 16MB 缩小到 2.9MB!有三种 您可以从项目设置中提供的设置:

    不链接会这样做,它不会链接任何东西,你会留下所有的 Mono、mscorlib、Xamarin.Android 和一堆 其他东西:

    仅链接 SDK 程序集是您最安全的选择,并且应该是您的默认设置,因为它只会尝试从 Xamarin.Android 中剥离内容 并且您的任何第三方库都不会被触及。然而,为了 真正减小您的应用程序大小,您应该尝试 Link All 程序集,因为它会调查一切并摧毁你的 应用程序大小。请务必全面测试您的应用程序,因为 链接器可能具有攻击性并会删除您需要的东西,如果那样的话 在这种情况下,您实际上可以使用 [Android.Runtime.Preserve] 标志或 在您的 MSBuild 中设置一个链接跳过,以确保不是您的所有 库被链接。

    因此,在使用 Json.NET 的 Bike Now 应用中采用这种做法, Android 支持 v4、v7、Google Play 服务和 Xamarin.Insights,我们 当我们构建我们的应用程序时可以比较和对比应用程序的大小来支持 所有三个 ABI(我们将在接下来讨论这个!)。

    • 不链接:40.7MB
    • 仅链接 SDK 程序集:18.7MB
    • 链接所有程序集:13MB

    正如您所见,正确链接可以产生巨大的影响,但我们可以做到 更好!

    2。拆分您的 APK

    在 Android 上,您可以使用 ABI(应用程序二进制接口) 可以在您发布应用程序时提供支持。最常用的将是 armeabi-v7a,但仍有大量设备支持和 运行旧的 armeabi ABI 甚至 x86 设备。所以要确保 您的应用吸引了您最有可能进入的最多用户 项目设置并选择了每一个 ABI(我知道我知道!)。

    但是,对于您选择的每个 ABI,您实际上是在捆绑一个 将 libmonodroid 和 sgen 与您的应用程序分开。那时不要相信我 将您的 .apk 重命名为 .zip 并查看 lib 文件夹:

    这当然是有道理的,因为您需要不同版本的 支持该 ABI 的 monodroid 和 sgen。问题是你现在 将所有这些库捆绑到一个 APK 和您的用户中 将下载所有这些!适用于任何 Android 的解决方案 开发人员(甚至是 Java 开发人员)只是简单地拆分您的 APK 并上传 他们都到谷歌播放!这样您的应用程序会更小 跨越所有三个 APK。您现在可以通过简单的检查来执行此操作 项目选项:

    现在,我有三个要上传的 APK 而不是一个要上传的 APK 不同和更小的尺寸(请注意,创建您的 包):

    • armeabi-v7a:10.2MB
    • armeabi:10.3MB
    • x86:10.4MB

    注意事项:

    您可能需要在选中复选框后关闭 XS 并确保 标志已在您的 csproj 中设置:

    此外,您的新 APK 将位于您的 /bin/Release 文件夹中,并且 将在其文件名中标有已签名。

    使用这些快速提示让您的用户满意并减小应用大小。

    参考这些链接:

    1. https://docs.microsoft.com/en-us/xamarin/android/deploy-test/building-apps/build-process
    2. https://montemagno.com/how-to-keep-your-android-app-size-down/
    3. https://forums.xamarin.com/discussion/113229/what-is-the-ideal-apk-size-from-xamarin-forms-and-how-to-reduce-it-without-force-close

    【讨论】:

    • 您能否再详细说明一下,以便即使链接失效,您的答案仍然有用。谢谢
    • @vanilla 这会为每个架构(x64、x86、arm、arm64)生成 APK,而不是 1 个大 APK
    【解决方案2】:

    要减小 APK 文件大小,您需要将 ProGuardvisual studio 结合使用。它将删除所有未使用的代码、资源并将filesclassesvariables 名称缩小为非常短的名称。

    如何使用 ProGuard 你看我的另一个 stackverflow 问题How to use ProgGuard with Xamarin forms.

    另一个选项使用链接 Android 项目的属性,使用 Sdk and User assembly 选项。有时会删除我们精算师使用的代码,因此需要小心。

    【讨论】: