原文:Xamarin生成的APK大小分析

刚接触Xamarin都会被Xamarin的售价吓一跳,另外就是它生成的APK大小,官方也有相关的说明,这里加上自己的理解同意讲解下:

以下是针对Android平台而言(Xamarin.Android和Xamarin.Forms)、Xamarin Studio(VS也差不多)

1.Xamarin生成的APK是不是比原生的打?

答案是肯定的,Xamarin.Android的运行是依靠.net平台,而不是java虚拟机,apk里面必须将相关的运行库打包进去.

2.怎么获取可发行的apk?

Xamarin的apk分为debug和release之分,有的人在项目的bin/debu/目录下发现生成的apk文件只有1-2M,那时候肯定心理还赞扬了xamarin一番,但那并不是可发行的安装包,前面说过,Xamarin.Android的运行必须依靠.Net运行库,debug下生成的apk是没有带运行库的,所以会非常小,你调试的时候IDE会自动帮你安装一个Mono Runtime的apk,没错,这就是运行库,debug下的apk运行必须依靠这个几十M的大东西才能运行。所以千万不要直接直接将debug下的apk文件拿给别人安装,结果显而易见。

而bin/release/文件夹下才能真正的apk,注意:apk文件生成必须调试或者run as打包后才会有,如果只是build,是不会有的

3.为什么我生成的release 版本的apk文件有20-30M之巨

看下面

4.Xamarin Studio中影响apk大小的因素:

1).Use shared Mono runtime

这个东西的作用下面的解释也是很清楚了,快速部署(Fater delayment during development),如果开发过原生android的,会发现xamarin每次调试运行的速度会快很多,所以推荐在调试的时候勾选,会缩短部署时间。

但是release时千万不要手贱勾选这个这个东西(release是默认是不勾选的),然后你的apk噌噌噌的达到了20多M。

2).Embed assemblies in native code(Enterprises版本的xamarin才能勾选)

VIP功能,默认的Xamarin.Android是会将你所有引用的dll文件直接方法哦/asserts/文件夹,所以你用解压你的apk,可以发现你全部引用的dll文件.......

勾选该选项后,xamarin会将你引用的dll文件使用工具(打包的时候会弹出的黑框框,那就是了)全部压缩成一个.so文件,并放到apk的/lib/...文件夹中,这个步骤会视你引用的dll多少减少apk大小

3).Enable developer instrmentation.......

这个更加明确了,都叫你别在release时勾选了,跟勾选相比大概减少几百KB

--------------------------------------------------------------------------------------------------------------------------------------

4).Linker behavior:

这个上面也是有解释的,大概意思:会在编译的时候将未引用的类库啊、资源啊移除,来减少apk大小;但是如果你使用了反射机制,不要link all assemblies,否则可能你要用到的资源已经被IDE剔除了。

所以,一般情况下,使用link SDK assemblies only就行了

5.Supportes ABIS

通俗的将就是支持的CPU类型,关于android版本与指令集的关系:

起初android1.6:只支持armv4与armv5te指令集。

到了android2.0:增加了支持arm-vfp,armv6,armv6t2指令集。

到了android2.2:增加支持armv7-a指令集。

引用自:跳转

如果项目只包含了
armeabi,那么在所有Android设备都可以运行; 如果项目只包含了
armeabi-v7a,除armeabi架构的设备外都可以运行; 如果项目只包含了
x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的; 如果同时包含了
armeabi, armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大。

引用自:跳转

结论:现在一般的手机都是android4.0以上的系统,CPU也都支持 armeabi-v7a,只要不是要支持太过老旧的设备,可以只勾选armeabi-v7a(默认勾选),如果要支持intel
CPU的设备,可以也勾选X86

这个选项对apk大小的影响最大,每种类型占用的最少1M的大小

PS:纯属个人理解,错误难免

版权声明:本文为博主原创文章,未经博主允许不得转载。

Xamarin生成的APK大小分析的更多相关文章

  1. 6.关于Xamarin Android对APK包大小的处理

    降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 对于apk 包的大小大家都是很敏感的,虽然现在安卓手机的性能和存储越来越厉害了.本着能少一点是一点的态度,我们还是要深入理 ...

  2. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯,前面讲 ...

  3. Android性能优化-减小APK大小

    前言 用户通常会避免下载比较大的应用,特别是连接到2G和3G网络,或者按流量收费的设备.这篇文章描述了如何减小apk的大小,帮助你让更多的用户下载你的app. 一 理解APK的结构 在讨论如何减小ap ...

  4. 构建-13 Analyzer APK文件分析

    官方文档 使用APK Analyzer分析您的构建  [Analyze your build with APK Analyzer] Android Studio包含一个APK分析器,可在构建过程完成后 ...

  5. - Gradle 翻译 Analyzer APK文件分析 MD

    目录 目录 APK文件分析 使用 APK 分析器分析您的编译版本 查看文件和大小信息 查看 AndroidManifest.xml 查看 DEX 文件 过滤DEX文件树视图 加载 Proguard 映 ...

  6. Android开发——减小APK大小

    0. 前言 APK的大小对APP的加载速度,使用内存大小和消耗功率多少有一定影响.如何减小APK的大小对于Android开发者是一个永恒的话题. 查阅了很多相关资料,并将其做了删减以及总结.本文原创, ...

  7. 解决 unity 生成 android apk read Resources

    http://www.cnblogs.com/solq/archive/2012/05/21/2511522.html TextAsset t = (TextAsset)Resources.Load( ...

  8. 程序性能优化之APK大小优化(六)下篇

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将继续从微信资源混淆AndResGuard原理来介绍AP ...

  9. 程序性能优化之APK大小优化(六)上

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将继续从APK瘦身来介绍APK大小优化:文章主要内容从理 ...

随机推荐

  1. Qt编程学习网站

    http://blog.csdn.net/k122769836/article/details/8637677 QT - little_su - 博客频道 - CSDN.NET Qt - 1+1=2 ...

  2. (转)对mysql explain讲的比较清楚的

    转自:http://www.blogjava.net/persister/archive/2008/10/27/236813.html 在 explain的帮助下,您就知道什么时候该给表添加索引,以使 ...

  3. BigDecimal类对象的使用详解

    双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行 ...

  4. input submit button iOS webview browser diffrence

    最近做项目用到了webview, 在浏览器中显示正常的input[type="submit"]按钮, 加载到webview中后css里的设置都失效了, webview里渲染的是最原 ...

  5. 安卓使用spinner控件和pull解析实现全国省市县的三级联动

    实现该功能主要有两个难点: 1.XML文件的Pull解析.由于XML文件的结构较为复杂,所以解析时要注意,划分XML文件的结构,根据结构建立相应的和集合.本例中需要建立三个类和三个对象.三个类分别为, ...

  6. KDE子项目一览 good

    https://www.kde.org/applications/development/ https://www.kde.org/applications/graphics/ https://www ...

  7. CreateFile函数详解(确实很详细)

    CreateFile The CreateFile function creates or opens the following objects and returns a handle that ...

  8. C++ DLL导出函数的两种方法(导出序号那种方法,别人看不到函数名)

    第一种就直接导出函数名如下代码: #ifdef__cplusplus #define TEXPORT extern "c" _declspec(dllexport) #dlse # ...

  9. Asp.Net MVC4配置Ext.Net

    首先,下载MVC用的DLL包(Ext.NET.MVC.Pro.2.2.0.zip).讲DLL文件拷贝到工程bin目录下,引用进工程. 第二步,配置Views文件夹下的web.config文件(具体文字 ...

  10. 设置高级的Logstash 管道

    设置高级的Logstash 管道: 一个Logstash 管道在很多实用例子有一个或者多个输入,filter,和output 插件. 本节中 创建Logstash 配置文件来指定那些插件和讨论每个插件 ...