加快 gradle 构建 multidex 应用程序
Speed up gradle build in multidex application
我的应用程序有一堆必不可少的库,这就是为什么我被迫使用 multidex 支持库并且它运行良好的原因。但问题出在 gradle 构建速度上。构建平均需要 2 分钟,当我开发和测试时,这非常烦人。
有没有办法加快我的调试构建?
进入设置,搜索编译器,在命令行选项中输入“--offline”,然后编译。
Android Studio 1.3(当前 in Preview 3)正在使用新的构建系统,该系统改进了 gradle 构建时间(真的,像 10 -30 倍快)。
您可以通过指定最低 SDK 版本 = 21 来加快 开发 构建。
官方文档包含关于此的 whole section。
示例(来自文档):
android {
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 14
}
}
...
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
添加产品风味后,您可以为开发构建使用 devDebug
任务(而不是默认的 debug
任务):
- 从命令行:运行 ./gradlew installDevDebug
- 来自 Android Studio:open Build Variants window 和 select devDebug
构建变体。
当然,您应该在 SDK >= 21 的设备上工作。
对于那些不想使用 flavor 的人,还有一个解决方案。如 this gist 中所建议,动态计算 minSdkVersion
值:
int minSdk = hasProperty('devMinSdk') ? devMinSdk.toInteger() : 14
apply plugin: 'com.android.application'
android {
...
defaultConfig {
minSdkVersion minSdk
...
}
}
在这个例子中,我们正在检查 devMinSdk
属性 是否定义,如果为真 - 我们正在使用它。否则,我们默认为 14。
我们如何传递 devMinSdk
值来构建脚本?两个选项:
使用命令行:
./gradlew installDebug -PdevMinSdk=21
使用 Android Studio 首选项:
转到首选项(Windows上的设置)-> 构建、执行、部署 -> 编译器 -> 在命令行选项文本框中输入-PdevMinSdk=21
。
多索引使用更多内存。当您接近 Java 中的最大堆大小时,您会发现 Java 花在 GC 上的时间比花在任何实际工作上的时间都多,这会大大降低速度。
我强烈建议在使用 multidex 时增加最大堆大小。将以下内容添加到 build.gradle 文件中的 android 闭包中,使最大堆大小为 4GB(如果您愿意,可以减小它):
dexOptions {
javaMaxHeapSize "4g"
}
将 MinSdk 更改为 21 使一切恢复正常me.Now一切都在 6 秒内编译
最近构建缓存是由开发 Android Gradle 插件的团队引入的。您可以通过将 android.enableBuildCache=true
添加到 gradle.properties
.
来启用它
这里有更多信息
http://tools.android.com/tech-docs/build-cache
对我来说,它增加了约 30 秒的增量构建时间。
它不适用于作为支持库的一部分引入的旧版 multidex (com.android.support:multidex
),因此它仅适用于您的 minSDK >= 21。您可以仅为您的开发构建设置它并执行使用 minSDK < 21.
发布版本
它也可以在不启用多索引的情况下使用。
最新的 Android Studio 3.0 不再需要它
我的应用程序有一堆必不可少的库,这就是为什么我被迫使用 multidex 支持库并且它运行良好的原因。但问题出在 gradle 构建速度上。构建平均需要 2 分钟,当我开发和测试时,这非常烦人。
有没有办法加快我的调试构建?
进入设置,搜索编译器,在命令行选项中输入“--offline”,然后编译。
Android Studio 1.3(当前 in Preview 3)正在使用新的构建系统,该系统改进了 gradle 构建时间(真的,像 10 -30 倍快)。
您可以通过指定最低 SDK 版本 = 21 来加快 开发 构建。
官方文档包含关于此的 whole section。
示例(来自文档):
android {
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 14
}
}
...
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
添加产品风味后,您可以为开发构建使用 devDebug
任务(而不是默认的 debug
任务):
- 从命令行:运行 ./gradlew installDevDebug
- 来自 Android Studio:open Build Variants window 和 select devDebug
构建变体。
当然,您应该在 SDK >= 21 的设备上工作。
对于那些不想使用 flavor 的人,还有一个解决方案。如 this gist 中所建议,动态计算 minSdkVersion
值:
int minSdk = hasProperty('devMinSdk') ? devMinSdk.toInteger() : 14
apply plugin: 'com.android.application'
android {
...
defaultConfig {
minSdkVersion minSdk
...
}
}
在这个例子中,我们正在检查 devMinSdk
属性 是否定义,如果为真 - 我们正在使用它。否则,我们默认为 14。
我们如何传递 devMinSdk
值来构建脚本?两个选项:
使用命令行:
./gradlew installDebug -PdevMinSdk=21
使用 Android Studio 首选项:
转到首选项(Windows上的设置)-> 构建、执行、部署 -> 编译器 -> 在命令行选项文本框中输入-PdevMinSdk=21
。
多索引使用更多内存。当您接近 Java 中的最大堆大小时,您会发现 Java 花在 GC 上的时间比花在任何实际工作上的时间都多,这会大大降低速度。
我强烈建议在使用 multidex 时增加最大堆大小。将以下内容添加到 build.gradle 文件中的 android 闭包中,使最大堆大小为 4GB(如果您愿意,可以减小它):
dexOptions {
javaMaxHeapSize "4g"
}
将 MinSdk 更改为 21 使一切恢复正常me.Now一切都在 6 秒内编译
最近构建缓存是由开发 Android Gradle 插件的团队引入的。您可以通过将 android.enableBuildCache=true
添加到 gradle.properties
.
这里有更多信息 http://tools.android.com/tech-docs/build-cache
对我来说,它增加了约 30 秒的增量构建时间。
它不适用于作为支持库的一部分引入的旧版 multidex (com.android.support:multidex
),因此它仅适用于您的 minSDK >= 21。您可以仅为您的开发构建设置它并执行使用 minSDK < 21.
它也可以在不启用多索引的情况下使用。
最新的 Android Studio 3.0 不再需要它