版本包: https://docs.microsoft.com/zh-cn/xamarin/android/deploy-test/app-package-size
启用连接器,减少以来程序集:https://docs.microsoft.com/zh-cn/xamarin/android/deploy-test/linker#linker-behavior
启用ProGuard压缩,以减少大小: https://docs.microsoft.com/zh-cn/xamarin/android/deploy-test/release-prep/proguard?tabs=windows
版本包
若要提供完全包含的应用程序,包必须包含应用程序、关联库、内容、Mono 运行时以及所需的基类库 (BCL) 程序集。 例如,如果我们使用默认的“Hello World”模板,则完整的包生成内容将如下所示:
15.8 MB - 比我们所需的下载大小要大。 问题在于 BCL 库,因为它们包含 mscorlib、系统和 Mono.Android,以此提供大量的必需组件来运行应用程序。 但是,它们还在应用程序中提供了可能不使用的功能,因此最好将这些组件排除在外。
当我们构建用于分发的应用程序时,会执行一个称为“链接”的过程来检查应用,并移除不直接使用的任何代码。 此过程类似于垃圾回收为堆分配内存提供的功能。 但是,与在对象上操作不同,链接将在代码上运行。 例如,System.dll 中有一个完整的命名空间,用于发送和接收电子邮件,但是,如果应用程序不使用此功能,那么该代码只会浪费空间。 在 Hello World 应用程序上运行链接器之后,现在我们的包如下所示:
正如我们所看到的,这会移除大量未使用的 BCL。 请注意,BCL 的最终大小要取决于实际使用的应用程序。 例如,如果我们查看一个名为 ApiDemo 的更大的示例应用程序,会看到 BCL 组件的大小增加了,因为 ApiDemo 使用的 BCL 数量要大于 Hello,World:
如此处所示,应用程序包大小通常要比应用程序及其依赖项大约要大 2.9 MB。