xamarin 中的 shrinkresource、proguard 等不会减小我的应用程序大小

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

在android工作室的build.gradle文件中,我们可以使用shrinkresources设置为true来缩小我们的app.Also 也可以使用 minifyenabledproguard 选项。

但是在 xamarin 中,我如何使用这些选项?

我在我的应用程序中使用了混淆器,因为它在 xamarin doc.but 中没有找到任何用途(我的意思是我的应用程序大小没有减少)。我的简单应用程序大约有 18Mb size.If 任何人都有在 xamarin 中使用混淆器的经验,请在此处粘贴示例文件并说明您是如何完成的 this.So 其他人也可以受益。

如果 APK 包含大量未使用的 类(例如,由于库而被包含),Proguard 只能减小 APK 的大小。因此它只能减少 APK 中 classes.dex 文件的大小。 然而,一个 APK 通常包含大量其他文件 - Proguard 不会触及它们。

您应该在 ZIP 查看器中打开生成的 APK 文件,然后查看哪些元素采用了 space。如果是 classes.dex 文件,那只是 Proguard 配置的问题。

我知道您具体询问的是 Android Studio 的 proguard 和 minifyenabled 功能,但如果目的是专门减小应用程序的大小,您应该 configure a more aggressive linking strategy.

  1. 右击android项目
  2. 下"Build"select"Android Build"(或"iOS Build")
  3. Select "Link All" 用于 "Linker behavior" 下拉列表

确保这仅适用于 Release 或 Ad-Hoc 配置,具体取决于您的分发策略。

链接器配置工作流程:

  1. 运行 物理设备上的应用程序以实现所需配置 (Release/Ad-Hoc)
  2. 测试功能直到 "TypeInitializationException" 或发生类似异常
  3. 将type/field/method添加到配置文件
  4. 冲洗并重复直到应用稳定

如果不喜欢配置文件,也可以使用PreserveAttribute。如果链接器在您的一个 PCL 中剥离了 类,而您无法访问此属性,您可以在那个名为 PreserverAttribute 的 PCL 中定义您自己的属性,因为链接器是只是寻找具有该名称的属性,不需要特定类型。

链接器通过分析代码路径并删除它认为未使用的引用来工作。如果您使用依赖注入,链接器将无法理解它需要保留哪些引用,因此这可能需要一些时间,但它可以大大减少应用程序的大小,而且您只需执行一次。您也可以对 iOS 执行上述相同步骤。

Bonus 确保在构建选项中选中 "Strip native debugging symbols"。它是默认设置的,但一些心怀不满的同事可能没有选中它。

其他资源:
Linking on iOS

Linking on Android