自从我更新到Android Studio 2.3后,在某些情况下会出现IDE错误:例如,当我点击File->Project Structure
时,尝试打开任何布局XML,甚至点击任意代码中的任意一点{ {1}}文件(这些文件至少在没有例外的情况下打开)。错误显示build.gradle
,并且堆栈跟踪在所有情况下都相同:
StackOverflowError: null
...最后两行永远重复。
如何找到此问题的根源?
看起来在我的构建配置或Studio内部的某处有一个循环引用?但我无法手工找到任何东西。如果我至少知道堆栈跟踪中提到的模式或引用是什么会有所帮助。
我已经尝试过的事情:
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)
和其他临时文件夹.idea/
中启用&#34;新的项目结构对话框&#34; - 然后对话框工作,但关闭它时仍然会出现同样的错误,其他情况仍然无法正常工作我使用Android Studio 2.3.3更新了所有插件和android库,gradle 3.3和gradle插件2.3.1;所有这些都在最新的gentoo linux上。
答案 0 :(得分:1)
我已经解决了这个问题。我的主build.gradle
中有这3行:
ext.kotlinVersion = kotlinVersion
ext.supportLibVersion = supportLibVersion
ext.playServicesVersion = playServicesVersion
在此项目中,*Version
变量在gradle.properties
文件中分配,而不是在build.gradle
文件中,因此它们已在所有模块gradle文件中可访问,并且上面的行创建循环引用。 (我不是专家,只是一个猜测)
我认为Kotlin插件在某些时候添加了它们(&#34;在项目中配置Kotlin&#34;选项),自动编辑搞砸了我们复杂的配置。或者以前的一些开发者留在那里。我似乎无法在一个干净的项目上重现它。