美文网首页程序员
ipa和apk简易瘦身

ipa和apk简易瘦身

作者: 蝴蝶之梦天使 | 来源:发表于2018-09-21 16:34 被阅读229次
    图片来之网络

    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 学无止境, 严格要求自己。 中秋快乐!!!

    相关文章

      网友评论

        本文标题:ipa和apk简易瘦身

        本文链接:https://www.haomeiwen.com/subject/nizanftx.html