如何防止rawproto文件生成或自动删除它们?

时间:2017-04-20 14:10:54

标签: android-studio gradle android-gradle

Android gradle插件会在.rawproto目录中生成大量build/android-profile个文件。它们用于什么?有没有办法禁用这种疯狂或自动删除它们?

1 个答案:

答案 0 :(得分:4)

我已经被它搞了很长时间了,现在我注意到有几千兆的这个占用了我的小SSD,我决定找出一种方法来禁用它。对我来说,占用太多空间之前最烦人的事情是gradlew clean留下build文件夹。

仅使用com.android.tools.build:gradle:3.0.1进行测试,因此YMMV。

TL; DR

对于全局应用程序阅读上一部分,每个项目在rootProject的{​​{1}}中使用此内容:

build.gradle

研究

感谢https://stackoverflow.com/a/43910084/253468 @JeffRichards提到com.android.build.gradle.internal.profile.ProfilerInitializer.recordingBuildListener = new com.android.build.gradle.internal.profile.RecordingBuildListener( com.android.builder.profile.ProcessProfileWriter.get()); // and then `gradlew --stop && gradlew clean` to verify no build folder is left behind ,我在那里设置了断点,并通过运行ProcessProfileWriterFactory.java检查了谁在调用它(不要与{混淆} {1}})并附加远程调试器。

我按照路径发现gradlew -Dorg.gradle.debug=true --info创建了文件夹并写入。对方法调用进行回溯我发现--debug控制它是否被调用...并且由ProcessProfileWriter.finishAndMaybeWriteProfilerInitializer.recordingBuildListener)直接初始化。

因此,为了防止发生任何事情,我选择通过预先初始化的静态字段来尝试禁用防护。值得庆幸的是,Groovy(以及因此Gradle)没有提供关于JVM可见性修饰符的*,因此没有反映这里的魔术线:

BasePlugin

我知道,它有点冗长,但它有效,如果你导入东西它看起来更好:

apply plugin: 'com.android.*'

应用魔法

在单项目构建(一个com.android.build.gradle.internal.profile.ProfilerInitializer.recordingBuildListener = new com.android.build.gradle.internal.profile.RecordingBuildListener( com.android.builder.profile.ProcessProfileWriter.get()); )中,您必须在 之前应用此

ProfilerInitializer.recordingBuildListener = new RecordingBuildListener(ProcessProfileWriter.get());

在多项目构建中(大多数模板项目:build.gradle文件夹,apply plugin: 'com.android.application' 和许多app)我建议您在settings.gradle块周围应用它:< / p>

build.gradle

确保它在任何buildscript之前,而不在buildscript { // ... dependencies { classpath 'com.android.tools.build:gradle:3.0.1' } } // magic line here 块内。

全局应用魔法

显然,如果它在一个项目中困扰我们,它将在所有情况下,所以在Gradle's manual之后,在apply plugin:buildscript中创建一个文件(请注意this folder can be relocated with GRADLE_USER_HOME)具有以下内容:

~/.gradle/init.gradle