Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何减小包装尺寸_Android_Xamarin.android_Xamarin_Mvvmcross - Fatal编程技术网

Android 如何减小包装尺寸

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

我已经使用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(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)(110KB)

  • 'res'文件夹(大小:磁盘上451KB大小:816KB)-由于某些文件为1KB,它们会产生碎片,因此实际大小与磁盘上的大小明显不同

  • 所有PNG文件(大小:磁盘上325KB大小:磁盘上496KB)
为了减少编译的.apk的大小,我可以做些什么


我发现它相当大。

使用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的程序)中工作。有关更多信息,请参阅。