Xamarin生成的APK大小分析

简介: 原文: Xamarin生成的APK大小分析 刚接触Xamarin都会被Xamarin的售价吓一跳,另外就是它生成的APK大小,官方也有相关的说明,这里加上自己的理解同意讲解下: 以下是针对Android平台而言(Xamarin.
原文: 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:纯属个人理解,错误难免



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

目录
相关文章
|
数据安全/隐私保护 Android开发
2023安卓逆向 -- 某合伙apk登录加密分析
2023安卓逆向 -- 某合伙apk登录加密分析
354 0
|
数据安全/隐私保护 Android开发
2023安卓逆向 -- 某合伙apk登录加密分析
2023安卓逆向 -- 某合伙apk登录加密分析
292 0
|
安全 Java 数据安全/隐私保护
【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 )
【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 )
710 0
【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 )
|
Java C# 开发工具
C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码
原文:C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码 前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.
1907 0
|
安全 算法 Android开发
通过Android逆向之签名算法分析看apk安全防护
android安全问题日益验证,作为一名移动安全渗透人员,有时需要对移动apk进行全面的渗透测试,而不能仅仅局限于apk本身,此时往往就需要结合静态分析和动态分析进行。 静态分析在不运行代码的方式下,通过观察进行分析发现;动态分析在运行代码的情况下,通过跟踪分析相关的内存,如寄存器内容,函数执行结果,内存使用情况等等,分析函数功能,明确代码逻辑,挖掘可能存在的漏洞。
1847 0
|
XML Java Android开发
Xamarin android如何反编译apk文件
Xamarin android 如何反编译 apk文件 这里推荐一款XamarinAndroid开发的小游戏,撸棍英雄,游戏很简单,的确的是有点大。等一下我们来翻翻译这个Xamarin Android 开发的小游戏 下载链接:http://shouji.
1721 0
|
安全 Java Android开发
Android5.1.1 - APK签名校验分析和修改源码绕过签名校验
本文主要分享APK签名校验分析和绕过签名校验源码修改点。
5502 0
|
C#
【Xamarin挖墙脚系列:如何从一个Apk程序转化为Xamarin的程序】
原文:【Xamarin挖墙脚系列:如何从一个Apk程序转化为Xamarin的程序】 工欲善其事必先利其器:工具下载:http://pan.baidu.com/s/1skxjwgH 接下来,我用个小的应用,如何反编译,如何到Xamarin工程的过渡实现! ................ 1 使用工具将apk 反编译 2 将apk的自描述文件内容+布局文件+资源文件复制到相应的目录下 3 对代码进行转换 dex->smali->java->C#,转换后  的代码需要手工改正。
1373 0
|
Android开发
Xamarin开发Android应用打包apk
原文:Xamarin开发Android应用打包apk Visual Studio中用Xamarin开发Android应用,生成apk文件有3种方法 1、debug时,代码目录下bin\Debug中会自动生成调试用***-Signed.apk文件,但是文件Size非常大,不建议使用。
1734 0