大家好,感谢邀请,今天来为大家分享一下bitcode ios的问题,以及和为什么同一个应用ios比Android大那么多呢?的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
本文目录
为什么同一个应用ios比Android大那么多呢?iOS bitcode2021-08-18 ios flutter 打包bitcodeiOS - bitcode bundle could not be generated becauseios app 打包时的rebuild for bitcode 选项是什么意思为什么同一个应用ios比Android大那么多呢?首先下载时所用的IPA和APK都是ZIP文件,比较压缩前的体积才有意义,iOS上46M的QQ就是因为一点没压缩。其次反对最上面说是因为资源文件的问题,不是每家公司的美工都爱偷懒的。对于常见的应用,个人认为体积大的原因是是iOS上的可执行文件比Android上的字节码文件体积大太多,以常用的QQ为例。iOS上的可执行文件在未压缩前是44M,压缩后是20MAndroid版QQ的执行文件有点多这个是主文件这3个是库文件四个加起来,压缩前是20M,压缩后共11.4M,也就是说可执行文件的iOS版比Android版在压缩前多了24M,压缩后多了8M。再看看IPA文件和APK文件的体积:对比上面的可执行文件体积,可以说在手机QQ中,Android版的资源文件比iOS版多了一倍。针对占用应用体积大小的大户图片资源,来尝试回答下这个问题
.1.一个应用的影响大小因素很大一方面是来自于资源,而非代码,一般应用主要的是图片资料,比如图标,背景,图片等.2.iOS对于图片资源的要求严格一些、
2.1从屏幕密度上说:比如iOS上屏幕密度不同,得支持iPhone6Plus(3倍),iPhone6(2倍)iPhone3GS(1倍)那么你必须提供三种屏幕密度的图片资源,即:60x60,40x40,20x20,如果不提供的话,至少在iOS7之前则会显示文件缺失.这方面Android的机制复杂但宽松一些:说复杂是因为iOS的图片资源主要有屏幕密度作为区别(在iOS8中也加入了几个屏幕大小的类别),但是Android呢,你可以看到:根据Android关于资源的官方文档ProvidingResources上面所列举出来的Table2.Configurationqualifiernames.有18大项之多.不仅包含屏幕密度,长,宽,大小,比例,方向,语言,还包含其他N多情况.这是复杂的一面.按理来说,Android的应用应该比iOS的大才对.但是事实并不是这样的.因为Android的限制宽松一些.就拿屏幕密度来说,iOS的屏幕密度现在就三种,(如果不考虑老的设备的话,就算两种了)但是Android的设备,你知道千奇百怪,很多种--不过基本也在1倍,2倍,3倍,左右.如1.5倍,2倍,2.2倍,2.5倍等等.屏幕密度很多种,怎么办?Android在一开始设计的时候就提供了这样一个解决方法:即,如果1.5的设备,对应图片不存在,如果有2倍或以上的倍数的图片就用相应的图片,缩放后使用.上面文档关于屏幕密度的与资源的匹配说明如下:
Note:Usingadensityqualifierdoesnotimplythattheresourcesareonlyforscreensofthatdensity.Ifyoudonotprovidealternativeresourceswithqualifiersthatbettermatchthecurrentdeviceconfiguration,thesystemmayusewhicheverresourcesarethebestmatch.这样造成的一种情况就是:很多应用其实都是主要使用一份屏幕密度的图片资源,比如我看微信Android版本,有一个版本的资源图片主要集中在3倍上.这样一来,Android应用就比iOS设置少了两份屏幕密度的资源了.
在这里稍微总结一下:Android的图片资源查找规则是查找最匹配的一个,最终查找到有就不会出错.而iOS在iOS7之前呢,则就是查找匹配的资源.对于一般的图片,图标来说,从96x96压缩到72x72对外观应该没有什么影响(具体我没有测试过),所以导致Android中提供的资源少一些.
2.2上面说了屏幕密度,那屏幕大小呢?Android的屏幕大小也是众多的,反正我是说不清倒底有多少,但是iOS呢?我估计你稍微查找下资源,是可以穷举过来的.例如iPhone从3GS到5S屏幕的宽度都可以表述为320点宽对设计和实现上有这么一些影响:1.也许你已经知道,很多设计师一般是以iPhone为参考大小来设计的.这个时候举一个例子:假充我需要有一个设计上有一个背景,320x240,这样设计师,切出来之后,就是320x240再出一份,640x480的,iOS开发者,放上去直接可用-搞定,到面透气去了.Android开发者,这个时候就苦逼一点了,因为Android的屏幕宽度比例众多,怎么搞?一开始Android开发工具提供了一个叫Draw-9-Patch的软件(我就不具体描述这个软件有多难用了,反正用过的都说坑,---后来这个软件可以拖动了,1年成集成进AndroidStudio,更好用了),这个软件就是用来画点九(.9.png)图片,点九图片的概念具体我就不解释了(基主要是一个图片四条边,左边和上边可定义可扩展区域,右边和下边可以用来定义内容区域)然后花几分钟,或者补学者,慢一点10多分钟,将一张图片处理好,作为背景来说,可自动根据大小拉伸缩放.(最典型的案例其实是,如聊天用的气泡背景图)上面的问题造成这样的可能:一张背景图在iOS因为至少有两份,而且是原图大小可能要10多K.但在Android这边制作成点九格式之后一般是1K不到.
说明:在设计上,(主要内容区域)纯色的背景下点九处理是再好不过了,但是有些纹理的就会导致最终的效果差强人意了.说明2:在iOS中,Xcode5也加入了制作类似点九图的功能叫Slicing.(之前也可以在代码中,设置图片的edge来达到点九的效果,但是一般用的情况不多-这是由于iOS设备尺寸种类有限决定的)说明3:iOS比Android更容易在应用中还原设计.Android中由于尺寸众多,导致开发者对设计还原的妥协.所以一般的应用大小反而更低,但是美观上略输(针对现在,以前是输很多),其实从某些方面来说,这也是近年影响扁平化设计的一个因素,纯色远比纹理,阴影,高光处理来得方便.
总结:Android系统资源宽松灵活,使得Android应用体积较小,但是设计上不如iOS精致
iOS bitcode关于iOSbitcode的总结
导出的静态库.a或是Framework,需要两个条件
1.设置bitcode为YES
2.设置DeploymentPostprocessing为YES
参考 https://blog.csdn.net/u012198553/article/details/54380856
2021-08-18 ios flutter 打包bitcode在原生的iOS工程里面,包含了flutter模块,直接对原生项目打包时报了下面这个错误:
/ios/Flutter/Flutter.framework/Flutter’wasbuiltwithoutfullbitcode.AllframeworksanddylibsforbitcodemustbegeneratedfromXcodeArchiveorInstallbuildfile‘/Users/—r/ios/Flutter/Flutter.framework/Flutter’forarchitecturearmv7clang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)SearchforEnableBitcodesettingandsetittoYESforDebugandReleasemodes.
将EnableBitcode设置为NO没用,cd-flutter项目里面,依次执行以下命令:
flutterclean
flutterbuildios
执行完成后在原生项目打包(ps:千万不要在xcodebuild一下,直接打包就行了)
iOS - bitcode bundle could not be generated because运行时正常,打包编译时报错:
报错原因:引入的第三方库不支持bitcode。
解决办法是:
1.联系第三方框架的提供者,让他们支持bitcode,这个执行起来有难度。
2.要么在项目中将bitcode设为No,可以在”BuildSettings”->”EnableBitcode”选项中看到这个设置。
如下图所示:
(如果我们的工程需要支持bitcode,则需要求所有引入的第三方库都支持bitcode。)
ios app 打包时的rebuild for bitcode 选项是什么意思就是对包进行处理后通过不同的手机安装它安装包的大小就会不一样,说白了就是去掉不支持这个手机的内容。
OK,关于bitcode ios和为什么同一个应用ios比Android大那么多呢?的内容到此结束了,希望对大家有所帮助。
本文地址:http://www.cj8845.cn/13564.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。