androidstudio 卡顿编译慢的解决方法总结

Have the courage to follow your heart and intuition.They somehow already know what you truly want to become.

问题记录:

2017年之前,我个人开发依然使用Eclipse2EE 来开发android java 和 javaWeb。毕竟Eclipse已经被广大开发者使用。但是由于后续工作重心在android端的开发,将项目迁移至androidstudio中。
迁移过程也是很多砍,总结可以查看我之前的一篇文章:Eclipse—》androidstudio项目迁移

今天来总结的是:在androidstudio中编译工程十分缓慢的解决办法。

1:先解决你的电脑硬件问题。如果太过垃圾的处理器以及运行内存的话,建议还是更换。

2:androidstudio 卡顿的问题

参考的是网上的一些文章总结:;

配置你的androidstudio的基本配置如下: 

androidstudio安装目录下  bin/studio64.exe.vmoptions 文件:

修改相应的一些配置:将相应参数设置调大一些:

-Xms2048m
-Xmx2048m
-XX:MaxPermSize=2048m
-XX:ReservedCodeCacheSize=1024m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-da
-Djna.nosys=true
-Djna.boot.library.path=

-Djna.debug_load=true
-Djna.debug_load.jna=true
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Didea.paths.selector=AndroidStudio2.2
-Didea.platform.prefix=AndroidStudio
-Didea.jre.check=true

备注:
在bin目录下有两个关于 .vmoptions 文件,一个对应32位系统,一个对应64位系统

这种方式只能改变电脑在使用androidstudio的速度,也就是打开使用的时候不至于很卡,很慢。并不会改变在你运行Instance run 时候的速度。

3:提高Instance Run的速度。

之前我的项目不大,运行一次大概是37min,随便修改个参数也需要运行29min。很是无奈。之后的时间里,寻找解决办法。一遍忍受着龟速的编译速度完成工作开发,一边找寻如何处理的方法。其中滋味很是难受。

3.1:查询自己项目编译时哪一环节使用时间最多。

在androidstudio中,如图:

查询问题

双击 Gradle/app/build/assembleRelease或者assembleDebug,这两个只是生成正式版或者测试版。没有什么问题

打开androidstudio中的run窗口如图:
这里写图片描述

然后会显示编译时每个环节中所需要的时间。因为写blog,所以这里不能直接贴出我公司项目中的运行编译实际图。但是这种方法在你遇到这种编译慢的问题上是通用的。

还有一点,run窗口显示的是这样的
这里写图片描述
点击一下箭头所指的按钮就可以了。

3.2:当你的项目编译完成之后,各个环节的编译运行时间便会明显的显示出来。然后你可以针对性的进行处理。

当你知道具体的问题后,处理起来也就相对容易了。技术问题直接可以问度娘。它知道的太多了。

因为每个人的问题都有所不同,上面的方法只是告诉你如何查找根本原因。授之以渔吧。希望能对大家有所帮助。


我项目中的解决方法:

1:配置gradle

修改你gradle中配置内容,一般情况下windows系统中gradle的安装目录环境在:

C:\Users[name].gradle 下:修改文件gradle.properties

# When set to true the Gradle daemon is to run the build.
# TODO: disable daemon on CI, since builds should be clean and reliable on servers
org.gradle.daemon=true

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true

2:配置自己的android中的一些参数

这里写图片描述

这里写图片描述

但是对于我的项目中,并没有起多大的作用罢了。

在自己的项目中build.gradle添加一些配置(即专业说法就是gradle脚本):

 /*忽略方法数超过65535检查*/
android{
    ...
    dexOptions {
        jumboMode = true
        preDexLibraries = false
    }

    /*关闭编译运行时检测*/
    lintOptions{
        checkReleaseBuilds false
        abortOnError false
    }
  }

即使经过上面的种种配置,但是我的项目编译速度依旧没有改善,也一直不知道原因。所以就使用上述的第三种方式,也是成功的方法:
查看所有编译过程中最耗时的环节:

所以我的项目整体完全编译下来最浪费时间的是由于这个步骤:
这里写图片描述

耗时超过35min。很尬。

具体原因在于自己使用了java1.8中的Lambda表达式的方式。所以在编译中会出现transformJackWithJackForDebug的超级耗时。

我试探性的将Lambda的配置取消。将自己项目中使用过的Lambda表达式的地方修改为正常表达式。整个项目编译运行3min21s.虽然没有达到秒编译的程度,但是相对之前的龟速,已经可以完成正常工作。


这里我的方法是取消掉Lambda使用,但是我觉得Lambda表达在一定程度上优化编译方式,书写方式,对于android中的兼容和检测提供了很大的帮助。所以在后面如果时间允许,还是希望能够使用Lambda表达式。之后找到一篇在使用Lambda表达式的条件下,如何加快编译速度的文章。有兴趣的朋友可以查看
在配置Lambda的情况下如何加快编译速度

因为是英文的,大致意思如下:

将你工程中的build.gradle中添加

dependencies {

classpath 'com.android.tools.build:gradle:2.3.1'

classpath 'me.tatarka:gradle-retrolambda:3.2.3'

}

然后在你项目中的build.gradle文件添加

apply plugin: 'me.tatarka.retrolambda'

这个方法我目前还没有测试过。但是根据别人的经验应该可行。

最后:在Intance Run 的时候会出现如下的问题

这里写图片描述

解决办法 :将自己的app/proguard-rules.pro这个文件中添加:

-keepattributes EnclosingMethod

-keepattributes InnerClasses

-keepattributes EnclosingMethod
-keepattributes InnerClasses

-keepattributes InnerClasses
-dontoptimize

-keep class com.baidu.** {*;}
-dontwarn com.baidu.**

新年的脚步慢慢的来临,一年又过去了,真不知道自己这一年到底收获了什么。也许很多,也许很少。但无论如何,以全新的姿态迎接新的一年。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值