博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xamarin生成的APK大小分析
阅读量:5899 次
发布时间:2019-06-19

本文共 2079 字,大约阅读时间需要 6 分钟。

原文:

刚接触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,那么在所有设备都可以运行; 如果项目只包含了 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:纯属个人理解,错误难免

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

你可能感兴趣的文章
【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
查看>>
linux 将大文件分成小文件
查看>>
CCNA- 距离矢量路由协议学习
查看>>
企业实践用户邮箱导入/导出(第2部分)
查看>>
如何学习Linux命令-初级篇
查看>>
从Oracle Public Yum为Oracle Linux建立本地的Yum源
查看>>
在 SELECT 查询中使用表表达式
查看>>
静态路由和默认路由
查看>>
关于阿里开发者招聘节 |这5道笔试真题 你会吗!???
查看>>
C#的异常处理机制
查看>>
vsftp:500 OOPS: could not bind listening IPv4 sock
查看>>
Linux安装BTCPayServer并设置比特币BTC和Lightning支付网关
查看>>
Python 的 with 语句
查看>>
mysql安装,远程连接,以及修改密码
查看>>
Mybatis查询返回Map类型数据
查看>>
java的深拷贝与浅拷贝
查看>>
程序员如何提高工作效率
查看>>
promise
查看>>
将Java应用部署到SAP云平台neo环境的两种方式
查看>>
==与equal的区别
查看>>