项目结构上的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”选项),而自动化的编辑会搞乱我们复杂的配置。 或者以前的一个开发者把它留在那里 我似乎无法在一个干净的项目上重现它。