Android培训
美国上市Android培训机构

400-111-8989

热门课程

Android开发优化APP构建速度的17条建议

  • 时间:2017-04-07
  • 发布:Android培训
  • 来源:Android教程

较长的构建时间将会减缓项目的Android开发进度,特别是对于大型的项目,app的构建时间长则十几分钟,短则几分钟,长的构建时间已经成了开发瓶颈,达内Android培训的小编为大家提供一些提升app构建速度的优化建议。

1.为开发环境创建一个变体

有许多配置是你在准备app的release版本的时候需要,但是当你开发app的时候是不需要的,开启不必要的构建进程会使你的增量构建或者clean构建变得很慢,因此需要构建一个只保留开发时需要配置的变体

2.避免编译不必要的资源

避免编译和包含你没有测试的资源(比如添加的一个本地的语言和屏幕密度资源),你可以只在你的’dev’flavor下指定一种语言和一个屏幕密度

3.配置debug构建的Crushlytics为不可用状态

在debug构建状态下,如果你不需要运行崩溃上报,你可以将这个插件设置为不可用状态来提升你的构建速度

4.用静态的构建配置值来构建你的Debug版

一般地,在你的debug构建时,为manifest文件或者资源文件配置使用静态/硬编码的值。如果你的manifest或者资源文件的值每次构建都需要动态更新,那么InstantRun无法执行代码交换-它必须重新构建和安装新的APK。

5.用静态的版本依赖

当你在build.gradle文件中声明依赖的时候,你应该避免在版本号结束的地方使用+号,比如:com.android.tools.build:gradle:2.+因为Gradle的检查更新,用动态的版本号会导致未知的版本更新、使解决版本的差异变得困难和更慢的构建。你应该使用静态或者硬编码版本号来代替

6.使ondemand配置为enable状态

为了让Gradle能够确切的知道该如何构建你的APP,在每次构建之前,构建系统配置工程的所有modules和其他依赖(即使你只想构建或者测试一个modules),这使得大型的多module工程的构建速度变得很慢。告诉Gradle仅仅配置你想要构建的Modules,用如下步骤使ondemand配置可用

(1)在菜单栏上选择File->Settings(如果是Mac上,选择AndroidStudio->Preferences)

(2)导航到Build,Execution,Deployment->Compiler

(3)checkConfigureondemand复选框

(4)点击OK

7.创建library模块

检查你app中的代码,将可模块化的代码抽取一个AndroidLibrarymodule,通过这种方式模块化你的代码将允许构建系统仅仅只编译那些有改动的模块,并将其构建结果缓存下来以被后面的构建使用。同样的配置了ondemand和parallelprojectexecution(project并行执行)将更加高效(当你打开这些特性时)。

8.为自定义构建逻辑创建Tasks

在你创建了buildprofile(buildprofile后文会讲)之后,如果显示构建时间相对长的一部分时间花在“configureproject(配置工程)阶段,那么请review你的build.gradle脚本,并且查找可包含到自定义GradleTask中的代码,通过将一些构建逻辑移动到一个task中,当需要的时候才运行,结果能被缓存用于后续的构建,并且这个构建逻辑可以并行执行(如果你开启了并行执行project),更多详细信息请阅读Gradle官方文档。

9.配置dexOptions和开启librarypre-dexing(dex预处理)

Android插件提供了dexOptionsscriptblock,因此你可以配置相应的DEX构建特性,它们可以提高构建速度:

(1)preDexLibraaies:声明是否对依赖的库进行dex预处理来使你的增量构建更快速,因为这个特性可能会使你的clean构建变慢,因此在你的持续集成服务器上你可能想关闭这个特性。

(2)maxProcessCount:设置最大的线程数量使用当运行dex-in-process时,默认值是4。

(3)javaMaxHeapSize:为DEX编译器设置最大的堆大小,相对于设置这个属性,你应该增加Gradle的堆大小(这个堆大小dex-in-process可用的时候对DEX编译器有效)

10.增加Gradle的堆大小和开启dex-in-process

Dex-in-process允许多个DEX进程运行在一个单独的VM中,这使得增量构建和清理构建变得更快。默认情况下,通过AndroidStudio2.1或者更高版本创建的新项目分配了足够的内存来开启这个特性,如果你没有使用AndroidStudio2.1或者更高的版本创建项目,你需要给Gradle后台驻扎程序设置至少1536MB的堆大小内存。

11.将图片转为WebP格式

WebP是一种图片文件格式,它提供了像JPEG一样的有损压缩和像PNG一样的透明支持,但是同时它的压缩质量比JPEG或者PNG任何一个都更好,减小Image文件的大小,而不用在构建时做压缩,因此它能提高构建速度,尤其是你的APP使用了大量的图片资源。但是有一点,在解压WebP格式的图片的时候,你的设备的CPU使用将小幅度增加。

12.禁止使用PNGcrunching

如果你不能(或者不想)转换你的PNG格式图片为WebP,你仍然可以通过禁止每次构建app都自动压缩图片来提升构建速度,要禁止这项优化

13.使用InstantRun

InstantRun显著的减少了更新app的时间,它通过推送确定的代码、资源变更而不用构建一个新的app,并且在一些情况下,甚至不用重启当前的activity,在代码变更后,使用InstantRun通过点击ApplyChanges(黄色??图标)。当你做了如下几步,它会默认打开:

用debug构建变体来构建你的app
Gradle插件的版本2.3.0或者更高
在module层级的build.gradle中设置minSdkVersion为15或者更高
发布你的app在Android5.0(APIlevel21)或者更高点击Run

14.使用构建缓存

在构建你的工程的时候,构建缓存存储了AndroidGradle插件生成的确定的产物(如AAR包和远程依赖的pre-dexed)。当你使用缓存的时候,你的清理构建更快是因为构建系统后续构建能够简单地重用它们的缓存而不用重新创建。

新的工程使用AndroidGradle插件2.3.0或者更高版本默认就开启了构建缓存(除非你手动关闭了)

15.禁止使用注解处理器

Gradle2.1后可以增量构建Java,当使用注解处理器时增量构建将不可用,如果可以,避免使用注解处理器,让你从只构建更改的类来获益。(提升编译时间)

16.分析你的构建(Profileyourbuild)

在大型的项目中(或者实现了大量自定义构建逻辑),可能需要更加深入的了解构建进程来寻找瓶颈,你可以通过分析构建生命周期的各个阶段每个gradletask执行了多长时间。例如:如果你的构建资料显示Gradle花了大量的时间来配置你的工程,这建议你需要将自定义构建逻辑放在配置阶段之外。另外,如果mergeDevDebugResources任务消费了大量的的构建时间,这表明你需要将图片转换为WebP格式或者禁止PNGCrunching(第11,12条优化建议)

通过构建分析来提升你的构建速度通常需要在分析打开的情况下运行你的构建,多次修改构建配置,分析和观察结果的变化。

17.项目组件化

对于大型的项目,可能上面这些优化建议有一定的效果,但是构建速度还是有些慢,那么就可以考虑组建化了,将项目拆分成一个个单独的组件,开发环境每个module都是一个APK,发布的时候,每个module都是一个lib给主工程使用。篇幅有效,这里就不再详细介绍组件化,现在组件化是一个趋势,如果有精力或者有实力,组件化是一个很不错的选择。
最后

以上就是一些解决app构建速度慢的优化建议,如果你觉得你的工程构建速度慢,你可以试一下这些优化项。如有问题,欢迎评论区留言。如果你还有什么更好优化建议,也可以在下面留言,我会追加文章后面。
上一篇:AndroidAPP开发中过程中可能遇到的问题和解决方法
下一篇:Android开发专业名词及工具概述

【Android优化】APK包资源精简,立减1M

Android 弹性动画的三种实现方式

Android培训教程:Android Gradle高级用法,动态编译技术

Android程序员 那些你不可错过的好书

选择城市和中心
贵州省

广西省

海南省