V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kirakbit
V2EX  ›  Android

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

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

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

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

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

    谢谢!

    18 条回复    2021-04-20 13:53:08 +08:00
    Nangle
        1
    Nangle  
       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   ·   实用小工具   ·   1215 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 23:14 · PVG 07:14 · LAX 15:14 · JFK 18:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.