原文: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. JavaWeb核心编程之(四.1)JSP

    JSP简介: JSP是简化Servlet编写的一种技术, 它将Java代码和HTML语句混合在一个文件中编写, 只对网页中药动态产生的内容采用Java代码来编写, 而对固定不变的静态内容采用普通的静态 ...

  2. media queries(练习)

    根据不同的窗口尺寸来选择使用不同的样式的示例 MAIN SUB 01 SUB 02

  3. 运用Detours库hook API(原理是改写函数的头5个字节)

    一.Detours库的来历及下载: Detours库类似于WTL的来历,是由Galen Hunt and Doug Brubacher自己开发出来,于99年7月发表在一篇名为<Detours: ...

  4. 克拉夫斯曼高端定制 刘霞---【YBC中国国际青年创业计划】

    克拉夫斯曼高端定制 刘霞---[YBC中国国际青年创业计划] 克拉夫斯曼高端定制 刘霞

  5. Python学习笔记9-Python 链接MySql数据库

    Python 链接MySql数据库,方法很简单: 首先需要先 安装一个MySql链接插件:MySQL-python-1.2.3.win-amd64-py2.7.exe 下载地址:http://dev. ...

  6. Spring、Struts2+Spring+Hibernate整合步骤

    所使用的Jar包: Hibernate: Spring(使用MyEclipse自动导入框架功能) Struts2: 注解包和MySql驱动包: 1.配置Hibernate和Spring: <be ...

  7. mvc mvp mvvm区别

    1 mvc是有视图(view),控制器(controller),模型(model)组成 view(用户界面) controller (业务逻辑)            model(数据存储) 接受指令 ...

  8. 调magento自定义模板发邮件

    1. 设置邮件模板 <global> <template> <email> <custom_email_template1 module="Samp ...

  9. oracle 命令创建用户 、授权、数据库导入、导出

    最近在使用oracle,经常要导入导出数据,命令很简单,却经常忘记,所以记下来.. drop user yfplss cascade;--登录system用户删除已存在的用户名,该用户下的所有东西都被 ...

  10. C#的Split用法

    1.用字符串分隔: using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray= ...