Android Apk 瘦身大法
一, 我们在多人开发项目 或者 遗留项目中开发时,会有些自己没用到的资源文件,但是自己也没有把握删除,怕早还曾一些不可预估的问题。
解决: Android studio 中 Refactor -> Remove Unused Resources 选项就可以删除未用到的资源。
二,只添加需要的依赖
比如 我们添加依赖只用到了一个很小的部分,却依赖了整个库,这是没有必要的。
在 AS 的 Terminal 下输入:$ ./gradlew app:dependencies 可以细分项目依赖。
三,只打包需要的CPU平台
android {
defaultConfig {
...
ndk {
abiFilters 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a'
// armeabi, mips and mips64 has removed since NDK r17
}
}
}
四,为屏幕密度构建多个APK (测试并不能使包体积变小)
默认情况下,Android Studio 将会生成一个包含所有屏幕密度的通用 APK。在此技能中,你能专门排除或包含你想要在app/build.gradle支持的屏幕密度,Android Studio 将会为你生成多个 APK。
android {
splits {
density {
enable true
// Specify a list of screen densities which Gradle won't create multiple APKs for
exclude 'ldpi', 'mdpi'
// Specify a list of compatible screen size for the manifest
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
}
}
所以,你需要将他们所有都上传到 Google Play,最终你的用户将会下载与他们屏幕密度匹配的 APK (国内用户无感)
五, 删除未使用替代资源
有时,你创建一个本地的 app,你只想支持一些特殊的语言。但是,有一些依赖包含全世界的很多语言,你不需要所有的这些。因此,你可以使用resConfigs属性指定你想要的语言,你的 app 将更小。
android {
defaultConfig {
resConfigs 'en', 'th'
...
}
}
六, 压缩无用代码和资源
默认情况下,Android Studio 的 minifyEnabled为false,但我认为很多人为了更小和安全因素把它设置为true来缩小和混淆你的代码。我建议你在app/build.gradle中添加shrinkResources,在压缩(minify)进程之后删除无用的资源。因为在压缩中,gradle将移除无用的代码,这些代码可能会引用一些资源。
最后,我想大多数人都不知道-optimize。你能在proguard-android之后添加-optimize,它将为你构建 app 做更多的优化,你的 app 将会更小。
android {
buildTypes {
release {
minifyEnabled true shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
请注意,此过程将花很多时间,所以你应该只在发布快中使用-optimize。
七,使用Shape Drawable 去做需要的图片
八,使用Webp (之前没听说,百度之后了解到,是GOOGLE大佬推出的新格式)。 PS:需要之一 系统支持问题。
Webp 的 API 等级是API 15及以上支持。但是如果你想在 Webp 中支持透明背景,你需要支持API 18或者更高,Android Studio 还为您提供了一种将图像转换为 WebP 格式的简便方法。你可以右击你想要的图片,选择Convert to WebP
八,使用VectorDrawable
这里我们常会将SVG 转换成 Android 能用的 格式。在Android 5.0(21)后支持该功能
如果你正在支持minSdkVersion 20或者更低。别担心,你可以用它。因为 Android 团队提供了一个库。因此你只需要使用23.2及其以上支持库。
更快的构建 app的技术
一 ,使用最新的 Android plugin
dependencies {
- classpath 'com.android.tools.build:gradle:3.0.0'
+ classpath 'com.android.tools.build:gradle:3.2.1'
}
二 ,避免Legacy Multidex
场景:app 超过 64K 方法,需要使用 Multidex,如果minSdkVersion 是21 或更低,那么你将使用 Legacy Multidex,这回是你在构建时变慢。
productFlavors {
development {
minSdkVersion
...
}
}
三 ,禁用 Multi APK
我们该在开发构建环境禁用多个 APK 生成
我们应该添加下面两行代码禁用它。
buildTypes {
...
debug {
splits.abi.enable = false
splits.density.enable = false
}
}四 ,包含最少的资源
默认情况下,构建系统包含 app 和库使用的所有语言和屏幕密度。开发期间你不需要用到所有的这些资源,你能通过添加resConfigs来使用这些资源中的一组,并指定开发构建所需的语言和屏幕密度。
productFlavors {
dev {
resConfigs('en', 'xhdpi')
...
}
}
五 ,禁用PNG缩紧
默认情况AAPT将会缩进PNG来减小它们的大小,对于你发布 APK 是一件好事,但是它对于你开发构建并不重要。要避免PNG缩紧,你可以使用下面的属性并将其设置为false。
buildTypes {
...
debug {
aaptOptions.cruncherEnabled = false
...
}
}
六 ,使用Instant Run
默认情况下,当你点击 RUN 按钮时,系统将会尝试冷切换,app 需要重启,但是当你点击 Apply Changes 按钮时,系统将先尝试热交换,这会将更改直接推送到实时进程。
七 ,禁用更新构建ID
我想很多人使用 Crashlytics,每次构建 Crashlytics 将默认生成一个唯一的构建ID。你可能不知道他们为你提供了一个关闭它的方式,如下:
buildTypes {
debug {
ext.alwaysUpdateBuildId = false
...
}
}
八 配置gradle.properties
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF- org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.caching=true
android.enableBuildScriptClasspathCheck=false
鼓励你尝试这些配置,我保证你将节省大量的建设时间。
九 使用R8新代码 shrinker
Android studio 3.3中可以使用 R8的下一代代码shrinker。它将减少无用的代码和资源,并缩小您的源代码。因此 Android Studio 声称构建时间和 APK 大小会更小。
Android Apk 瘦身大法的更多相关文章
- Android APK 瘦身 - JOOX Music项目实战
导语 JOOX Music是腾讯海外布局的一个音乐产品,2014年发布以来已经成为5个国家和地区排名第一的音乐App.东南亚是JOOX Music的主要发行地区,由于JOOX Music所面对的市场存 ...
- Android APK瘦身之Android Studio Lint (代码审查)
******** ******** 第一部分: 瘦身内容介绍 ******** ******** 项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的APK变得更肿, 因此 ...
- android apk瘦身之 图片压缩 tinypng
参考地址: http://blog.csdn.net/jy692405180/article/details/52409369 http://www.tuicool.com/articles/BraI ...
- Android APK瘦身方法小结
众所周知,APP包体的大小,会影响推广的难度,用户不太喜欢下载太大的APP,同类型同等功能的APP中往往是包体小的更受用户的青睐,所以降低包体是一项非常必要的事情,也是最近公司的APP需要降低包体,所 ...
- Android APK瘦身之webp图片
webp格式是谷歌推出的一种有损压缩格式,这种图片格式相比png或者jpg格式的图片损失的质量几乎可以忽略不计,但是压缩后图片的体积却比png或者jpg要小很多.亲测一个100kb的png图片经过we ...
- android apk瘦身
1.在gradle使用minifyEnabled进行Proguard混淆的配置,可大大减小APP大小 通过Build.gradle进行配置 2.删除无用的Resource文件. 这个和上面的肯定不一样 ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- 利用 Android Gradle 瘦身 apk
http://devyang.me/blog/2014/11/11/li-yong-android-gradleshou-shen-apk/ apk瘦身一般有两条线, 去除无用的代码,例如引用一个比较 ...
- Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
随机推荐
- 建立一个漂亮的PHP验证码类文件及调用方式
//验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';/ ...
- Codeforces712E
传送门 here 题意: 有n个赌场,第i个赌场的胜率为$ P_i$,在第i个赌场若取胜则到达第$ i+1$个赌场,反之到达第$ i-1$个赌场 定义统治赌场$ L...R$为从赌场$ L$开始,从赌 ...
- await这个关键词以及asyncio.wait asyncio.gather
1.asyncio.wait asyncio.gather这两个都是接受多个future或coro组成的列表,但是不同的是,asyncio.gather会将列表中不是task的coro预先封装为fut ...
- Light oj 1099 - Not the Best 次短路
题目大意:求次短路. 题目思路:由于可能存在重边的情况所以不能采用邻接矩阵储存图,我用了邻接表来存图. 由起点S到终点E的次短路可能由以下情况组成: 1.S到v点的次短路 + v到E的距离 2.S到v ...
- 第一次发博,发个简单的Java程序发送手机短信验证
最近在准备一个项目,想的登录时候用手机验证,就通过上网查阅了一下手机验证的实现方法,原来超级简单,下面将一步一步介绍. 1.去中国网建注册一个账号密码,首次注册送五条免费短信和3条免费彩信.具体的网址 ...
- DataGrid 查出一个列 按要求显示格式 例如:操作人(地点)
这是转换DataGrid显示格式之后 连接字符串的方法 显示:操作人(地点) public static ObservableCollection<CListModel> AllUserL ...
- [Kubernetes]安装和配置kubectl
安装kubectl 安装kubectl比较简单,几条命令即可(#后面为注释内容): #下载最新版本: curl -LO https://storage.googleapis.com/kubernete ...
- python的MySQLdb库链接MySQL入门代码
链接:http://www.runoob.com/python/python-mysql.html
- eMMC基础技术11:flash memory
[转]http://www.wowotech.net/basic_tech/367.html 0.前言 eMMC 是 Flash Memory 的一类,在详细介绍 eMMC 之前,先简单介绍一下 Fl ...
- MySQL如何启用密码强度审计【转】
1.密码验证插件安装 要使服务器可以使用,插件库文件必须位于MySQL插件目录(plugin_dir系统变量指定的目录)中.如有必要,请设置plugin_dir服务器启动时的值, 以告知服务器插件目录 ...