Xamarin生成的APK大小分析

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

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

如下是针对Android平台而言(Xamarin.Android和Xamarin.Forms)、Xamarin Studio(VS也差很少)


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

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


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文件拿给别人安装,结果显而易见android

而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每次调试运行的速度会快不少,因此推荐在调试的时候勾选,会缩短部署时间。ui

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


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

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

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


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

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

--------------------------------------------------------------------------------------------------------------------------------------code


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:纯属我的理解,错误不免

相关文章
相关标签/搜索