Android 如何减小包装尺寸
我已经使用Xamarin实现了一个Android应用程序: .apk的大小13.6MB,其中:Android 如何减小包装尺寸,android,xamarin.android,xamarin,mvvmcross,Android,Xamarin.android,Xamarin,Mvvmcross,我已经使用Xamarin实现了一个Android应用程序: .apk的大小13.6MB,其中: 配置:发布 链接:仅Sdk程序集 支持的架构:armeabi、armeabi-v7a 以下是从编译的.apk中获取的主要组件的大小概述: (这些是未压缩的大小,我将.apk解压到一个目录,并在Windows资源管理器中查找文件): classes.dex(1.23KB) 两个libmonodroid.iso(armeabi+armeabi-v7a)(5.58 MB) 所有Mono.xxx.dll
- 配置:发布
- 链接:仅Sdk程序集
- 支持的架构:armeabi、armeabi-v7a
- classes.dex(1.23KB)
- 两个libmonodroid.iso(armeabi+armeabi-v7a)(5.58 MB)
- 所有Mono.xxx.dll(3.89MB)
- mscorlib.dll(1.51MB)
- 所有系统.xxx.dll(2.56 MB)
- 我的应用程序集(Droid应用程序+一个PCL)(204 KB)
- MvvmCross+插件(599KB)
- Xamarin ActionbarSherlock(348KB)
- ZXing.monoard(413KB)
- PCL Newtonsoft.Json(398KB)
- PCL Microsoft HTTP客户端库(System.Net.HTTP.dll)
我发现它相当大。使用linking:Sdk+用户程序集,并经历使用Preserve属性标记类的困难过程(请参阅)。您可以在android日志中检查应用程序崩溃时缺少的类。它应该只是反射或使用IoC动态使用的类
您还可以创建两个单独的软件包,一个仅使用armeabi(对于非常旧的设备),一个使用armeabiv7a,另一个使用x86(当前您的应用程序将在x86 android设备上崩溃)。Google play支持3个具有不同功能的独立软件包(别忘了更改每个软件包清单文件中的功能)你在.apk中包含图标或飞溅屏幕了吗?有些库对于Android的库是多余的,比如Newtonsoft.Json和System.Net.Http。@joostmakaa问得好;我更新了我的list@CoreyOgburn很好,但我使用的是PCL版本的库,它们由我的PCL程序集引用;我更新了我的列表。13MB是一个mean个普通Xamarin.Android应用程序的大小。在Android上,我从未获得低于8MB的内存。在iOS上,我获得了4MB的内存。非常棒的答案。我已经意识到这些选项。第二个选项看起来很简单,而且确实可行。第一个选项,但我认为它不是那么容易。想象一个非常具体的类,它只在未来的特定时刻和场景中使用应用程序。需要彻底测试,并对应用程序中的每个新功能或修改重复测试。在将您的评论标记为答案之前,我将再等待一段时间。感谢您,我想知道为什么在使用Sdk+用户程序集时,链接器无法自己知道正在使用的类。如果太多,Hit知道正在使用的类,但不知道正在使用的类at是动态加载的,或者是通过反射实例化的。它不知道通过反射调用的方法。你的应用程序中应该没有太多方法。但确实,这是一个艰难的过程。是的,动态加载的代码可能有点超出链接器的范围,但可能Xamarin或其他人编写了一个工具?我想这意味着能够解析IL以捕获动态加载。我自己可能不会做太多的动态加载,但我正在使用的库可能是。如果您使用mvvmcross或IoC,则可以使用动态加载。动态程序的完整静态分析仅在函数语言(如F#或任何基于lambda的程序)中工作。有关更多信息,请参阅。