请注意,实际结果可能会有所不同,因为它取决于您的项目特征和构建环境,例如项目规模、资源、依赖关系和机器性能。

构建更小App的技巧

APK 的大小将会影响 app 的加载速度、内存占用以及电量消耗。我想大多数人都知道,APK 大小是用户参与度的重要因素。让我们来看看当前在 LINE MAN Driver 中 app 的大小。

优化 APK,快速的建议是使用 Android Studio 的APK Analyzer。打开 Android Studio ,然后选择Profile or debug APK,浏览你的 APK 文件。

Tip 1:移除无用的资源

大多数人都是在遗留项目中开发,有很多图片、布局和string你从来没有用过,但是你不知道也不想自己删除它,因为你害怕会让你的 app 崩溃,对吗?所以,在 Android Studio 中,它提供了Remove Unused Resources的选项。

它对我们非常有帮助,因为他能自动找到无用的资源,然后你能一键删除它们。

Tip 2:只添加需要的依赖

有些依赖内部包含了一堆库,像play-services和FaceBook SDK。如果你没有指定你需要的库,那你将获得全部的库,让你的 app 变胖。例如,如果你想使用
Google 授权,你应该指定com.google.android.gms:play-services-auth:16.x.x代替com.google.android.gms:play-services:16.x.x。

你可以通过下面的命令来细分项目的依赖

$ ./gradlew app:dependencies

你将看到在项目中用到的所有的依赖,然后确保只用你所需要的。

Tip 3:为屏幕密度构建多个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 forexclude 'ldpi', 'mdpi'// Specify a list of compatible screen size for the manifestcompatibleScreens 'small', 'normal', 'large', 'xlarge'}}
}

所以,你需要将他们所有都上传到 Google Play,最终你的用户将会下载与他们屏幕密度匹配的 APK。

Tip 4:为ABI构建多个APK

这个技巧和前一个技巧相似,但是此技巧是用于支持Application Binary Interfaces(ABIs)。今天,我认为 Android 市场中有7个 CPU 框架,其中3个很难找到(mips,mips64,armeabi),以此你可以在app/build.gradle指定你想要支持的 ABI,Android Studio 将会为你生成多个 APK。

android {splits {abi {enable truereset()// Specify a list of ABIs that Gradle should create APKs forinclude 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a'// If you don’t want to generate a universal APK that includes all ABIs.universalApk false}}
}

然后,你需要将他们所有都上传到 Google Play,最后你的用户将会下载与他们 CPU 匹配的 APK。

Tip 5:使用特定的ABI构建APK

这个技巧不同于多个 APK。你能指定你想要支持的 CPU 框架,Android Studio 将只生成一个 APK。

android {defaultConfig {...ndk {abiFilters 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a'// armeabi, mips and mips64 has removed since NDK r17}}
}

根据我的经验,我更喜欢这个技巧,因为我曾经在多个APK的情况中在某些设备上发现了崩溃。

Tip 6:删除未使用替代资源

有时,你创建一个本地的 app,你只想支持一些特殊的语言。但是,有一些依赖包含全世界的很多语言,你不需要所有的这些。因此,你可以使用resConfigs属性指定你想要的语言,你的 app 将更小。

android {defaultConfig {resConfigs 'en', 'th'...}
}

Tip 7:压缩无用代码和资源

默认情况下,Android Studio 的 minifyEnabled为false,但我认为很多人为了更小和安全因素把它设置为true来缩小和混淆你的代码。我建议你在app/build.gradle中添加shrinkResources,在压缩(minify)进程之后删除无用的资源。因为在压缩中,gradle将移除无用的代码,这些代码可能会引用一些资源。

最后,我想大多数人都不知道-optimize。你能在proguard-android之后添加-optimize,它将为你构建 app 做更多的优化,你的 app 将会更小。

android {buildTypes {release {minifyEnabled trueshrinkResources trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}

请注意,此过程将花很多时间,所以你应该只在发布快中使用-optimize。

Tip 8:使用Shape Drawable

有时候,我看到开发者使用Bitmap的渐变背景或者圆角图。实际上,bitmap图比 Android Studio 提供的Shape Drawable更大,因为在Shape Drawable中,你可以以xml的格式绘制矩形、椭圆、圆、圆角和其他。

Tip 9:使用Webp

相同质量下 Webp 更小,最多30%。唯一需要注意的是操作系统的要求。如果你使用不透明的背景,Webp 的 API 等级是API 15及以上支持。但是如果你想在 Webp 中支持透明背景,你需要支持API 18或者更高,Android Studio 还为您提供了一种将图像转换为 WebP 格式的简便方法。你可以右击你想要的图片,选择Convert to WebP。

因此,让我们看一个示例结果,图像尺寸减小到原始尺寸的15%,质量为90%。

Tip 10:使用VectorDrawable

从API 21起,确保vector比bitmap更小,你能使用vector代替bitmap图片。因为VectorDrawable能以相同质量的图,降低大小到不同屏幕密度。

如果你正在支持minSdkVersion 20或者更低。别担心,你可以用它。因为 Android 团队提供了一个库。因此你只需要使用23.2及其以上支持库。

累积改进

这是在应用这些技巧后所累积的改进

还有一件事

从 Android Studeio 3.2 开始,Android App Bundle是一种新的 app 发布格式,可以让你的 app 小的更轻松。你不需要添加一行代码,只需要使用新方法导出即可。因此,当你下载你的 app 时,Google Play 动态传输指定设备需要的代码和资源。

通过这种方式你不需要自己构建多个 APK 了。

请注意,文件扩展名师.aab,你需要花更多的时间来构建,但这是值得的。

更快构建app的技术

和 Android 开发者想要改进的一样,构建速度对工作效率至关重要。从这个问题我有10个技术可以更快的构建 LINE MAN Driver app。

优化之前,我想让你看看 LINE MAN Driver app 现在在 Android Studio 3.2.1 的完整构建速度。

现在构建 LINE MAN Driver 的时间是3分钟。

Technique 1:使用最新的Android plugin

第一个技术,确保你的 Android Gradle plugin 是最新的。因为有很多错误修复和性能问题被修复。

Technique 2:避免Legacy Multidex

第二个技术是避免 Legacy Multidex。如你所知,如果你的 app 超过64k方法限制,你需要使用 Multidex。如果你的的minSdkVersion是21或更低,你也是用 Multidex,那么你将使用 Legacy Multidex,这会使你在构建时变慢。

要避免 Legacy Multidex,你可以定义新的flavor,并在app/build.gradle中指定minSdkVersion为21或更高。

productFlavors {development {minSdkVersion 21...}
}

Technique 3:禁用Multi APK

第三个技术,你应该在开发构建环境禁用多个 APK 生成,因为打包和创建这些 APK 需要时间。所以,你能在app/build.gradle的 debug 代码块中添加以下两行代码禁用它。

buildTypes {...debug {splits.abi.enable = falsesplits.density.enable = false}
}

Technique 4:包含最少的资源

在你开发构建中最小化打包的资源。默认情况下,构建系统包含 app 和库使用的所有语言和屏幕密度。开发期间你不需要用到所有的这些资源,你能通过添加resConfigs来使用这些资源中的一组,并指定开发构建所需的语言和屏幕密度。

productFlavors {dev {resConfigs('en', 'xhdpi')...}
}

Technique 5:禁用PNG缩紧

默认情况AAPT将会缩进PNG来减小它们的大小,对于你发布 APK 是一件好事,但是它对于你开发构建并不重要。要避免PNG缩紧,你可以使用下面的属性并将其设置为false。

buildTypes {...debug {aaptOptions.cruncherEnabled = false...}
}

Technipue 6:使用Instant Run

默认情况下,当你点击 RUN按钮时,系统将会尝试冷切换,app 需要重启,但是当你点击 Apply Changes按钮时,系统将先尝试热交换,这会将更改直接推送到实时进程。

Technipue 7:禁用更新构建ID

下一个技能是在 Firebase Crashlytyics 中禁用更新构建ID。我想很多人使用 Crashlytics,每次构建 Crashlytics 将默认生成一个唯一的构建ID。你可能不知道他们为你提供了一个关闭它的方式,如下

buildTypes {debug {ext.alwaysUpdateBuildId = false...}
}

你需要注意,只在 debug 块中设置为false。

Technipue 8:不要使用动态版本

Gradle 通过在依赖行末尾添加+,提供一种非常方便获取每个依赖的最新版本。它将使 Gradle 每24小时检查库的新版本,并增加构建时间。

android {dependencies {implementation 'com.android.support:appcompat-v7:+'...}
}

Technipue 9:配置gradle.properties

这里的代码是我从 Android 开发经验中收集的配置。对我而言,它们就像一种魔法,可以帮助你更快地构建 app。

例如,默认情况下,Android Studio 会为你提供1.5GB的内存,这可能是好事或坏事,因为它实际上取决于你项目的特征。

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8org.gradle.daemon=trueorg.gradle.parallel=trueorg.gradle.configureondemand=trueorg.gradle.caching=trueandroid.enableBuildScriptClasspathCheck=false

因此,我鼓励你尝试这些配置,我保证你将节省大量的建设时间。

Technipue 10:使用R8新代码shrinker

下一步是什么?在即将推出的 Android Studio 3.3 中可以使用R8的下一代代码shrinker。它将减少无用的代码和资源,并缩小您的源代码。因此 Android Studio 声称构建时间和 APK 大小会更小。

累积改进

让我们看看,在使用这些技巧之后新的完整建筑速度。现在我花了大约1分钟完成建设。所以这次累积改进,完整版本现在快3倍。

总结

你想象一下,如果你的旧项目比 LINE MAN Driver 程序应用程序更大,你可以减少多少大小以及可以节省多少时间。

Gradle更小、更快构建APP的奇淫技巧相关推荐

  1. Google 开源的依赖注入库,比 Spring 更小更快!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:GinoBeFunny zhuanlan.zhihu.com ...

  2. 苹果公司提出Mobile-ViT | 更小更轻精度更高,MobileNets或成为历史

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨ChaucerG 来源丨集智书童 MobileviT是一个用于移动设备的轻量级通用可视化Tran ...

  3. 海尔微型计算机云悦mini2a,更小更轻新 主机云悦mini2A参数曝光

    大哥大流行的年代,没人能想到手机能发展到多小,世界上第一台30吨重的计算机诞生时,也没人能想到主机能发展到只有一瓶矿泉水的重量.海尔电脑旗下的云悦mini可谓主机进化史上的缩影,0.6L体积,0.45 ...

  4. hp510台式计算机,体积更小更时尚 惠普Pavilion 510台式机简评

    体积更小更时尚 惠普Pavilion 510台式机简评 2016年07月13日 01:00作者:王普编辑:王普文章出处:泡泡网原创 分享 随着DIY市场的萎靡,PC行业早已没有当年那番景气,但是大家对 ...

  5. EfficientNet v2网络学习记录--更小更快

    论文地址:2021 CVPR --Google <EfficientNetV2: Smaller Models and Faster Training> 亮点: 使用训练感知神经结构搜索和 ...

  6. 蜂鸟视图JS SDK v3.0:五大亮点,打造更小更快的可视化地图应用

    近期,蜂鸟视图发布了FengMap JavaScript SDK v3.0版本,该版本在不减少任何功能的情况下,对原有的渲染内核进行了优化,使得数据加载性能提升了30%,渲染性能提升了25%,包体大小 ...

  7. 麻省理工人工智能实验室发现更小更容易训练的神经网络

    https://www.toutiao.com/a6688201699858842119/ 2019-05-07 16:38:26 神经网络技术起源于上世纪五.六十年代,当时叫感知机,拥有输入层.输出 ...

  8. 尺寸直降28%!斯坦德推出更小更灵活的AMR物流机器人

    经由客户项目现场测试打磨,结合3C制造场景下产线空间受限等挑战,斯坦德推出了新型号AMR物流机器人--Oasis300C.该型号AMR延续了同系列产品功能设定,同时凭借更小的体型在更多极限场景与运动控 ...

  9. webp app推荐图片格式,更小更快减少oom

    一.什么是 WebP? WebP(发音 weppy,项目主页),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG ...

最新文章

  1. 数组-删除排序数组中的重复项(双指针法)
  2. linux分区空间不足--lvm逻辑卷的实现过程
  3. erp 维护费 要交吗_erp系统每年都要缴费吗
  4. Linux namespace之:network namespace
  5. 我为何选择Facebook广告
  6. 掌握这个套路,让你的可视化大屏万里挑一
  7. vue-aliplayer 阿里云播放器适配 vue
  8. check异常和uncheck异常的区别b
  9. 大数据和java就业前景_Java大数据就业方向
  10. DCU Streamer Prefetcher
  11. 判断N!末尾有多少个0
  12. java合并word
  13. 品丰服务器做系统蓝屏,固态硬盘使用AHCI模式安装WIN7系统的方法
  14. Python项目之文化和旅游数据可视化
  15. 中级经济师备考:房建专业教材精讲分析
  16. 高中生都能读懂的手机中RAM与ROM及闪存的知识
  17. 自动加载zrx文件的四种方法
  18. 孝心至上自强不息南阳何志强感动济源
  19. linux java脚本怎么写,linux 执行java脚本
  20. 再谈实施SIEM的最佳实践

热门文章

  1. 网众无盘不能和主服务器同步,网众无盘数据服务器无法打开怎么办
  2. NHibernate配置
  3. 文书档案管理系统服务器版,文管王文书档案管理系统 正式版
  4. 修改Win7工具栏资源管理器打开后的默认路径
  5. Python爬虫实战之爬取QQ音乐之下载有版权的音乐(五)-1
  6. 常见textarea换行问题的处理方法
  7. 通过Feign调用接口,返回数据时出现数据乱码
  8. 计算机一级最新版本,计算机一级掌上通最新版
  9. MySQL数据库---视图索引
  10. 使用layer弹出层组件绑定页面按钮