所以,在使用Xamarin.Forms开发应用程序的所有艰苦工作之后,当我今天尝试创建发布版本时,我惊讶地发现应用程序大小约为25MB - ~31MB(仅限SDK链接后,ProGuard) ,为每个abi创建apk)。我的资源文件夹仅以KB为单位。在调试模式下,apk实际上只有5MB,很高兴看到它。我后来意识到这是因为选项"使用共享运行时"我们不应该在发布模式中使用它。
然后我尝试创建一个空白的Xamarin.Android应用程序,但发布版本使用Linking SDK&用户组件,ProGuard,APK每个abi仍然是~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新闻" app(链接如下)是使用xamarin构建的,创作者出现在舞台上。但是我对它的应用程序大小感到惊讶。它只有5.85 MB。我不确定如何实现这一目标?
任何人都可以帮助我吗?
https://play.google.com/store/apps/details?id=nineNewsAlerts.nine.com
我也很想知道微软是否会采取措施来改善应用包的尺寸?或者,如果他们将.NET核心带到xamarin,这会得到解决吗?
答案 0 :(得分:11)
Xamarin Android APK文件的大小比平常大,因为它们包含Xamarin库,可将C#代码转换为Java代码,在Android OS中运行。
使用以下选项,您可以减小APK尺寸:
这是一个打印屏幕示例:
答案 1 :(得分:1)
这是我在Google Play控制台中Xamarin.Forms应用大小的统计信息。您会发现,一旦我认真对待该主题并离开了默认的Xamarin设置,它就会下降多少:
除了谷歌搜索主题时通常发现的措施(链接,关注自己的资源,每个ABI的APK等)之外,还有一些我自己的发现和怪癖:
启用aapt2 打包程序仅会使App Compat libs资源(Xamarin.Forms引用和包含的资源)减少约1MB。如果您拥有许多自己的资源,可能会付出更多。您可以使用aapt2在Android的.csproj文件中使用以下额外的参数来进一步精简资源:
<PropertyGroup> <AndroidUseAapt2>true</AndroidUseAapt2> <AndroidAapt2LinkExtraArgs>--no-version-vectors -c en-rUS</AndroidAapt2LinkExtraArgs> </PropertyGroup>
打开D8和R8 会为小型Xamarin.Forms应用(项目选项-> Android选项或.csproj)提供另外的〜1MB
><PropertyGroup> <AndroidDexTool>d8</AndroidDexTool> <AndroidLinkTool>r8</AndroidLinkTool> </PropertyGroup>
SkiaSharp 1.60.3 与较新版本(例如1.68.0)相比,每个体系结构可节省约2MB的内存。值得一提的是,依赖项及其版本会使您的APK膨胀。
禁用AoT (如果您之前启用了AoT,则默认情况下处于禁用状态)可以轻松地将您的应用程序尺寸缩小一半。提前启用复杂性可能是提高应用程序启动性能的有意步骤。有一个明显的权衡取舍,要么您使用AoT并拥有庞大的应用程序大小,要么没有它,并通过缓慢的应用程序启动将大小保持最小。决定权衡时要考虑的要点之一...大多数ASO文章(以及Google Play控制台)都提到减小应用程序尺寸以增加安装转换的重要性。显然,在浏览Google Play时,显示的是应用下载大小,而不是应用开始时间。
调整AoT 以最小化其占用空间,请在.csproj中为您的Release配置添加以下内容:
<PropertyGroup> <AotAssemblies>true</AotAssemblies> <AndroidAotAdditionalArguments>no-write-symbols,nodebug</AndroidAotAdditionalArguments> </PropertyGroup>
执行部分AoT 。默认情况下,AoT会遍历该项目解析的所有程序集,并在APK的/ lib目录中添加30多个.so文件。有许多应用程序兼容库,BCL和系统库。为了找到性能与应用程序大小之间的最佳结合点,人们可能希望控制要通过AoT放置的程序集以及要忽略的组件。嗯,没有这样的东西可以作为标准功能(至少我没有找到)。您可以通过更改 Xamarin.Android.Common.targets 来处理Xamarin的构建过程-您可以在here的过程中找到一些见解。通过AoT仅使用三个库(我自己的XF共享UI库和两个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;” />
P.S .:启用链接(SDK和用户程序集)-如果您广泛使用XAML和绑定,则有90%的机会发现应用程序损坏。将自己的库添加到链接器异常-XF类库,用于承载UI,您创建的任何类库以及可能使用反射的类库。
PPS:通过我的压缩工作,部分AoT和使用异步/延迟的Xamarin.Forms UI加载(here和here)付款,我的应用程序尺寸显着减小(参见上图)应用程序启动时间显着改善(通过ADB在诺基亚N1上测得):
答案 2 :(得分:-1)
我在您创建移动应用时了解您的问题,您一直想创建小尺寸的apk文件,用户可以轻松下载和使用。 为此尝试减少项目中的代码重复并减少所有图像大小。 使用以下步骤,它将帮助您减少您的apk大小。 右键单击机器人属性。 打开Android选项 - &gt; 单击包装然后检查每个选定的ABI生成一个包(.apk)。 检查Multi-Dex和proguard选项。 现在转到链接器选项,选择仅在链接下拉列表下的SDK程序集。 现在转到Advance选项卡 - 选中Supported architecture下的所有选项。 保存所有设置并保持项目处于发布模式清理并构建项目,然后您可以创建缩小的apk文件大小。 使用以下链接获取更多信息。
http://motzcod.es/post/112072508362/how-to-keep-your-android-app-size-down