Gradle使用DexForDeBug在TransformClasses上缓慢构建
构建我的Android应用程序大约需要90秒(“快速”),每次更新代码最多需要3分钟。这完全是浪费时间,因为这是真的,我认为解决方案一定是唾手可得的。我试着调查这个问题,发现了不同的博客帖子,并给出了答案和建议,其中大部分我都试过了Gradle使用DexForDeBug在TransformClasses上缓慢构建,gradle,android-build,Gradle,Android Build,构建我的Android应用程序大约需要90秒(“快速”),每次更新代码最多需要3分钟。这完全是浪费时间,因为这是真的,我认为解决方案一定是唾手可得的。我试着调查这个问题,发现了不同的博客帖子,并给出了答案和建议,其中大部分我都试过了 我有org.gradle.deamon=true的gradle.properties文件 我使用Gradle Prefence在Android Studio上运行离线工作(改进了,但仍然很慢) 我在命令行上运行(速度更快,但仍然很慢) 在build.gradle的
- 我有org.gradle.deamon=true的gradle.properties文件
- 我使用Gradle Prefence在Android Studio上运行离线工作(改进了,但仍然很慢)
- 我在命令行上运行(速度更快,但仍然很慢)
- 在build.gradle的defaultConfig中,我将multiDexEnabled设置为false
- 在build.gradle的dexOptions中,我将preDexLibraries设置为false
- 在gradle-wrapper.properties中,我获取了一个最新的gradle版本(2.8)(速度的显著变化发生在2.4上)
我期待着得到任何关于如何改进构建过程的建议。提前感谢。这似乎是Android Studio 2.0预览版中引入的新即时运行机制的一部分,它负责为应用程序中的每个方法插入指令,为将来的代码补丁创建执行分支。恐怕这就是它非常慢的原因
奇怪的是,即使禁用了Instant Run,此任务仍在执行。我不得不将“com.android.tools.build:gradle”降级到1.3.0以避免这项任务。我也面临同样的问题,我花了大约10个小时才最终解决,所以我知道你的感受 我在谷歌上搜索了很多,我做了和你一样的配置工作,即使有一点帮助,编译和运行实际的应用程序仍然是一件痛苦的事情(有时当我更改一行代码时需要2-3分钟,但当我做更多的工作时,通常需要8分钟,而我的计算机在这段时间内完全冻结) 但谈够了,让我们来解决这个问题。“app:transformClassesWithDexForDebug”解决了Dalvik(5.0之前,api 21)操作系统版本的一些依赖性,这很重要,需要花费大量时间。开发时您不需要它,因为您可以在>=21上测试您的应用程序,所以为开发和发布创建单独的产品风格。这是我的gradle版本,它利用了它:
apply plugin: 'com.android.application'
final VERSION_MAJOR = 0
final VERSION_MINOR = 0
final VERSION_PATCH = 0
final VERSION_BUILD = 1
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.app"
minSdkVersion 15
targetSdkVersion 23
multiDexEnabled true
versionName "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_BUILD}"
versionCode VERSION_MAJOR * 10000000 + VERSION_MINOR * 100000 + VERSION_PATCH * 1000 + VERSION_BUILD
}
dexOptions {
incremental = true;
preDexLibraries = false
javaMaxHeapSize "2g"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
dev {
minSdkVersion 21
applicationId = "com.app.test"
}
prod {
minSdkVersion 15
applicationId = "com.app" // you don't need it, but can be useful
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/ASL2.0'
}
lintOptions {
checkReleaseBuilds false
abortOnError true
}
}
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = ['--multi-dex']
} else {
dx.additionalParameters += '--multi-dex'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
...
}
下一件事是要确保你真的用这个来构建你的应用程序。单击视图->工具窗口->构建工具,并确保已将构建变量设置为“devDebug”
对一些人来说,这可能就足够了。我在SO和reddit上发现了很多线索,都以这款产品的味道结尾,但实际上这对我一点帮助都没有。帮助我的是手动升级gradle。既然您已经尝试过了,我认为您的做法是正确的,但我建议您使用更新的gradle 2.9版,它的“”超过了2.8。编辑:此时,我建议您在安装1.5的同时运行Android Studio 2.x。您可以访问instant run,它与所有更新的工具一样非常有用。如果你坚持1.5,请继续阅读 我已经设法将Android Studio 1.5调试版本的速度从2分钟提高到30秒。这可能不适用于您的命令行执行,但可能会更快 使用此配置,您的第一个IDE构建所需的时间与相同,但增量构建速度更快,即使您修改了类。如果修改附加的库,则会损失一些收益 第1步。(如果您有幸已经将>=21的Minsdk版本作为目标,请跳过此项。) @vanomart关于minSdkVersion调试风格>=21的回答没有错,但唯一需要做的是将以下内容添加到模块(应用程序)build.gradle中,并确保在“构建变体”选项卡中调试时以开发为目标:
android {
[...]
productFlavors {
dev {
minSdkVersion 21 //The important bit.
}
prod {
minSdkVersion 15 //Example. Set to your real requirement.
}
}
第2步。预编制索引LIB
在您的模块(应用程序)build.gradle中设置以下配置。这对于IDE构建更快,对于每个构建都从头开始的构建器服务器来说则不然
android {
[...]
dexOptions {
preDexLibraries true
javaMaxHeapSize "2g" // Use gig increments depending on needs
}
来源,与“提高构建服务器性能”相反(部分):
第3步。确保您使用的是模块(应用程序)build.gradle中最新的buildToolsVersion
android {
buildToolsVersion "23.0.2"
[...]
“…将所有模块中的生成工具版本更新为最新版本
(23.0.2)。[…]它将使用新的更快版本的dex,这有助于
即时运行和完整构建都要快一点。”
资料来源:
步骤4。使用最新的Gradle构建工具
在您的项目build.gradle中,设置为最新版本(当前为2.0.0-alpha6)
更新列表:
第5步。使用最新的Gradle包装。修改gradle wrapper.properties,将此行更新为使用2.10:
distributionUrl=https\://downloads.gradle.org/distributions/gradle-2.10-all.zip
#Alternative url if the above does not work:
#distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
在Android Studio首选项中,确保选择了“使用默认渐变包装器”。我建议重新启动Android Studio,以确保Gradle守护进程重新启动
“在许多情况下,Gradle 2.9是mu
distributionUrl=https\://downloads.gradle.org/distributions/gradle-2.10-all.zip
#Alternative url if the above does not work:
#distributionUrl=https://services.gradle.org/distributions/gradle-2.10-all.zip
classpath 'com.android.tools.build:gradle:2.1.0'
org.gradle.jvmargs = -Xmx2048m