xamarin 中的 shrinkresource、proguard 等不会减小我的应用程序大小
shrinkresource ,proguard etc in xamarin doesn't reduce my app size
在android工作室的build.gradle文件中,我们可以使用shrinkresources
设置为true
来缩小我们的app.Also 也可以使用 minifyenabled
和 proguard
选项。
但是在 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.
- 右击android项目
- 下"Build"select"Android Build"(或"iOS Build")
- Select "Link All" 用于 "Linker behavior" 下拉列表
确保这仅适用于 Release 或 Ad-Hoc 配置,具体取决于您的分发策略。
链接器配置工作流程:
- 运行 物理设备上的应用程序以实现所需配置 (Release/Ad-Hoc)
- 测试功能直到 "TypeInitializationException" 或发生类似异常
- 将type/field/method添加到配置文件
- 冲洗并重复直到应用稳定
如果不喜欢配置文件,也可以使用PreserveAttribute。如果链接器在您的一个 PCL 中剥离了 类,而您无法访问此属性,您可以在那个名为 PreserverAttribute 的 PCL 中定义您自己的属性,因为链接器是只是寻找具有该名称的属性,不需要特定类型。
链接器通过分析代码路径并删除它认为未使用的引用来工作。如果您使用依赖注入,链接器将无法理解它需要保留哪些引用,因此这可能需要一些时间,但它可以大大减少应用程序的大小,而且您只需执行一次。您也可以对 iOS 执行上述相同步骤。
Bonus 确保在构建选项中选中 "Strip native debugging symbols"。它是默认设置的,但一些心怀不满的同事可能没有选中它。
其他资源:
Linking on iOS
在android工作室的build.gradle文件中,我们可以使用shrinkresources
设置为true
来缩小我们的app.Also 也可以使用 minifyenabled
和 proguard
选项。
但是在 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.
- 右击android项目
- 下"Build"select"Android Build"(或"iOS Build")
- Select "Link All" 用于 "Linker behavior" 下拉列表
确保这仅适用于 Release 或 Ad-Hoc 配置,具体取决于您的分发策略。
链接器配置工作流程:
- 运行 物理设备上的应用程序以实现所需配置 (Release/Ad-Hoc)
- 测试功能直到 "TypeInitializationException" 或发生类似异常
- 将type/field/method添加到配置文件
- 冲洗并重复直到应用稳定
如果不喜欢配置文件,也可以使用PreserveAttribute。如果链接器在您的一个 PCL 中剥离了 类,而您无法访问此属性,您可以在那个名为 PreserverAttribute 的 PCL 中定义您自己的属性,因为链接器是只是寻找具有该名称的属性,不需要特定类型。
链接器通过分析代码路径并删除它认为未使用的引用来工作。如果您使用依赖注入,链接器将无法理解它需要保留哪些引用,因此这可能需要一些时间,但它可以大大减少应用程序的大小,而且您只需执行一次。您也可以对 iOS 执行上述相同步骤。
Bonus 确保在构建选项中选中 "Strip native debugging symbols"。它是默认设置的,但一些心怀不满的同事可能没有选中它。
其他资源:
Linking on iOS