pcj*_*pcj 16 android gradle android-build android-gradle-plugin
我的应用程序使用旧架构组件.我想转向新的Android架构组件.
为此,我在开始时添加了与房间相关的依赖项,之后构建正常.
但是,当我尝试添加了Lyfecycles,LiveData和视图模型的依赖,提到这里.
应用程序构建过程大大减慢,构建apk需要5分钟和更长的时间.
在app的build.gradle中添加了以下dependecies:
compile "android.arch.lifecycle:runtime:1.0.0-alpha5"
compile "android.arch.lifecycle:extensions:1.0.0-alpha5"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha5"
Run Code Online (Sandbox Code Playgroud)
此外,我必须启用插孔以实现Java 8兼容性,如下所示:
defaultConfig {
........
jackOptions {
enabled true
}
}
Run Code Online (Sandbox Code Playgroud)
添加所有这些组件后,构建过程已大大减慢.我尝试通过转到某些参数来进行一些自定义VM选项更改Help -> Edit custom VM options
-Xmx5120m
Run Code Online (Sandbox Code Playgroud)
我把它设置为几乎5 GB,但对我来说没有任何作用.我相信我的机器有足够的硬件.(8 GB RAM,Windows 10,1TB HDD,AMD A8)
我的应用程序使用了许多谷歌服务,如Gmail API,Firebase API,其他一些库我用尽了64K参考限制?但是我已经启用了这里提到的多索引.
这是因为新的架构组件还是其他原因而发生的?如何使构建过程更快?
更新:
下面的答案之一Budius提出了一个脚本,它将显示每个构建过程所采用的时间,我在我的应用程序中执行它的结果是:
BUILD SUCCESSFUL
Total time: 18 mins 28.44 secs
Task timings:
480ms :app:mergeDebugResources
2516ms :app:processDebugResources
487725ms :app:transformClassesWithPreJackPackagedLibrariesForDebug
29213ms :app:transformClassesWithPreJackRuntimeLibrariesForDebug
752ms :app:transformResourcesWithMergeJavaResForDebug
556894ms :app:transformJackWithJackForDebug
5184ms :app:transformNativeLibsWithMergeJniLibsForDebug
17524ms :app:packageDebug
Run Code Online (Sandbox Code Playgroud)
大多数时间都是杰克.
我尝试了下面的答案由Bryan建议的canary版本以下是构建过程所需的时间输出:
BUILD SUCCESSFUL in 6m 11s
42 actionable tasks: 33 executed, 9 up-to-date
Task timings:
608ms :app:preDebugBuild
350ms :app:mergeDebugResources
394ms :app:processDebugManifest
2543ms :app:processDebugResources
9410ms :app:javaPreCompileDebug
46585ms :app:compileDebugJavaWithJavac
262ms :app:compileDebugShaders
395ms :app:mergeDebugAssets
5835ms :app:packageInstantRunResourcesDebug
98922ms :app:transformClassesWithDesugarForDebug
334ms :app:transformClassesWithExtractJarsForDebug
7765ms :app:transformClassesWithInstantRunVerifierForDebug
23117ms :app:transformNativeLibsWithMergeJniLibsForDebug
10128ms :app:transformResourcesWithMergeJavaResForDebug
16565ms :app:transformClassesWithInstantRunForDebug
11825ms :app:transformClassesWithInstantRunSlicerForDebug
84703ms :app:transformClassesWithDexBuilderForDebug
17061ms :app:transformDexArchiveWithDexMergerForDebug
1706ms :app:transformDexWithInstantRunDependenciesApkForDebug
9770ms :app:transformDexWithInstantRunSlicesApkForDebug
10571ms :app:packageDebug
1387ms :app:buildInfoGeneratorDebug
Run Code Online (Sandbox Code Playgroud)
所以我删除了插孔并切换到这个金丝雀版本,构建比以前更快,但仍然使用缓慢.
您的问题很多都基于这样或那样的假设,即存在"批次".但是时间很容易衡量,并且gradle将构建过程分成几个较小的任务.所以我想你最好的行动就是衡量每项任务,而不是比较你所花费的时间.
这是我用来衡量构建时间的脚本,只需添加它来执行项目的根文件夹并在顶级gradle文件中添加apply from: 'time.gradle'
timer.gradle
import java.util.concurrent.TimeUnit
class TimingsListener implements TaskExecutionListener, BuildListener {
private long startTime
private timings = []
@Override
void beforeExecute(Task task) {
startTime = System.nanoTime()
}
@Override
void afterExecute(Task task, TaskState taskState) {
def ms = TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
timings.add([ms, task.path])
}
@Override
void buildFinished(BuildResult result) {
println "Task timings:"
for (timing in timings) {
if (timing[0] >= 250) {
printf "%7sms %s\n", timing
}
}
}
@Override
void buildStarted(Gradle gradle) {}
@Override
void projectsEvaluated(Gradle gradle) {}
@Override
void projectsLoaded(Gradle gradle) {}
@Override
void settingsEvaluated(Settings settings) {}
}
gradle.addListener new TimingsListener()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2240 次 |
最近记录: |