项目结构上的Android Studio中的StackOverflowError:null

自从我更新到Android Studio 2.3以来,在某些情况下会出现IDE错误:例如,当我单击File->Project Structure ,尝试打开任何布局XML,甚至单击任何build.gradle文件的代码中的任意build.gradle (这些至少开放无例外)。 该错误说StackOverflowError: null ,堆栈跟踪在所有情况下是相同的:

 null java.lang.StackOverflowError at java.util.regex.Pattern.sequence(Pattern.java:2079) at java.util.regex.Pattern.expr(Pattern.java:1996) at java.util.regex.Pattern.compile(Pattern.java:1696) at java.util.regex.Pattern.<init>(Pattern.java:1351) at java.util.regex.Pattern.compile(Pattern.java:1028) at java.lang.String.replaceAll(String.java:2223) at com.android.tools.idea.gradle.dsl.parser.settings.ProjectPropertiesDslElement.getStandardProjectKey(ProjectPropertiesDslElement.java:52) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslExpression.resolveProjectReference(GradleDslExpression.java:191) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslExpression.resolveReference(GradleDslExpression.java:92) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslReference.getValue(GradleDslReference.java:66) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslExpression.resolveReference(GradleDslExpression.java:152) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslReference.getValue(GradleDslReference.java:66) at com.android.tools.idea.gradle.dsl.parser.elements.GradleDslExpression.resolveReference(GradleDslExpression.java:152) 

…和最后2行永远重复。

我能做些什么来找到这个问题的根源?

看起来在我的构建配置中有一个循环引用,或Studio的内部? 但是我找不到任何人。 如果我至少知道堆栈跟踪中提到的模式或参考是有帮助的。

我已经尝试过的事情:

  • 无效的缓存和重新启动
  • 删除项目目录中的.idea/和其他临时文件夹
  • 检查项目到一个新的位置
  • settings->build->gradle->experimental启用“新建项目结构对话框” – 然后对话框工作,但是关闭它仍然会出现同样的错误,其他情况下仍然不起作用

我使用的Android Studio 2.3.3所有的插件和Android库更新,gradle 3.3和gradle插件2.3.1; 所有在最新的gentoo linux上。

我已经解决了这个问题。 在我的主build.gradle有这3行:

 ext.kotlinVersion = kotlinVersion ext.supportLibVersion = supportLibVersion ext.playServicesVersion = playServicesVersion 

在这个项目中, *Version变量是在gradle.properties文件中分配的,而不是在build.gradle文件中,所以它们已经可以在所有的模块gradle文件中访问,并且上面的行创建了一个循环引用。 (我不是Gradle的专家,这只是一个猜测)

我认为它们是在某些时候被Kotlin插件添加的(“在项目中配置Kotlin”选项),而自动化的编辑会搞乱我们复杂的配置。 或者以前的一个开发者把它留在那里 我似乎无法在一个干净的项目上重现它。