Android的Gradle技巧 6.1性能建议

32 篇文章 0 订阅
6.1性能建议
问题
你需要提高Gradle构建的性能。

使用这里推荐的技术的组合。
讨论
首先,这些不会影响应用程序性能的建议。有很多事情你可以做,以帮助你的应用程序,其中许多涉及Android的ProGuard工具。这一节不是关于 - 它是关于提高构建本身的性能。
本教程讨论了可以添加到Android应用程序根目录下gradle.properties文件的设置。如果您更喜欢使用全局设置,请将名为gradle.properties的文件添加到主目录中的.gradle子文件夹。
Gradle守护进程
Gradle守护进程是一个后台进程,在构建之间保持活动,缓存数据和代码。每当从命令提示符运行时,Gradle的最新版本都会自动启动Gradle守护进程。
默认情况下,Android Studio在您的项目中启动一个Gradle守护进程,超时时间为3小时,这对于大多数开发任务都足够长。但是,如果从命令行运行Gradle,您可能无法自动启动守护程序。
要确保守护程序启动,请添加示例6-1中所示的设置。
实例6-1。 Gradle守护进程设置在gradle.properties
org.gradle.daemon = true
守护程序也可以使用命令行标志启动和停止。使用--daemon和--no-daemon在单个构建调用上启用或禁用守护程序。如果您担心内部缓存过期或者您正在进行调试,停止它有时会很有用。如果希望停止正在运行的守护进程,请使用--stop参数来gradle。
Gradle团队强烈建议您不要在持续集成服务器上使用守护进程,这意味着稳定和可重复的构建超过性能。
并行编译
Gradle有一个“孵化”选项来并行编译独立项目。要使用它,请向gradle.properties中添加一行,如例6-2所示。
实例6-2。 gradle.properties中的并行编译设置
org.gradle.parallel = true
注意这可能没有什么帮助。 Android项目中的大多数模块都是相关的,这会抵消并行编译的任何好处。
按需配置
通常,Gradle在执行任何项目之前配置构建中涉及的所有项目中的所有任务。对于具有大量子项目和许多任务的项目,这可能是低效的。因此,可以尝试仅配置与所请求的任务相关的项目。
为此,请使用gradle.properties中的“按需配置”设置,如示例6-3所示。
实例6-3。 gradle.properties中的按需配置设置
org.gradle.configureondemand = true
大多数Android应用程序只有少量的子项目,因此此功能可能不会有什么帮助。
再次,这是一个孵化功能,所以具体的细节可能会随着Gradle的新版本而改变。
排除不需要的任务
如在4.3中所讨论的,-x标志可以用于排除需要时间但在每次构建期间可能不需要的特定任务,例如lint。
该配方还示出了如何在组合之后禁用任务图中的特定任务。有关详细信息,请参阅配方。
更改JVM设置
最终,Gradle构建在Java进程中运行,因此影响JVM的标志影响Gradle的性能。例6-4显示了Java虚拟机的一些设置。
实例6-4。在gradle.properties中选择JVM设置
org.gradle.jvmargs = -Xmx2048m -XX:MaxPermSize = 512m
-XX:+ HeapDumpOnOutOfMemoryError
-Xmx标志指定在Java进程中使用的最大内存量。 -Xms标志指定要分配给进程的初始内存量。该示例还会更改“永久生成”空间的大小,并在抛出java.lang.OutOfMemoryError时将堆转储到文件。
有关详细信息,请参阅Java HotSpot VM选项页面。
只使用所需的依赖项
这特别指的是Google Play服务,以前需要一个大型库,现在是以单独的模块的形式。
例如,要使用Google地图,您必须在编译时添加整个Google Play服务依赖项,如例6-5所示。

实例6-5。添加整个Google Play服务依赖关系

dependencies {
compile 'com.google.android.gms:play-service:7.8.0'
}

这是一个相当大的库,有很多依赖。添加完整的Google Play服务依赖项后,图6-1显示了添加的库列表。



图6-1。完整的Google Play服务
使用Android的65K方法名称限制,您将添加许多不需要的方法句柄。而只需添加Maps依赖关系,如示例6-6所示。
实例6-6。仅添加Google地图依赖项

dependencies {
compile 'com.google.android.gms:play-service-maps:7.8.0'
}

只是地图服务(如图6-2所示)的对比是戏剧性的。


Figure 6-2。仅添加Google地图依赖项
使用dex选项
Android块允许您指定控制“dex”过程的选项,该过程将Java字节代码(即.class文件)转换为Dalvik可执行文件(.dex文件)。 dexOptions块包含示例6-7中的选项。
实例6-7。 Android中的dexOptions块
dexOptions {
incremental true
javaMaxHeapSize '2g'
jumboMode = true
preDexLibraries = true
}
incremental选项指定是否为dx处理器启用增量模式。正如文档所说,“这有很多限制,可能不工作。小心使用。
使用javaMaxHeapSize作为在dx运行期间以1024m为增量指定Xmx值的备选方法,因此这里设置为2个gigs。
启用“jumbo模式”允许在dex文件中有更多的字符串。如果这是一个问题,你可能想花更多的时间配置ProGuard。
preDexLibraries将提前在库上运行dx进程,就像它的声音。正如文档所说,“这可以改进增量构建,但干净的构建可能会更慢。
所有这些设置都可以帮助和损害性能,因此请务必在采用它们之前尝试它们。
分析您的构建
您可以使用--profile命令行选项运行Gradle以生成有关构建的有用信息。结果将以HTML形式写入build / reports / profile目录,这次在顶级项目中。
作为示例,请考虑从示例6-8中描述的多页面构建运行assembleDebug任务。
实例6-8。使用--profile选项运行Gradle
> ./gradlew --profile assembleDebug
:app:preBuild UP-TO-DATE
:app:preArrogantStarkDebugBuild UP-TO-DATE
:app:checkArrogantStarkDebugManifest
:app:preArrogantStarkReleaseBuild UP-TO-DATE
:app:preArrogantWayneDebugBuild UP-TO-DATE
:app:preArrogantWayneReleaseBuild UP-TO-DATE
:app:preFriendlyStarkDebugBuild UP-TO-DATE
:app:preFriendlyStarkReleaseBuild UP-TO-DATE
:app:preFriendlyWayneDebugBuild UP-TO-DATE
:app:preFriendlyWayneReleaseBuild UP-TO-DATE
:app:preObsequiousStarkDebugBuild UP-TO-DATE
:app:preObsequiousStarkReleaseBuild UP-TO-DATE
:app:preObsequiousWayneDebugBuild UP-TO-DATE
:app:preObsequiousWayneReleaseBuild UP-TO-DATE
// ... tons of other tasks ...
:app:assembleObsequiousWayneDebug
:app:assembleDebug
BUILD SUCCESSFUL
输出报告位于build / reports / profile文件夹中,文件名的格式为“profile-YYYY-MM-dd-hh-mm-ss.html”,其中单词“profile”后面的部分指时间戳数量年,月,日,小时,分钟和秒。
示例报告如图6-3所示。


图6-3。示例配置文件报告
各种选项卡将摘要报告分为单个配置步骤,配置(在这种情况下是最小的)和执行。在项目中,这个大小没有很多东西可以看到,但对于大型项目,这是找到瓶颈的好方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值