Android 应用程序如何缩小体积? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kirakbit
V2EX    Android

Android 应用程序如何缩小体积?

  •  1
     
  •   Kirakbit 2021-04-16 20:44:39 +08:00 12103 次点击
    这是一个创建于 1643 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近闲了没事自己做了个小 app,记笔记用的。打包 release 后大小 2.1mb ,我如何让它更小? 2.1mb 继续压缩到 500kb 可以实现吗?

    app 项目链接: https://quick.geshkii.xyz

    各位有什么指导或意见尽管跟我说,我洗耳恭听。

    谢谢!

    18 条回复    2021-04-20 13:53:08 +08:00
    Girls
        1
    Girls  
       2021-04-16 20:53:17 +08:00
    代码精简优化,所用函数和方法尽可能用执行效率高的替代。
    kifile
        3
    kifile  
       2021-04-16 22:13:24 +08:00
    减小或压缩图片,三方包能少就少
    RikkaW
        4
    RikkaW  
       2021-04-16 22:30:06 +08:00
    不使用 appcompat (
    sankemao
        5
    sankemao  
       2021-04-16 22:32:40 +08:00
    富文本是怎么做的
    yitingbai
        6
    yitingbai  
       2021-04-16 22:42:05 +08:00   4
    简单反编译看了一下, 首先大量的 png 图片资源是完全可以去掉的, 其次引用的库还可以减少, 比如不要使用 kotlin, 不要使用 androidx 或 appcompat 的界面库, 直接继承 Activity, 做到 500kb 完全是可能的, 举个例子, via 浏览器最新版 800 多 k, 我刚刚编译了一个 demo, 去掉了我说的这些, 只有 90k, 所以只要保证你的代码不超过 400k 就好了, 400k 的 java 代码, 发挥空间还是蛮大的
    Kirakbit
        7
    Kirakbit  
    OP
       2021-04-17 09:00:06 +08:00
    @sankemao 富文本我用的是日本一个程序员写的 richtexteditor, 这是那个项目地址: https://github.com/wasabeef/richeditor-android
    Kirakbit
        8
    Kirakbit  
    OP
       2021-04-17 09:00:16 +08:00
    @Nangle 好,谢谢建议!
    Kirakbit
        9
    Kirakbit  
    OP
       2021-04-17 09:01:55 +08:00
    @yitingbai 我用 lint 分析之后发现确实如你所说这样( png 占了很大空间),那我移除 png 是直接可以在项目目录里删除吗?我下次要制作 image asset 的时候怎么让 android studio 只生成 xml 文件,不生成 png ?

    谢谢你!
    Kirakbit
        10
    Kirakbit  
    OP
       2021-04-17 09:02:30 +08:00
    @kifile 谢谢你!
    Kirakbit
        11
    Kirakbit  
    OP
       2021-04-17 09:02:57 +08:00
    @RikkaW 不用 appcompat 是直接用 activity 代替吗?

    谢谢!
    fox0001
        12
    fox0001  
       2021-04-17 15:56:29 +08:00 via Android
    记得 Android 2.x 那时,绝大部分 apk 都是 kb 级别,多么美好的远古时代…
    Kirakbit
        13
    Kirakbit  
    OP
       2021-04-17 17:23:56 +08:00
    @fox0001 是啊,不知道为什么近几年越来越大了
    HarryQu
        14
    HarryQu  
       2021-04-17 22:13:52 +08:00
    说点我的一些看法:

    1. 你的 App 中适配了多种像素密度的手机,例如 hdpi 、xxhdpi 、xxhdpi 、xxxhdpi 。目前,多数用户的手机像素密度为 xxhdpi,以我的 App 为例,可以只保留 drawable-xxhdpi 文件夹即可(类似 iOS 中的 3 倍图)。

    2. 可以将 png 图片转换为 webp 格式,当然这一步不是必须的,因为我看你的 App 中,多数图片都不是很大。AndroidStudio 中右键即可以转换。如果将来有将来有大 png 图片的话,可以在 https://tinypng.com/ 网站上进行压缩。

    3. 如上面哥们所言,考虑移除 androidx 或 appcompat 的界面库。这一步可以大幅减少你的 App 体积。但是如果你依赖的第三方库依赖这些库的话,就比较难办了。

    4. 同目前市面上的 App 相比,2.1M 其实也不是很大,可以暂时将精力放在其他方面。当然优化是一个永恒的话题,但也没必要过度优化。
    Kirakbit
        15
    Kirakbit  
    OP
       2021-04-18 14:50:13 +08:00
    @HarryQu
    我现阶段的做法是把 png 图片完全移除用 xml,我不知道这样做的坏处是什么,但是现阶段可以编译。移除 androidx 我现在在做,但移除 png 已经带来明显的体积减小了。

    同时,我赞同你说的过度优化问题。的确,我现在应该把重心放在增加新功能上。


    谢谢!
    kingiis
        16
    kingiis  
       2021-04-19 15:01:20 +08:00
    最快的方式
    1.图片全用 webp ,给你个 png 你拉到项目里 全选 右键 转一下就好
    2.少复制代码 使用两次以上的代码就直接 扔一个工具类里去

    其他的都是 kb 级别的可以忽视
    q197
        17
    q197  
       2021-04-20 10:36:51 +08:00
    @fox0001 appcompat 用了兼容性方便很多 还有如果用 kotlin 也会增加一点体积
    nicocho
        18
    nicocho  
       2021-04-20 13:53:08 +08:00
    前几天研究了下,拼多多 apk 只有 30 多 M, 安装后是 120 多 m 。
    一个 dex 压缩前是 10m,压缩后大概不到 3m, 够厉害的
    估计都是单独用了 7z 的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     872 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:58 PVG 04:58 LAX 13:58 JFK 16:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86