Xamarin生成的APK大小分析

原文: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:纯属个人理解,错误难免

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

时间: 2024-12-28 05:10:02

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

用eciplise生成的apk文件,安装后,运行闪退

问题描述 用eciplise生成的apk文件,安装后,运行闪退 用eciplise生成的apk文件,安装后,运行闪退,是什么原因呢 解决方案 eclipse生成.apk文件安装到手机 解决方案二: 有报错吗?调试下. 解决方案三: logcat中的信息贴出来看一下 解决方案四: 应该是程序的错误,看下log 解决方案五: 问题以解决,是自己程序里的问题,谢谢大家的帮助

替换eclipse生成的apk图标

问题描述 替换eclipse生成的apk图标 替换了drawable-hdpi,drawable-mdpi,drawable-ldpi目录下的图标,图标还是系统默认的 解决方案 替换图标的时候,需要把ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi 下的所有的logo替换掉. 你的有可能使用的是xhdpi目录下的图标,所以没变化, Manifest引入的时候名字不要错. 解决方案二: 替换drawable下的,估计你的手机分辨率没有适配的,用的是drawable的 解决方案

cocos2d项目用emplise生成了apk,但在安卓手机上点击运行提示项目已停止

问题描述 cocos2d项目用emplise生成了apk,但在安卓手机上点击运行提示项目已停止 emplise报错: 11-30 12:50:54.659: D/AndroidRuntime(30731): Shutting down VM 11-30 12:50:54.659: W/dalvikvm(30731): threadid=1: thread exiting with uncaught exception (group=0x4102aac8) 11-30 12:50:54.669:

python下如何让web元素的生成更简单的分析_python

1. 引用css.这可能是最常见的做法了,对一些特定的元素定义特定的样式.那么使用它,你需要在HTML 页面中加入<link>标签. 2. 引入js.许多特效也可以通过javascript来进行处理,比如动态显示效果,或对元素进行封装.使用 它你需要在HTML页面加入<script>标签,必要时还要加一些javascript代码. 3. HTML元素.需要设定一些特殊的属性,比如class=某个属性.这块还相对简单. 因此从上面的分析可以看出,在通常情况下,加入一个好看的web元素

R12.2 预克隆生成FMW_Home.jar大小异常

背景:客户生产环境上有两套ebs R12.2环境prod和uat,准备克隆prod环境到另外服务器test环境中. 发现问题:在执行预克隆的时候,没有报任何错误,正常结束退出,但是感觉花费的时间比以往短了些.于是去看了下生成的FMW home压缩文件,果然发现这个文件的大小有问题. 正常的话,这个文件的大小是2.8GB左右.现在只有600MB,说明这个文件生成是异常的,但是,我从preclone的日志里,是看不到任何错误的. 灵光一闪:这个FMW_home也是oracle home,应该被记录在

每周论文清单:高质量文本生成,多模态情感分析,还有一大波GAN | PaperDaily #26

[ 自然语言处理 ] Multi-channel Encoder for Neural Machine Translation@Synced 推荐Neural Machine Translation 文章提出了一种多信道编码器(MCE)模型,可改进传统神经机器翻译(NMT)模型单一信道编码的缺点.该模型在中英翻译上的 BLEU 值提升了超过 6 个百分点,在英法翻译上用单层模型取得了可与深层模型媲美的效果. 论文链接https://www.paperweekly.site/papers/1342

Oracle date如何比较大小分析_oracle

Sql代码 复制代码 代码如下: -- Created on 2010/04/17 by NAN declare -- Local variables here i integer; v_date1 DATE; v_date2 DATE; begin -- Test statements here v_date1 := SYSDATE; v_date2 := to_date( '2008-09-08'); IF v_date1 > v_date2 THEN dbms_output.put_lin

Xamarin开发Android应用打包apk

原文:Xamarin开发Android应用打包apk Visual Studio中用Xamarin开发Android应用,生成apk文件有3种方法 1.debug时,代码目录下bin\Debug中会自动生成调试用***-Signed.apk文件,但是文件Size非常大,不建议使用. 2.Release时,"部署"勾选√,生成--部署解决方案后,代码目录下bin\Release中会自动生成部署用***-Signed.apk文件,文件Size比较小. 3.自己打包,工具--Publish

【Xamarin 跨平台机制原理剖析】

原文:[Xamarin 跨平台机制原理剖析] [看了请推荐,推荐满100后,将发补丁地址]   Xamarin项目从喊口号到现在,好几个年头了,在内地没有火起来,原因无非有三,1.授权费贵 2.贵 3.原生态Java开发Android的越来越多,人工费用成本降低. 上面说的3条,都跟钱相关,不占技术边,看起来跟本文的标题严重不符.但是,细细看来,如果这个产品的圈子打不开,再牛的技术,也是枉然.因为技术是在不断推进的, 性能问题,技术问题,实现问题,等等都可以随着时间的推动去解决,但是,Xamar