ipa和apk简易瘦身

263 阅读3分钟

图片来之网络

Material Design风格 apk 瘦身 ipa 瘦身

一、起因

新版本发布后发现安装包apk和ipa各增加了10M之多。天啊噜。这是新增加了多少的功能啊。默默的担负起瘦身的工作。查代码提交,查三方库和二方库的使用,查图片,查配置,查打包方式。 大概确认是因为公司的UI风格开始使用Material Design风格,各种圆角,各种阴影,各种悬浮,各种神乎其乎的Style。引入了上百张图片导致的。 然后开始查找各种瘦身的简易方法,处理方便,风险小,收益大。

二、 apk 瘦身

1. abiFilters

在分析apk包后,看到包大小较大的除了class执行文件外,还有就是各种so库和图片了。那么针对so库,可以进行一次放弃的选择。 先了解下Android设备的CPU类型(从网络抄的)

  • armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年5月以后的生产的大部分Android设备都使用它.
  • arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
  • armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
  • x86: 平板、模拟器用得比较多。
  • x86_64: 64位的平板。 可以明显的知道x86和x86_64基本没人使用,可以放弃了。 那么Android Studio中配置可以使用:
ndk {
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
        }

so库减少了2部分,包大小直接减少了2/5。 效果显著。

2. 图片瘦身

针对为了美观和效果,而资源文件较多,并且很多图片使用圆角,导致不能使用jpeg的样式,只能使用png。从而很多图片的大小在几百K大小。 此时使用神奇PPDuck。 妥妥的。 亲测,1.1M的图片,压缩80%,直接成为300K。 将所有图片进行一次瘦身,apk包减少好多好多。心情舒畅。 iOS的Assets.xcassets无效,一定要注意。任何压缩对于Xcode都是无效的。

三、ipa瘦身

1. bitcode

设置 Build Settings -> Enable Bitcode 为 Yes 使用bitcode后,会根据不同设备打包出不同的指定包。比如iPhone 8 plus,那么所有的图片仅仅包含3x图片,而不需要包含2x图片。包大小缩小约1/2。 ^^_^^ 不管任何情况,当前的环境条件下一定要支持bitcode。如果第三方库不支持,将源码下载然后再编译。然后就可以支持bitcode。

2. Valid Architectures

设置 Build Settings -> Valid Architectures 为 arm64 armv7s 先了解下:(网上抄的)

arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad mini with Retina Display)

armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)

armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

这是与Android的abiFilters作用一样,编译不同CPU的指令。如果支持的类型少,那么打出来的包也变小了。 按现在市场上对iPhone4S及以下的设备占有率应该是万分之一了。SO 可以选择放弃了。当然iPhone5 和 5C的也不是很多,原则也可以放弃了。(看领导的心情吧) 如果删除armv7,那么包大小直接减少了三分之一,爽不爽。 提示: 如果你的Deployment Target 已经9.0 或10.0 那么删除armv7可以毫无压力了。

3. 图片

Android使用的PPDuck神器,在Xcode中无效。所以如果有大图的话,使用jpeg来实现吧。 图片不能放到Assets.xcassets中,需要放到工程目录下,加载图片使用:

NSString *path = [[NSBundle mainBundle] pathForResource:@"home_carousel" ofType:@"jpeg"];
    img1.image = [UIImage imageWithContentsOfFile:path];

当图片大于400K或者300K,觉得就可以使用此方案。

#总结

  • abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
  • PPDuck
  • bitcode yes
  • Valid Architectures arm64 armv7s
  • jpeg

轻松愉快!!!

// END 学无止境, 严格要求自己。 中秋快乐!!!