Xamarin - apk应用程序大小

My *_*per 11 xamarin.android xamarin xamarin.forms

因此,在使用Xamarin.Forms开发应用程序的所有艰苦工作之后,当我今天尝试创建发布版本时,我惊讶地看到应用程序大小为~25MB - ~31MB(在SDK Only Linking,ProGuard,Creating apk之后)为每个abi).我的资源文件夹仅以KB为单位.在调试模式下,apk实际上只有5MB,很高兴看到它.我后来意识到这是因为我们不应该在发布模式中使用"使用共享运行时"选项.

然后我尝试创建一个空白的Xamarin.Android应用程序,但是每个abi的链接SDK和用户程序集,ProGuard,APK的发布版本仍然是~8MB到~13MB.

根据以下链接,Hello World应用程序的最小大小为2.9MB,但是我无法创建这样的大小.https://developer.xamarin.com/guides/android/advanced_topics/application_package_sizes/

对于我的应用程序和我创建的空白应用程序,必要的dll似乎很高(例如mscorlib.dll是2.2mb等,其中链接后链接说它将变为1 mb)这是我看到的我的程序集文件夹之后提取apk 在此输入图像描述

在最近的一次微软技术会议上,我碰巧知道"9 News"应用程序(链接如下)是使用xamarin构建的,创作者出现在舞台上.但是我对它的应用程序大小感到惊讶.它只有5.85 MB.我不确定如何实现这一目标?

任何人都可以帮助我吗?

https://play.google.com/store/apps/details?id=nineNewsAlerts.nine.com

我也很想知道微软是否会采取措施来改善应用包的尺寸?或者,如果他们将.NET核心带到xamarin,这会得到解决吗?

小智 11

Xamarin Android APK文件的大小比平常大,因为它们包含Xamarin库,可将C#代码转换为Java代码,在Android OS中运行.

使用以下选项,您可以减小APK大小:

  • 配置:活动(发布).
  • 平台:活动(任何CPU).这些是为Google Play商店构建APK所必需的.
  • 使用共享运行时:false.如果将其设置为true,则APK将使用Mono Runtime执行.通过USB调试时会自动安装Mono Runtime,但不会在Release APK中安装.如果设备中未安装Mono Runtime且此版本在Release APK中设置为true,则应用程序将崩溃.
  • 每个选定的ABI生成一个包(.apk):false.出于兼容性原因,为尽可能多的平台创建APK.
  • 启用Multi-Dex:true,但如果您的应用程序不是非常复杂(即,少于65536个变量或方法,请参见此处),您可以将其设置为false .
  • 启用开发人员检测(调试和分析):对于Release APK,为false.
  • 链接:SDK和用户程序集.这将使Xamarin编译器从SDK和您的代码中删除所有未使用的类,从而减小APK大小.
  • 支持的体系结构:出于兼容性原因选择all.

这是一个打印屏幕示例:

在此输入图像描述

  • 道歉。然而,我实际上知道大多数/所有这些,因为人们可以从我的问题中读到。我的问题集中在两个链接/点上。1. 为什么 hello world 应用程序不是文档所说的 2.9 MB?2. 想法/关于“9 条新闻”如何达到这种规模的任何意见?(链接在我上面的问题中) (2认同)

Max*_*lin 6

这是来自 Google Play 控制台的 Xamarin.Forms 应用程序大小的统计信息。一旦我认真对待这个主题并远离默认的 Xamarin 设置,您就可以看到它下降了多少:

在此处输入图片说明

除了在谷歌搜索主题时通常会发现的措施(链接、关注自己的资源、每个 ABI 的 APK 等),这里有一些我自己的发现和怪癖:

  • 启用~1MB 的托管 TLS 提供程序- 默认情况下,您在项目选项 -> Android 选项 -> 高级按钮 -> SSL/TLS 实施下拉列表中选择了“本机 TLS 1.2”选项。托管 TLS 仅为 1.1 版,可能是某人的问题
  • 升级到 Xamarin.Forms 4.1减少了大约 1MB(与 3.x 和 4.0 相比)-他们删除了一些未使用但引用的 Android 兼容性库
  • 启用 aapt2打包程序仅为 App Compat 库资源(Xamarin.Forms 引用和包含的资源)减少约 1MB。如果你有很多自己的资源,可能会给更多。您可以通过在 Android 的 .csproj 文件中使用以下额外参数,让 aapt2 进一步剥离资源:

    <PropertyGroup>
       <AndroidUseAapt2>true</AndroidUseAapt2>
       <AndroidAapt2LinkExtraArgs>--no-version-vectors -c en-rUS</AndroidAapt2LinkExtraArgs>
    </PropertyGroup>
    
    Run Code Online (Sandbox Code Playgroud)
  • 打开 D8 和 R8为小型 Xamarin.Forms 应用程序(项目选项 -> Android 选项或 .csproj)提供了大约 1MB 的空间

    <PropertyGroup>
        <AndroidDexTool>d8</AndroidDexTool>
        <AndroidLinkTool>r8</AndroidLinkTool>
    </PropertyGroup>
    
    Run Code Online (Sandbox Code Playgroud)
  • 与更新的版本(例如 1.68.0)相比,SkiaSharp 1.60.3为每个架构提供了约 2MB 的经济性。值得留意依赖项及其版本使您的 APK 膨胀。

  • 禁用 AoT(如果您之前启用了它,默认情况下它是关闭的)可以轻松地将您的应用程序大小减少一半。开启 Ahead-of-Time 复杂功能可能是提高应用程序启动性能的故意步骤。有一个明显的权衡,要么你使用 AoT 并拥有巨大的应用程序大小,要么你没有它并在应用程序启动缓慢时保持最小的大小。决定权衡时要考虑的要点之一......大多数 ASO 文章(以及 Google Play 控制台)都提到应用小尺寸以增加安装转化率是多么重要。很明显,在浏览 Google Play 时显示的是应用下载大小,而不是应用启动时间。

  • 调整 AoT以最小化其占用空间,在 .csproj 中为您的发布配置添加以下内容:

    <PropertyGroup>
        <AotAssemblies>true</AotAssemblies>
        <AndroidAotAdditionalArguments>no-write-symbols,nodebug</AndroidAotAdditionalArguments>
    </PropertyGroup>
    
    Run Code Online (Sandbox Code Playgroud)
  • 做部分 AoT。默认情况下,AoT 会检查项目解析的所有程序集,并在 APK 的 /lib 目录中添加 30 多个 .so 文件。有许多应用程序兼容库、BCL 和系统库。人们可能希望控制哪些程序集要通过 AoT,哪些程序集要忽略,以便在性能和应用程序大小之间找到一个最佳点。好吧,没有标准功能这样的东西(至少我没有找到)。你可以通过对Xamarin.Android.Common.targets进行更改来体验Xamarin 构建过程- 你可以在此处找到有关此过程的一些见解。我通过 AoT 仅使用三个库(1 个我自己的 XF 共享 UI 库和 2 个 XF 库)找到了我的中庸之道:

    <_ResolvedUserAssemblies2 Include="Tmp/android/assets/Xamarin.Forms.Core.dll;Tmp/android/assets/Saplin.CPDT.UICore.dll;Tmp/android/assets/Xamarin.Forms.Platform.Android.dll;" />

PS:启用链接(SDK 和用户程序集)- 如果您广泛使用 XAML 和绑定,您会发现应用程序损坏的可能性为 90%。将您自己的库添加到链接器异常 - 承载您的 UI、您创建的任何类库以及可能使用反射的 XF 类库。

PPS:通过我的缩小工作、部分 AoT 和使用异步/延迟 Xamarin.Forms UI 加载(这里这里)我实现了应用程序大小的显着减小(见上图),应用程序启动时间显着改进(在诺基亚 N1 上测量到亚行):

  • 无 AOT,同步 UI(毫秒):3613、3586、3576
  • 部分 AOT,异步 UI(毫秒):2202、2255、2258


Pra*_*rya -1

我理解您在创建移动应用程序时遇到的问题,您总是希望创建小尺寸的 apk 文件,以便用户轻松下载和使用。为此,请尝试减少项目中的代码重复并减小所有图像的大小。使用以下步骤,它将帮助您减小 apk 的大小。右键单击机器人属性。打开 Android 选项 -> 单击打包,然后选中为每个选定的 ABI 生成一个包 (.apk)。还要检查 Multi-Dex 和 proguard 选项。现在转到“链接器”选项,在“链接”下拉列表下选择“仅 SDK 程序集”。现在转到“高级”选项卡 - 检查“支持的架构”下的所有选项。保存所有设置并使您的项目保持在发布模式干净并构建您的项目,然后您可以创建减小大小的 apk 文件。使用以下链接了解更多信息。

http://motzcod.es/post/112072508362/how-to-keep-your-android-app-size-down