目录 这里拿自己的一个Demo编译生成的release版本的APK作为例子,来看看一个APK里面到底装了什么: 这里详细介绍一下APK里面的组成:[2] 这里补充一下App资源被打包进APK的过程,Android构建工具链使用AAPT工具来对资源进行处理,来看下图: 一个Android项目中或多或少都会存在没被引用的资源文件,Android Studio就内置了查找无效资源的Lint工具,下面还是以Demo作为例子介绍一下具体的操作步骤: 步驟一:在上方菜单栏点击Analyze -> Run Inspection by Name… 步骤二:搜索unused resourses 步骤三:设置并开始检查资源 Lint工具运行完后就会展示出项目中没有被引用过的资源文件列表,然后就可以开始移除这些文件: WebP是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式,派生自影像编码格式VP8,被认为是WebM多媒体格式的姊妹项目。WebP最初由Google在2010年发布,目标是减少文件大小,但达到和JPEG格式相同的图片质量,希望能够减少图片档在网络上的发送时间。[3] 根据Google较早的测试,WebP的无损压缩比网络上找到的PNG档少了45%的文件大小,即使这些PNG档在使用pngcrush和PNGOUT处理过,WebP还是可以减少28%的文件大小。[4] 安卓:Android 4.0(API级别14)及更高版本支持有损WebP图像,Android 4.3(API级别18)及更高版本支持无损和透明的WebP图像。 IOS:当前的iOS不支持webp,不知道以后会不会支持,所以从网络上拿到一个webp格式的图片后,并不能直接显示出来,需要把data数据转化为jpg或者png来显示。 下面讲讲Android Studio内置的webp转换工具以及操作步骤: 步骤一:右键要转换的图片,选择convert to webp… 步骤二:设置并开始转换 TinyPNG是免费的在线图片无损压缩工具,压缩效果亲测不错,推荐给大家: 混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类、方法、变量等。 所以直观的看,通过混淆可以提高程序的安全性,增加逆向工程的难度,同时也有效缩减了apk的体积。主要作用如下:[5] 在APP的主Module下的gradle文件中做如下配置:[1] 使用 shrinkResources 进行移除,但使用 shrinkResources 必须先开启代码混淆 minifyEnabled。 除了minifyEnabled属性外,还有用于定义ProGuard规则的proguardFiles属性: 注意:代码压缩会拖慢构建速度,因此应该尽可能避免在调试构建中使用。不过一定要为用于测试的最终APK启用代码压缩,如果不能充分地自定义要保留的代码,可能会引入错误。 类似上面的利用Lint查找未引用资源,点击菜单栏的Analyze -> Analyze -> Run Inspection by Name… 搜索unused declaration,如下所示: 搜索结果会把没有引用过的类/方法/变量列出来,然后就可以考虑移除这些无用的代码: 通过 aapt l -v xxx.apk 或者 unzip -l xxx.apk 可以查看APK的详细信息: 通过上图可以看到APK中很多资源是以 可以看出AAPT在资源处理时对这些文件后缀类型的资源是不做压缩的,那是不是可以修改它们的压缩方式从而达到瘦身的效果呢?详细压缩方法可以参考:美团技术团队-Android App包瘦身优化实践 如何优化classes.dex的大小,大体有如下两个方向:[2] 在开发android应用的时候,你经常会使用外部的library库来提升你app的可用性和扩展性。例如,你会引入Android Support Library来提升用户在旧机型上面的体验,或者你会使用Google Play Service来自动翻译你app中的文本。如果一个library库被设计为一个服务或者桌面,那么它就会包含很多你应用没有用到的对象和方法。为了只包含你工程中用到的部分,你可以修改这个库文件,如果license许可的话,同时你也可以使用另外的移动端友好的库来给你的app增加特定的功能。[6] 注意:Progard能清除导入库中一些无用的代码,但是不能清除库中大的内部依赖。 GitHub上有一个开源方案 – upx:https://github.com/upx/upx upx简介(50%~70%压缩率): [1] 知乎-专栏-Andriod APK体积优化 [2] 美团技术团队-Android App包瘦身优化实践 [3] 维基百科-WebP [4] 百度百科-webp格式 [5] 掘金-Android代码混淆详解 [6] 简书-性能优化(6)-减小APK体积
1. 压缩APK体积的意义
2. APK的构成与打包
3. res资源的压缩和优化
3.1 删除没有被引用的资源
3.2 使用WebP压缩图片
3.3 使用TinyPNG压缩图片
4. 删除多余的代码(未被引用的类/方法/变量)
4.1 代码混淆
buildTypes { release { //开启代码混淆 minifyEnabled true //Zipalign优化 zipAlignEnabled true //移除无用的resource文件 shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
getDefaultProguardFile(‘proguard-android.txt')
是从Android SDK的tools/proguard/
文件夹获取默认ProGuard设置。proguard-rules.pro
文件用于添加自定义ProGuard规则。默认情况下,该文件位于模块根目录(build.gradle文件旁)。4.2 利用Lint查找无用代码
5. Zip格式优化
Stored
来存储的,这些文件是没有压缩的。从AAPT的源码中找到以下描述:
/* these formats are already compressed, or don't compress well */ static const char* kNoCompressExt[] = { ".jpg", ".jpeg", ".png", ".gif", ".wav", ".mp2", ".mp3", ".ogg", ".aac", ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", ".rtttl", ".imy", ".xmf", ".mp4", ".m4a", ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2", ".amr", ".awb", ".wma", ".wmv", ".webm", ".mkv" };
6. classes.dex优化
7. lib优化
UPX is an advanced executable file compressor. UPX will typically reduce the file size of programs and DLLs by around 50%-70%, thus reducing disk space, network load times, download times and other distribution and storage costs. Programs and libraries compressed by UPX are completely self-contained and run exactly as before, with no runtime or memory penalty for most of the supported formats.
8. 参考资料
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算