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

标签 android xamarin proguard publishing shrinkresources

在 android studio 的 build.gradle 文件中,我们可以使用 shr​​inkresources 设置为 true 来缩小我们的应用程序。也可以使用 minifyenabledproguard 选项也是如此。

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

我在我的应用程序中使用了混淆器,因为它在 xamarin 文档中提到。但没有找到任何用途(我的意思是我的应用程序大小没有减少)。我的简单应用程序大小约为 18Mb。如果有人有在 xamarin 中使用 proguard 的经验,请在此处粘贴示例文件并说明您是如何完成此操作的。这样其他人也可以受益。

最佳答案

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

  1. 右键点击android项目
  2. 在“构建”下选择“Android 构建”(或“iOS 构建”)
  3. 为“链接器行为”下拉列表选择“全部链接”

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

链接器配置工作流程:

  1. 在物理设备上运行应用以获得所需的配置(发布/临时)
  2. 测试功能直到出现“TypeInitializationException”或类似异常
  3. 在配置文件中添加类型/字段/方法
  4. 冲洗并重复直到应用稳定

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

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

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

其他资源:
Linking on iOS

Linking on Android

关于android - xamarin 中的 shrinkresource、proguard 等不会减小我的应用程序大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37792219/

相关文章:

java - 如何从 Android 中的 Parse Server 获取字符串

android - Proguard 和 Google SDK/Facebook SDK 缺少方法

c# - Xamarin - 在没有硬件加速支持的笔记本电脑上部署

android - Adb 读取警报对话框的内容

java - 无法更新安卓应用

java - Canvas.drawLines 显示不连续的线段

c# - 当我离开页面时,会调用控件 OnElementChanged() 吗?

java - Android InflateException - 膨胀类 com.google.vr.sdk.base.GvrView 时出错

android - 如何使用 Dexguard 混淆 list 文件中引用的类?

proguard - 如何抑制来自 ProGuard 的 'Maybe this is program method' 警告