写点什么

今日头条 APK 瘦身之路,kotlin 教程 pdf 下载

用户头像
Android架构
关注
发布于: 刚刚

density {


enable true


reset()


include "xhdpi"


compatibleScreens 'small', 'normal', 'large', 'xlarge'


}


}


4、如果想整体移除 res 下某个文件夹可以添加如下 aaptOptions 配置,而不用打包时手工删除,多个文件夹用:隔开


aaptOptions {


ignoreAssetsPattern 'color-night-v8:drawable-night-v8'


}


arsc 文件


resource.arsc 文件记录了资源 id 和资源的对应关系(字符串的内容,图片的相对路径等)


减少语言支持


目前包括各种语言(v7 包引入),点击 resources.arsc 可以看到支持 80 种



可以通过修改 gradle 配置,去除不需要部分,这里我们保留 4 种


defaultConfig {


resConfigs "zh-rCN", "zh-rHK", "zh-rTW", "en"


}


只保留"zh-rCN", “zh-rHK”, “zh-rTW”, “en” 减少不必要的语言(80 种减到 5 种,有一个 default)apk 可减少 0.61M



资源混淆


开源解决方案 AndResGuard 可以看下,通过使用段路径和压缩可以减小 apk,需要注意的是你的项目中某些资源需要 keep,减少了 1.5M。


lib 文件夹


架构支持


Android 系统目前支持以下七种不同的 CPU 架构:ARMv5,ARMv7 (从 2010 年起),x86 (从 2011 年起),MIPS (从 2012 年起),ARMv8,MIPS64 和 x86_64 (从 2014 年起)


每一个 CPU 架构对应一个 ABI:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64


所有的 x86、x8664、armeabi-v7a、arm64-v8a 设备都支持 armeabi 架构的.so 文件,x86 设备能够很好的运行 ARM 类型函数库,但并不保证 100%不发生 crash,特别是对旧设备。64 位设备(arm64-v8a, x8664, mips64)能够运行 32 位的函数库,但是以 32 位模式运行,在 64 位平台上运行 32 位版本的 ART 和 Android 组件,将丢失专为 64 位优化过的性能(ART,webview,media 等等)。所以一般的应用完全可以根据自己业务需求选择使用 armeabi 或者 armeabi-v7a 一种支持就行。


可以通过 gradle 配置


defaultConfig {


ndk {


abiFilter "armeabi"


}


}


比如:微信、微博、QQ 只保留了 armeabi,Facebook、Twitter、Instagram 只保留了 armeabi-v7a


假设只支持了 armeabi,如果有特殊要求(比如视频应用)需要用到部分 armeabi-v7a 的 so,可以通过改名放到 armeabi 文件夹中,根据手机实际情况选择加载。


动态下发


比较大的 so 可以选择动态下发的形式延迟加载,代码上需要加一些判断逻辑。


dex 文件


1、添加设置 minifyEnabled true,混淆、压缩代码,这个设置现在 app 应该都已经添加了。


2、删除一些无用库,早期为了兼容低版本手机,添加了一些兼容库,随着时间推移 APP 支持的最低版本也在升高,之前的一些无用库就可以移除。


3、插件下发业务模块 添加插架框架,将部分代码延迟下发加载,这部分效果显著。


其他


极端情况下可以考虑以下两种方式,可以优化约 1M 的空间


debug 信息


一般我们会配置 Proguard 保留行号等信息用于线上日志分析,极端情况下也可考虑移除这部分,会有 5%-10%的效果,可以减少了 0.5M,但是出于方便性暂未移除。


-keepattributes SourceFile,LineNumberTable


supportv7 包


如果对 supportv7 包依赖的不多,可以直接把使用到的内容 copy 出来单独处理,毕竟该包会增加至少 0.4M 的体积,业务复杂后这部分并不好操作和后续维护,头条暂时并没有使用。


TODO


功能迭代不止,瘦身事业不息。


要维持和继续减小 ap


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


k 包,必须要不断优化,现在又如下思路还没有实施,可以看下


1、Google 的 support-v4 包新版本已经做了拆分,24.2.0 版本拆分成了 5 个 module:support-compat、support-core-utils、support-core-ui、support-media-compat、support-fragment,可以根据自己需要单独引用相应的 module。


v7 包也会依赖 v4,maven 依赖有个好处,可以通过 exclude 单独剔除相应依赖,如下:


compile ('com.android.support:appcompat-v7:24.2.0') {


exclude module: 'support-v4'


}


compile 'com.android.support:support-fragment:24.2.0'

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
今日头条APK瘦身之路,kotlin教程pdf下载